無伺服器與 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
  • 產生的堆疊共用相同的 events、drift、change sets
  • 不論工具組為何,回滾方式一致
在 AWS 上自動化部署

一起來練習吧!

在 AWS 上自動化部署

Preparing Video For Download...