用AWS实现安全弹性的CI/CD管道

fanpink 2019-07-25

众所周知,任何基于云托管服务所构建的大规模、高弹性的应用程序,都需要配有自动化的验证、基础架构的升级、开发与部署、质量保证、以及基础架构的管理等配套功能。目前,针对传统基础架构的管理模式,正在被能够涵括到产品开发生命周期每个阶段的、构建CI/CD管道的模式所取代。

什么是DevOps?

DevOps是将软件开发和运营相结合的一种方式。它是从敏捷开发的过程中发展起来的一种文化。其中,持续集成、持续交付和持续部署是随着DevOps的兴起,而新产生的开发类方法,它们给企业带来了如下方面的好处:

  • 实现团队之间的沟通、协作与凝聚力
  • 提供针对应用变更、配置和部署自动化的优秀实践
  • 提供各种更快的解决方案
  • 监控和规划各种高频次的产品更新

用AWS实现安全弹性的CI/CD管道

图1:DevOps

CI/CD摆脱了过去的“手动门(manual gate)”方式,实现了针对验收环境的全自动化验证,并能确定管道是否适合后续的生产环境。

持续集成(Continuous Integration)侧重于从代码库的角度,来控制各个开发者的软件开发周期。它可以在一天内执行多次集成操作。其主要目的是:在早期就能检测出集成中的错误,达到更紧密的内聚和更频繁的开发协作。与之相关的主要活动包括:静态代码分析、单元测试和自动审核。

持续交付(Continuous Delivery)侧重于测试,能够在不同阶段、或生产环境中实现自动化代码部署,并在获得更新批准后,通过自动化的软件发布流程,先发制人地发现各种部署过程中的问题。

用AWS实现安全弹性的CI/CD管道

图2:DevOps阶段

DevOps的优势

  • 改进了各种协作、运营支持、以及更快的修复
  • 提高了灵活性、灵敏性和可靠性
  • 实现基础设施的安全性和各类数据的保护
  • 能够更快地维护与升级
  • 可以将数字化战略转变为项目
  • 提高了整体速度、生产率和IT团队的工作效率

AWS和DevOps

AWS提供了一整套开发者工具。用户可以在安全、可扩展、可维护、且易于集成的环境中,使用现有的CI/CD工具(如Ansible、Chef、puppet、Terraform等)实现DevOps的CI/CD。

AWS为虚拟机或基于容器的服务提供了CI/CD,以及管理(包括:创建、更新和删除)所有其他服务(如:数据库、存储、计算机、机器学习等)的选项。

用AWS实现安全弹性的CI/CD管道

图3:AWS的CI/CD工具

适用于DevOps集成的AWS服务:

  • AWS CloudFormation:为基础架构和各种服务模板提供了准备工具。这些模板可以用JSON和YAML来编写,并且可以通过版本控制来进行管理。同时,这些模板也可以在Jenkins或任何其他具有AWS CLI(命令行)的CI服务器上被执行。Terraform为AWS Resource Manager提供了一个选项,用户可以使用到丰富的控件、以及带有状态管理的扩展。
  • AWS OpsWorks:通过与配置管理软件(如Chef)、以及应用程序生命周期管理的集成,它提供了更高级别的自动化增值功能。
  • AWS CodePipeline:通过持续交付和发布自动化服务,它能够促进部署的顺利执行。用户可以将设计工作流程,运用于检入代码、构建代码、将应用程序部署到阶段性的测试环境,以及发布到真正的生产环境中。
  • AWS CodeCommit:这是一种安全的、且具有高可扩展性的托管源控制服务。它可以托管各种私有类型的Git存储库。
  • AWS CodeDeploy:它具有跨Amazon E2C集群部署应用程序的能力。该服务能够尽力地减少停机时间,并通过集中控制,与现有软件版本、或持续交付的流程相集成。另外,它支持诸如Claudia和Serverless之类的第三方工具,实现了对于AWS Lambda和Elastic Beanstalk的部署。
  • AWS ElasticBeanstalk:支持自动化、以及众多其他类型的DevOps优秀实践,其中包括:自动化应用程序的部署与监视、基础架构的配置、以及版本的管理。同时,它可以轻松地实现对于应用程序和基础架构的更改、回滚和转发。
  • AWS ECS:这是一种安全的、且具有高可扩展性的容器服务,可用于存储各种Docker镜像。
  • AWS XRay:能够记录并跟踪所有服务之间的通信,进而检测各项性能,以及应用程序中的权限问题。
  • AWS Config:这是一种审核工具,可用于监控现有AWS的账户资源,并触发针对基础架构的各种变更警报。
  • AWS CloudTrail:它能够支持有关治理性、合规性、运营性、以及其他风险类型的审计。
  • AWS CloudWatch:该服务能够实时监控所有的AWS资源与应用程序。它通过设计仪表板、报警和触发器的形式,为托管服务提供一系列的指标参数。

用AWS实现安全弹性的CI/CD管道

图4:使用AWS和其他CI工具的管道示例

如今,在软件开发的过程中,传统的模式正在发生蜕变,取而代之的是:无论IT运营,还是开发人员都应遵循如下的系统推进原则与理念:

  • 基础架构即代码:我们需要以开发人员处置测试代码的优秀实践方式,来处置基础架构。AWS能够以DevOps为中点,去创建并维护基础架构。
  • 持续部署:这是DevOps的核心战略概念。其主要目标是实现适合于生产环境的应用程序代码,并实现自动化部署。
  • 自动化:专注于基础架构和应用程序的设置、配置、部署与支持。
  • 监控:由于沟通和协作是DevOps战略的基础,因此,及时获悉反馈是非常重要的。
  • 安全:安全性是需要持续关注的。无论是基础设施,还是公司的各项资产都需要得到妥善的保护。而且在出现问题时,开发人员应当与运营人员协同迅速解决。

相关推荐