金絲雀與線性部署

在 AWS 上自動化部署

Dunieski Otano

Amazon Web Services Solutions Architect

一次壞版本,所有使用者遭殃

split

  • 付款邏輯變更立即部署到 100% 流量
  • 活躍流量下出現 bug;所有結帳失敗
  • 若做 10% 金絲雀,5 分鐘就會抓到
  • 略過金絲雀的代價:直接損失金錢
在 AWS 上自動化部署

什麼是金絲雀部署

canary

  • 先把小部分流量導到新版本
  • 固定等待時間觀察指標
  • 若健康,一次轉移其餘流量
  • 常見做法:10% 持續 5 分鐘,再轉為 100%
在 AWS 上自動化部署

什麼是線性部署

linear

  • 等量增量逐步轉移流量
  • 每一步之間等待觀察
  • 例如:每 1 分鐘 10%,共 10 分鐘
  • 比金絲雀更平滑,但總時長更久
在 AWS 上自動化部署

金絲雀 vs. 線性:並排比較

  • 金絲雀:先一小段,接著全部
  • 線性:多個小步驟逐步提升
  • 金絲雀抓問題快;線性漸進上坡
  • 兩者在觸發回復時都會暫停

traffic

在 AWS 上自動化部署

Lambda 的 CodeDeploy 組態

  • CodeDeployDefault.LambdaCanary10Percent5Minutes:10% 持續 5 分鐘,然後 100%
  • CodeDeployDefault.LambdaLinear10PercentEvery1Minute:每分鐘增加 10%
  • CodeDeployDefault.LambdaAllAtOnce:立即全量流量
  • ECS 有對應的以 ECS 為前綴的組態

label

在 AWS 上自動化部署

用 CloudWatch 警示自動回復

  • 在部署群組附加CloudWatch 警示
  • 常見警示:errors、duration、5xx
  • 若警示進入ALARM 狀態,部署會停止
  • CodeDeploy 會回復到先前版本

label

在 AWS 上自動化部署

選對組態

pick

  • 例行低風險修補 → AllAtOnce
  • 高風險正式環境變更 → Canary
  • 想要平滑穩定提升 → Linear
  • 一律搭配警示以自動回復
在 AWS 上自動化部署

一起來練習吧!

在 AWS 上自動化部署

Preparing Video For Download...