将 IaC 集成到 CI/CD 流水线中

在 AWS 上自动化部署

Dunieski Otano

Amazon Web Services Solutions Architect

先代码,后基础设施

code-first

  • 代码通过 CodePipeline 部署;基础设施人工更新
  • 开发扩容 Lambda;运维调整 SQS 队列大小
  • 代码与基础设施漂移导致故障
  • 将 CloudFormation 接入同一流水线
在 AWS 上自动化部署

将 CloudFormation 作为流水线操作

pipeline-action

  • CodePipeline 支持 CloudFormation 部署操作
  • 流水线将 模板制品 传递给该操作
  • 模式:CREATE_UPDATE、DELETE_ONLY、REPLACE_ON_FAILURE、CHANGE_SET_REPLACE / EXECUTE
  • 与源码、构建、应用部署操作并行运行
在 AWS 上自动化部署

典型端到端流水线

typical

  • Source:Git 推送触发流水线
  • Build:生成模板与应用制品
  • Deploy infra:CloudFormation 创建或更新栈
  • Deploy app:CodeDeploy 投产新版本
在 AWS 上自动化部署

栈失败时自动回滚

  • 更新失败将自动回滚到上一次正常状态
  • 该流水线阶段失败,后续阶段停止
  • 第 1 章配置的故障告警会自动触发

automatic

在 AWS 上自动化部署

用嵌套栈实现模块化模板

  • 嵌套栈 声明类型为 AWS::CloudFormation::Stack
  • 父栈传参并读取输出
  • 各模块在父栈内独立部署

nested

在 AWS 上自动化部署

面向多账号、多区域的 StackSet

  • StackSet 将一个模板部署到多个账号与区域
  • 适用于安全基线、护栏、共享基础设施
  • 可添加或移除栈实例,无需改模板
  • 统一管理,本地部署

stackset

在 AWS 上自动化部署

选择合适形态

right-shape

  • Single stack:小型应用,单一环境
  • Nested stacks:大模板,模块化组件
  • StackSets:同一模板,覆盖多账号与区域
  • 三者均可与 CodePipeline 良好配合
在 AWS 上自动化部署

让我们一起练习吧!

在 AWS 上自动化部署

Preparing Video For Download...