DVA-C02デプロイHARD単一選択

ある企業がAWS CodeDeployを使ってEC2フリート100台にアプリケーションをデプロイしている。デプロイ中にアプリケーションのメモリリークが発生し、時間が経つとインスタンスが不健全な状態になることがある。デプロイ設定として「CodeDeployDefault.HalfAtATime」を使っており、デプロイ後にALBのヘルスチェックを通じてインスタンスの健全性を確認している。新しいデプロイで50台目のデプロイが完了した直後、残り50台のデプロイ開始前に複数のインスタンスがALBのヘルスチェックで失敗した。CodeDeployはどのように振る舞うか。

  1. A. デプロイを停止(FAILED)としてマークするが、デプロイ済みの50台はそのまま新バージョンを維持する
  2. B. 残り50台のデプロイを続行し、100台すべてのデプロイ完了後に失敗としてマークする
  3. C. デプロイを即座に停止し、デプロイ済み50台を自動的にロールバックする
  4. D. デプロイグループの最小健全ホスト数の設定に基づいて続行するかどうかを決定する
解答と解説を見る

正解: A

CodeDeployはデプロイ中にヘルスチェック失敗を検知するとデプロイを停止しFAILEDとマークするが、すでにデプロイが完了したインスタンスを自動的にロールバックすることはしない(ロールバックは明示的に設定した場合のみ発生する)。デプロイグループの「Rollback on deployment failure」設定が有効になっている場合は自動ロールバックが行われるが、デフォルトは無効である。Bは誤りで、ヘルスチェック失敗でデプロイは停止される。Cは「Rollback on deployment failure」が有効な場合の動作であり、デフォルトではない。Dは最小健全ホスト数の設定に関係するが、デプロイ後のALBヘルスチェック失敗に対しては適用されず、デプロイのフェーズ中の成功/失敗判定に使われる。本番環境では必ず自動ロールバック設定を有効にし、かつappspec.ymlのValidateServiceフックでデプロイ直後の検証を実装することが推奨される。

▸ この試験を本気で演習する(全150問・無料)