DVAデプロイ
開発チームがAWS CodeDeployを使用してEC2インスタンスにJavaアプリケーションをデプロイしています。デプロイ完了後にアプリケーションが正常起動してHTTPエンドポイントが応答することを自動検証し、検証スクリプトが失敗した場合にはCodeDeployが自動的にロールバックを実行してほしいと考えています。AppSpecファイルのどのライフサイクルイベントフックを使用するのが最も適切ですか?
AAfterInstallフック:アプリケーションファイルのインストール直後に実行されるため、ヘルスチェックスクリプトを配置してサービスの応答を確認し、失敗時にデプロイをロールバックする
AfterInstallはアプリケーションファイルのインストール後・サービス起動前に実行されるフックであり、この時点ではHTTPエンドポイントがまだ動作していない。サービス応答の検証を行うには早すぎるフェーズ。
BApplicationStartフック:アプリケーション起動コマンドとヘルスチェックスクリプトを同一フックに記述し、起動と同時にHTTPエンドポイントの応答を確認してサービスの準備完了を検証する
ApplicationStartはサービスの起動スクリプトを実行するフックであり、起動処理を担うべきフェーズ。検証ロジックを混在させると起動とヘルスチェックの責務が混在し、失敗原因の特定が困難になる。
CValidateServiceフック:EC2デプロイライフサイクルの最終フックであり、スクリプトが0以外の終了コードを返した場合にCodeDeployがデプロイを失敗とマークして自動ロールバックをトリガーする
✓ 正解
ValidateServiceはEC2デプロイライフサイクルの最終フックで、アプリケーション起動後のサービス動作確認に設計されている。スクリプトの0以外の終了コードでデプロイを失敗とマークし、設定次第で自動ロールバックをトリガーできる。
DBeforeAllowTrafficフック:ロードバランサーへのトラフィック許可前に実行されるフックで、サービス準備完了の確認に使用しスクリプト失敗時にトラフィックの切り替えを中断できる
BeforeAllowTrafficはロードバランサー統合のIn-PlaceデプロイやECS/LambdaのBlue/Greenデプロイに存在するフックであり、EC2の標準デプロイライフサイクルにはデフォルトで含まれない。ロードバランサーなしのEC2デプロイでは利用できない。
解説
ValidateServiceはCodeDeployのEC2/オンプレミスデプロイにおけるライフサイクルの最終フックです。アプリケーションの起動後に実行されるため、HTTPリクエスト等でサービスが実際に応答するかを確認するのに最適です。スクリプトが0以外の終了コードを返した場合、CodeDeployはデプロイを失敗とマークし、「失敗時にロールバック」が有効な設定であれば以前のバージョンに自動ロールバックします。
EC2デプロイの標準ライフサイクル順序:
①ApplicationStop
②DownloadBundle
③BeforeInstall
④Install
⑤AfterInstall
⑥ApplicationStart
⑦ValidateService
選択肢AのAfterInstallフックはファイルインストール後・アプリケーション起動前に実行されるため、この時点ではHTTPエンドポイントがまだ応答しておらず、サービス検証には早すぎます。
選択肢BのApplicationStartフックはサービス起動スクリプトを担うフックであり、起動処理とヘルスチェックを同一フックに混在させると責務が不明確になります。
選択肢DのBeforeAllowTrafficフックは、ロードバランサーを使用したIn-PlaceデプロイやECS/LambdaのBlue/Greenデプロイに存在するフックであり、EC2の基本デプロイライフサイクルには標準含まれません。
ドメイン別正答率・予想スコアでリアルタイムに実力把握
無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。
無料で演習を始める →