面向无服务器与 IaC 的 AWS SAM 与 CDK

在 AWS 上自动化部署

Dunieski Otano

Amazon Web Services Solutions Architect

一份 2,000 行的 YAML 文件

yaml

  • 一个 Lambda + API Gateway 膨胀到 2,000 行 YAML
  • 逐条列出每个 IAM 角色、日志组与权限
  • 权限策略中段落的一个拼写错误
  • 用 SAM 与 CDK 可压缩为寥寥数行
在 AWS 上自动化部署

AWS SAM 一览

sam

  • SAM 是面向无服务器的 CloudFormation 扩展
  • 精简资源类型:AWS::Serverless::Function、::Api
  • 使用 SAM CLI 构建、打包与部署
  • 模板会转换为纯 CloudFormation
在 AWS 上自动化部署

SAM 工作流

workflow

  • sam init:从模板搭建项目骨架
  • sam validate:构建前校验模板
  • sam build:编译并打包代码
  • sam deploy:部署到 CloudFormation 堆栈
在 AWS 上自动化部署

AWS CDK 一览

  • 用 TypeScript、JavaScript、Python、Java、C#、Go 编写基础设施
  • 用 cdk synth 编译为 CloudFormation
  • 用 cdk deploy 部署;代码变更会重新构建
  • 与 CloudFormation 相同的堆栈与资源概念

cdk

在 AWS 上自动化部署

CDK 构件层级

  • L1:CloudFormation 资源的 1:1 封装
  • L2:带合理默认值的精选构件
  • L3:将多资源打包的模式
  • 层级越高 = 代码更少,控制更弱

construct

在 AWS 上自动化部署

各自的适用场景

  • 原生 CloudFormation:控制最全,友好运维
  • SAM:纯无服务器应用,最快路径
  • CDK:复杂基础设施,编程语言团队
  • 三者底层部署方式相同

each

在 AWS 上自动化部署

三者最终均以 CloudFormation 部署

funnel

  • SAM 会转换(transform)为 CloudFormation
  • CDK 会合成(synth)为 CloudFormation
  • 生成的堆栈共享相同的事件、漂移、变更集
  • 回滚行为在各工具中一致
在 AWS 上自动化部署

让我们一起练习吧!

在 AWS 上自动化部署

Preparing Video For Download...