部署策略:版本、別名與流量切換
使用 AWS Lambda 的無伺服器應用程式
Claudio Canales
Senior DevOps Engineer
版本是不可變的快照
- 把版本當成發行成品。
- 每個版本都包含程式與設定。
- 一旦發佈就不會改變。
- 隨時可回到已知的良好狀態。
別名是穩定指標
- 穩定的指標。
- 呼叫別名而非直接呼叫版本。
- 可更新指向目標而不影響呼叫端。
Dev 與 Prod 別名
- 很適合對應環境。
dev 可常態移動。
- 將別名移到
prod 即可升級。
以加權別名進行流量切換
- 在正式環境安全測試。
- 大多數流量留在現行版本。
- 少部分導向候選版本。
金絲雀步驟 1:90/10
- 90% 留在現行版本。
- 10% 在真實負載下測候選。
- 監看錯誤與延遲。
金絲雀步驟 2:50/50
- 若 10% 表現良好,提升權重。
- 50% 現行、50% 候選。
- 50/50 問題顯現快。
- 監控很重要。
金絲雀步驟 3:100% 新版
- 導全部流量到新版本。
- 舊版本仍保留。
- 回復很簡單。
藍綠部署心智模型
- 藍色=現行穩定版本。
- 綠色=新候選版本。
- 透過移動別名切換。
- 加權路由讓切換漸進。
回復=把別名移回去
- 不需重新部署。
- 將別名移回最後的良好版本。
- 幾秒內復原,而非數小時。
- 不可變版本與穩定別名相輔相成。
切換期間要監控
- 錯誤與逾時。
- 執行時間與尾端延遲。
- 若有設上限,留意節流。
- 及時暫停或回復。
常見陷阱:把 $LATEST 當成正式版
- 依賴 $LATEST 會失去可預測性。
- 版本與別名讓執行情況一目了然。
- 回復更安全。
安全部署檢查清單
- 發佈一個版本。
- 用別名漸進地切換流量。
- 監控結果。
- 每一步都準備好回復。
重點整理
- 版本帶來可預測性。
- 別名帶來穩定性。
- 加權路由提升安全性。
- 回復=移動別名。
一起來練習吧!
使用 AWS Lambda 的無伺服器應用程式
Preparing Video For Download...