ある企業ではAmazon ECSサービスのデプロイにAWS CodeDeployのBlue/Greenデプロイメントを使用しています。Application Load Balancer(ALB)には本番リスナー(ポート443)とテストリスナー(ポート8080)の両方が設定されています。DevOpsエンジニアは、本番トラフィックを新しいタスクセット(Green環境)に切り替える前に、テストリスナーを経由して新バージョンに対する自動スモークテストをLambda関数で実行したいと考えています。AppSpecファイルのどのライフサイクルイベントフックにLambda関数を設定すべきですか?
ECS Blue/GreenデプロイのAppSpecライフサイクルイベントフックの実行順序はBeforeInstall → AfterInstall → AfterAllowTestTraffic → BeforeAllowTraffic → AfterAllowTrafficです。AfterAllowTestTrafficフックは、テストリスナー(ポート8080)経由のトラフィックがGreen環境(新タスクセット)に切り替わった後、かつ本番リスナー(ポート443)のトラフィックが切り替わる前に実行されます。このフックでLambda関数を呼び出してスモークテストを実行することで、本番トラフィック移行前に新バージョンの動作確認が可能です。 選択肢AのBeforeInstallは新タスクセット作成前に実行されるため、テストリスナーを使ったテストはできません。 選択肢BのAfterInstallはテストリスナーへのトラフィック切り替え前に実行されるため、Green環境への実際のテストが実現できません。 選択肢DのBeforeAllowTrafficはテストリスナー経由のテスト後ですが、本番リスナーへのトラフィック切り替え直前であり、ロールバック判断に使えますがAfterAllowTestTrafficが最適です。