將 IaC 納入 CI/CD pipeline

在 AWS 上自動化部署

Dunieski Otano

Amazon Web Services Solutions Architect

先程式,後基礎設施

code-first

  • 透過 CodePipeline 部署程式碼;基礎設施手動更新
  • 開發調整 Lambda;營運調整 SQS 佇列大小
  • 程式與基礎設施漂移導致中斷
  • 將 CloudFormation 接到同一條 pipeline
在 AWS 上自動化部署

將 CloudFormation 作為 pipeline 動作

pipeline-action

  • CodePipeline 支援 CloudFormation deploy action
  • pipeline 將 template artifact 傳給該動作
  • 模式:CREATE_UPDATE、DELETE_ONLY、REPLACE_ON_FAILURE、CHANGE_SET_REPLACE / EXECUTE
  • 與 source、build、app-deploy 動作並行執行
在 AWS 上自動化部署

端到端典型 pipeline

typical

  • Source:Git push 觸發 pipeline
  • Build:產生 template 與 app artifact
  • Deploy infra:CloudFormation 建立或更新 stack
  • Deploy app:CodeDeploy 送出新版本
在 AWS 上自動化部署

Stack 失敗時自動回復

  • 更新失敗會自動回復到上一次良好狀態
  • 該 pipeline 階段失敗並停止後續階段
  • 第 1 章設定的失敗警示會自動觸發

automatic

在 AWS 上自動化部署

以 Nested stacks 模組化模板

  • Nested stack 宣告型別為 AWS::CloudFormation::Stack
  • 將 2,000 行 template 拆成可重用模組
  • 父 stack 傳入參數並讀取輸出
  • 各模組在父層內獨立部署

nested

在 AWS 上自動化部署

StackSets:多帳戶、多區域

  • StackSet 可將一個 template 部署到多個帳戶與地區
  • 適用於安全基線、護欄、共用基礎設施
  • 可新增或移除stack instances,無需改寫 template
  • 中央管理,本地部署

stackset

在 AWS 上自動化部署

選對架構形態

right-shape

  • Single stack:小型應用,單一環境
  • Nested stacks:大型模板,模組化元件
  • StackSets:同一模板,多帳戶與多區域
  • 三者皆可與 CodePipeline 搭配
在 AWS 上自動化部署

一起來練習吧!

在 AWS 上自動化部署

Preparing Video For Download...