在現代化應用程式部署中,選擇正確的部署策略對於確保服務可用性和降低風險至關重要。本文將深入探討 AWS ECS(Elastic Container Service)中的兩種主要部署策略:滾動更新(Rolling Update)和藍綠部署(Blue-Green Deployment),並提供完整的實作指南。
1. 部署策略概述
滾動更新 (Rolling Update)
滾動更新是 ECS 的預設部署策略,它會逐步將舊版本的任務替換為新版本:
- 逐步啟動新任務並終止舊任務
- 過程中保持服務持續運行
- 適合對成本敏感且可接受短暫混合版本的場景
優點:
- 資源使用效率高
- 配置簡單
- 成本較低
缺點:
- 回滾時間較長
- 部署期間可能存在版本混合
- 較難進行完整的預部署測試
藍綠部署 (Blue-Green Deployment)
藍綠部署維護兩個完全獨立的環境(藍色和綠色),在任何時候只有一個環境處於活動狀態:
- 新版本部署到非活動環境
- 通過流量切換實現瞬間切換
- 適合對服務穩定性要求極高的場景
優點:
- 零停機時間
- 快速回滾
- 完整的預部署測試能力
缺點:
- 需要雙倍的運算資源
- 配置較為複雜
- 成本較高
2. 滾動更新設定
ECS Service 滾動更新配置
在 ECS 服務中配置滾動更新時,主要需要設定兩個參數:
| |
參數說明:
minimumHealthyPercent:部署期間必須保持運行的任務百分比maximumPercent:部署期間允許運行的最大任務百分比
AWS CLI 建立滾動更新服務
| |
更新服務觸發滾動部署
| |
監控滾動更新狀態
| |
3. 藍綠部署架構
架構組件
藍綠部署架構包含以下核心組件:
| |
ECS 藍綠部署類型
AWS ECS 支援以下藍綠部署類型:
- CODE_DEPLOY:使用 AWS CodeDeploy 管理藍綠部署
- EXTERNAL:使用外部部署控制器
設定藍綠部署的 ECS 服務
| |
4. CodeDeploy 整合
建立 CodeDeploy 應用程式
| |
AppSpec 檔案配置
建立 appspec.yaml 檔案:
| |
部署配置選項
CodeDeploy 提供多種內建部署配置:
| 配置名稱 | 說明 |
|---|---|
| CodeDeployDefault.ECSAllAtOnce | 一次性切換所有流量 |
| CodeDeployDefault.ECSLinear10PercentEvery1Minutes | 每分鐘切換 10% 流量 |
| CodeDeployDefault.ECSLinear10PercentEvery3Minutes | 每 3 分鐘切換 10% 流量 |
| CodeDeployDefault.ECSCanary10Percent5Minutes | 先切換 10%,5 分鐘後切換剩餘 |
| CodeDeployDefault.ECSCanary10Percent15Minutes | 先切換 10%,15 分鐘後切換剩餘 |
觸發部署
| |
5. 健康檢查與回滾
ALB 健康檢查配置
| |
ECS 任務定義中的健康檢查
| |
自動回滾配置
| |
手動回滾
| |
回滾監控 CloudWatch 告警
| |
6. ALB Target Group 切換
建立雙 Target Group
| |
配置 Listener 規則
| |
手動切換流量
| |
加權流量切換(金絲雀部署)
| |
7. Terraform 部署範例
完整的藍綠部署 Terraform 配置
| |
使用 Terraform 部署
| |
8. 最佳實務與故障排除
部署最佳實務
健康檢查配置
- 設定適當的 startPeriod:給予應用程式足夠的啟動時間
- 使用專用的健康檢查端點:避免使用首頁作為健康檢查
- 實作深度健康檢查:檢查資料庫連線、外部服務等依賴
| |
部署配置建議
| 場景 | minimumHealthyPercent | maximumPercent | 說明 |
|---|---|---|---|
| 高可用性 | 100 | 200 | 確保零停機 |
| 成本敏感 | 50 | 100 | 減少額外資源使用 |
| 快速部署 | 0 | 200 | 適合開發環境 |
| 平衡配置 | 50 | 150 | 一般生產環境 |
藍綠部署注意事項
- 資料庫相容性:確保新舊版本可以共用資料庫 schema
- Session 處理:使用外部 Session 儲存(如 Redis)
- 快取清理:部署後考慮清理 CDN 和應用程式快取
- 功能開關:使用 Feature Flag 控制新功能
常見問題排除
部署卡住或失敗
| |
健康檢查失敗
| |
CodeDeploy 部署問題
| |
回滾失敗處理
| |
監控與告警設置
| |
安全性考量
- 最小權限原則:僅授予必要的 IAM 權限
- 網路隔離:使用私有子網路部署 ECS 任務
- Secret 管理:使用 AWS Secrets Manager 或 Parameter Store
- 映像掃描:啟用 ECR 映像掃描
| |
總結
選擇適當的部署策略取決於您的應用程式需求、團隊能力和預算考量:
- 滾動更新:適合大多數情況,配置簡單,成本較低
- 藍綠部署:適合需要快速回滾和零停機時間的關鍵應用程式
無論選擇哪種策略,都應確保:
- 完善的健康檢查機制
- 適當的監控和告警
- 清晰的回滾流程
- 定期進行部署演練
透過本文的指南,您應該能夠在 AWS ECS 中成功實作滾動更新和藍綠部署策略,為您的應用程式提供可靠、安全的部署流程。