ある企業がAWS CodeDeployを使ってLambda関数のカナリアデプロイを実装している。デプロイ中にPreTrafficHookとPostTrafficHookの両方を設定している。デプロイ後の本番トラフィック切り替え中に、PostTrafficHook用Lambda関数がデータ整合性チェックに失敗して非ゼロの終了コードを返した。このときCodeDeployの動作として正しいものはどれか。
- A. PostTrafficHookの失敗は警告扱いとなり、デプロイ自体は成功したとみなされる
- B. デプロイはFAILEDとなり、トラフィックは新バージョンから旧バージョンへ自動的にロールバックされる
- C. PostTrafficHookはSNSで通知のみを行い、デプロイの成否に影響しない
- D. デプロイはFAILEDとなるが、すでに本番トラフィックの切り替えが完了しているため自動ロールバックは発生しない
解答と解説を見る
正解: B
CodeDeployのLambdaデプロイにおいて、PostTrafficHookで呼び出されるLambda関数が失敗(putLifecycleEventHookExecutionStatus APIでFailed、またはタイムアウト)した場合、CodeDeployはデプロイをFAILEDとしてマークし、Lambda関数のエイリアスが指すバージョンを旧バージョンに戻す(ロールバック)。これはPostTrafficHookがトラフィック切り替え後でも整合性を保証するためのフックであるためである。Aの警告扱いは誤りで、PostTrafficHookの失敗はデプロイ失敗として扱われる。Dはトラフィック切り替え後でも自動ロールバックが発生するため誤りである。CのSNS通知のみという動作は存在せず、フックの失敗はデプロイの成否に直接影響する。PreTrafficHookはトラフィック切り替え前に実行され、PostTrafficHookはトラフィック切り替え後に実行される。両方ともフックが失敗するとロールバックが発動する。