部署策略:版本、別名與流量切換

使用 AWS Lambda 的無伺服器應用程式

Claudio Canales

Senior DevOps Engineer

為什麼部署策略很重要

  • 快速發現錯誤。
  • 限縮影響範圍。
  • 迅速復原。

高風險部署 vs 安全部署

使用 AWS Lambda 的無伺服器應用程式

$LATEST 與已發佈版本

$LATEST

  • 每次更新程式碼都會移動。

Versions

  • 不可變的快照。
  • 易於釘選,用於回復與流量分流。

Latest 與 Versions

使用 AWS Lambda 的無伺服器應用程式

版本是不可變的快照

  • 把版本當成發行成品。
  • 每個版本都包含程式與設定。
  • 一旦發佈就不會改變。
  • 隨時可回到已知的良好狀態。

不可變版本快照

使用 AWS Lambda 的無伺服器應用程式

別名是穩定指標

  • 穩定的指標。
  • 呼叫別名而非直接呼叫版本。
  • 可更新指向目標而不影響呼叫端。

別名指向版本

使用 AWS Lambda 的無伺服器應用程式

Dev 與 Prod 別名

  • 很適合對應環境。
  • dev 可常態移動。
  • 將別名移到 prod 即可升級。

Dev 與 prod 別名對應

使用 AWS Lambda 的無伺服器應用程式

以加權別名進行流量切換

  • 在正式環境安全測試。
  • 大多數流量留在現行版本。
  • 少部分導向候選版本。

加權別名路由概念

使用 AWS Lambda 的無伺服器應用程式

金絲雀步驟 1:90/10

  • 90% 留在現行版本。
  • 10% 在真實負載下測候選。
  • 監看錯誤與延遲。

金絲雀 90/10 分流

使用 AWS Lambda 的無伺服器應用程式

金絲雀步驟 2:50/50

  • 若 10% 表現良好,提升權重。
  • 50% 現行、50% 候選。
  • 50/50 問題顯現快。
  • 監控很重要。

金絲雀 50/50 分流

使用 AWS Lambda 的無伺服器應用程式

金絲雀步驟 3:100% 新版

  • 導全部流量到新版本。
  • 舊版本仍保留。
  • 回復很簡單。

金絲雀 100% 新版

使用 AWS Lambda 的無伺服器應用程式

藍綠部署心智模型

  • 藍色=現行穩定版本。
  • 綠色=新候選版本。
  • 透過移動別名切換。
  • 加權路由讓切換漸進。

藍綠切換

使用 AWS Lambda 的無伺服器應用程式

回復=把別名移回去

  • 不需重新部署。
  • 將別名移回最後的良好版本。
  • 幾秒內復原,而非數小時。
  • 不可變版本與穩定別名相輔相成。

移動別名回復

使用 AWS Lambda 的無伺服器應用程式

切換期間要監控

  • 錯誤與逾時。
  • 執行時間與尾端延遲。
  • 若有設上限,留意節流。
  • 及時暫停或回復。

部署監控指標

使用 AWS Lambda 的無伺服器應用程式

常見陷阱:把 $LATEST 當成正式版

  • 依賴 $LATEST 會失去可預測性。
  • 版本與別名讓執行情況一目了然。
  • 回復更安全。

Latest 漂移警示

使用 AWS Lambda 的無伺服器應用程式

忽略

使用 AWS Lambda 的無伺服器應用程式

安全部署檢查清單

  • 發佈一個版本。
  • 用別名漸進地切換流量。
  • 監控結果。
  • 每一步都準備好回復。

安全部署檢查清單圖

使用 AWS Lambda 的無伺服器應用程式

重點整理

  • 版本帶來可預測性。
  • 別名帶來穩定性。
  • 加權路由提升安全性。
  • 回復=移動別名。

部署重點整理

使用 AWS Lambda 的無伺服器應用程式

一起來練習吧!

使用 AWS Lambda 的無伺服器應用程式

Preparing Video For Download...