金絲雀與線性部署
在 AWS 上自動化部署
Dunieski Otano
Amazon Web Services Solutions Architect
一次壞版本,所有使用者遭殃
付款邏輯變更立即部署到 100% 流量
活躍流量下出現 bug;所有結帳失敗
若做 10% 金絲雀,5 分鐘就會抓到
略過金絲雀的代價:直接損失金錢
什麼是金絲雀部署
先把
小部分流量
導到新版本
在
固定等待時間
觀察指標
若健康,
一次轉移其餘
流量
常見做法:
10% 持續 5 分鐘
,再轉為 100%
什麼是線性部署
以
等量增量
逐步轉移流量
每一步之間等待觀察
例如:
每 1 分鐘 10%
,共 10 分鐘
比金絲雀更平滑,但總時長更久
金絲雀 vs. 線性:並排比較
金絲雀:
先一小段,接著全部
線性:
多個小步驟
逐步提升
金絲雀抓問題快;線性漸進上坡
兩者在
觸發回復
時都會暫停
Lambda 的 CodeDeploy 組態
CodeDeployDefault.LambdaCanary10Percent5Minutes
:10% 持續 5 分鐘,然後 100%
CodeDeployDefault.LambdaLinear10PercentEvery1Minute
:每分鐘增加 10%
CodeDeployDefault.LambdaAllAtOnce
:立即全量流量
ECS 有對應的以 ECS 為前綴的組態
用 CloudWatch 警示自動回復
在部署群組附加
CloudWatch 警示
常見警示:
errors、duration、5xx
若警示進入
ALARM
狀態,部署會停止
CodeDeploy 會
回復
到先前版本
選對組態
例行低風險修補 →
AllAtOnce
高風險正式環境變更 →
Canary
想要平滑穩定提升 →
Linear
一律搭配
警示
以自動回復
一起來練習吧!
在 AWS 上自動化部署
Preparing Video For Download...