【要約】ECSネイティブBlue/Greenで「切替後に旧環境を残して、確認できたら落とす」をやる — PAUSEフックの置き場所について [Qiita_Trend] | Summary by TechDistill
> Source: Qiita_Trend
Execute Primary Source
// Problem
開発者がECSネイティブBlue/Greenデプロイへ移行する際、CodeDeployと同等の運用ができない問題に直面する。具体的には、以下の課題がある。
- ・切替後に旧環境を保持して様子を見る機能が見当たらない。
- ・bakeTimeInMinutesを途中で変更しても、進行中のデプロイには反映されない。
- ・StopServiceDeployment APIのABORT指定が未サポートである。
// Approach
筆者は、bake timeの制御ではなく、デプロイの停止という手法で解決を図った。具体的には、以下の手順を実施する。
- ・POST_PRODUCTION_TRAFFIC_SHIFTステージにPAUSEフックを配置する。
- ・本番切替後にデプロイを停止させ、旧環境をhealthyな状態で保持する。
- ・ContinueServiceDeploymentを用い、人の判断で完了か復帰を選択する。
// Result
検証の結果、CodeDeployなしで以下の要件をすべて満たせることを証明した。
- ・本番トラフィックの新環境への完全な切り替え。
- ・旧環境を起動したまま保持し、即時切り戻しが可能な状態の維持。
- ・承認によるデプロイの完了、または1分38秒での迅速なロールバック。
- ・CodeDeployより長い、最大14日間の環境保持が可能。
Senior Engineer Insight
> 本記事は、機能の有無ではなく「要件の分解」による解決策を提示している。これは複雑なシステム設計において極めて重要だ。CodeDeployからの移行は、IAM権限設計を簡素化し、運用コストを下げる。ただし、Terraform等のIaCが未対応である点は、現場での実装時に注意が必要だ。CLI併用などの回避策を前提とした設計が求められる。