AWS認定資格 WEB問題集&徹底解説
デベロッパー–アソシエイト
問題文と選択肢
- AWS CDK はデプロイ時に AWS CloudFormation スタックを生成するため、CloudFormation の変更セット機能やスタックのロールバック機能を利用して以前の状態に戻すことができる。
- AWS CDK はシンセサイズ(cdk synth)フェーズのみで変更を管理するため、デプロイ後のロールバックは AWS CLI を使用して手動で行う必要がある。
- AWS CDK はデプロイ時に Amazon S3 にスナップショットを自動保存するため、S3 バケットから以前のバージョンを取得して復元できる。
- AWS CDK は AWS CodePipeline と統合されている場合のみロールバックが可能であり、単体では以前の状態への復元機能を持たない。
A. AWS CDK はデプロイ時に AWS CloudFormation スタックを生成するため、CloudFormation の変更セット機能やスタックのロールバック機能を利用して以前の状態に戻すことができる。
CDK は cdk synth でコードを CloudFormation テンプレートに合成し、cdk deploy でそのテンプレートを CloudFormation スタックとしてデプロイする。つまり実体は CloudFormation スタックであり、スタックの更新中にエラーが起きれば自動的に直前の状態へロールバックされる。
意図的に前の状態へ戻したい場合も、変更セット(Change Set)で差分を確認したうえで適用する/スタックのロールバック操作を行うといった CloudFormation の変更管理機能をそのまま利用できる。
CDK 固有の別の復元機構を覚える必要がない、という点が本問の要点。
B. AWS CDK はシンセサイズ(cdk synth)フェーズのみで変更を管理するため、デプロイ後のロールバックは AWS CLI を使用して手動で行う必要がある。
cdk synth はテンプレートを生成するだけのフェーズで、デプロイ後の状態管理とは無関係。
また、デプロイ後の復元を AWS CLI で手動実施する必要はない。CloudFormation がスタック更新の失敗時に自動ロールバックを行うため、「手動でやるしかない」という前提が誤り。
C. AWS CDK はデプロイ時に Amazon S3 にスナップショットを自動保存するため、S3 バケットから以前のバージョンを取得して復元できる。
CDK が Amazon S3 にスナップショットを自動保存して復元する仕組みは存在しない。
CDK は確かにデプロイ用のアセット(テンプレートや Lambda コード等)をブートストラップ時に作られる S3 バケットにアップロードするが、これはデプロイ用の資材置き場であって、状態を巻き戻すためのスナップショットではない。
変更管理はあくまで CloudFormation のスタック(およびその履歴)が担う。
D. AWS CDK は AWS CodePipeline と統合されている場合のみロールバックが可能であり、単体では以前の状態への復元機能を持たない。
ロールバックは CloudFormation スタックの機能であり、AWS CodePipeline との統合は前提条件ではない。
CDK 単体で cdk deploy しても、失敗時の自動ロールバックや変更セットによる復元は利用できる。
CodePipeline(CDK Pipelines)は CI/CD の自動化のための仕組みであって、ロールバック可否を左右するものではない。
構成図
CDK アプリ ──cdk synth──▶ CloudFormation テンプレート ──cdk deploy──▶ CloudFormation スタック
│ 更新失敗・問題発生
▼
自動ロールバック / 変更セットで前状態へ
CDK の下にいるのは CloudFormation。synth でテンプレート生成、deploy でスタック更新。ロールバックもスタックの機能。
正解への思考ルート
問題文から要件を抽出し、選択肢の適否を判断するのがポイントです。| 要件 | 判断ポイント |
|---|---|
| CDK でデプロイしたスタックを以前の状態に戻したい | CDK はデプロイ時に CloudFormation スタックを生成する。復元は CloudFormation の自動ロールバック/変更セットで行える →選択肢(A)が正解 |
| デプロイ後の状態管理は何が担うのか | cdk synth はテンプレート生成フェーズにすぎず、状態管理はしない。手動 CLI で戻す必要もない →選択肢(B)を消す |
| 変更履歴・スナップショットはどこにあるのか | CDK が S3 に置くのはデプロイ用アセットであって状態のスナップショットではない。履歴は CloudFormation スタックが持つ →選択肢(C)を消す |
| CI/CD パイプラインの有無に依存するか | ロールバックはCloudFormation の標準機能。CodePipeline との統合は必須条件ではない →選択肢(D)を消す |
ひっかけポイント
- 「CDK 固有のロールバック機能」を探させるのが本問の罠。CDK は CloudFormation の上位ラッパーであり、実行・状態管理・ロールバックはすべて CloudFormation 側の話になる
- 選択肢 C の S3 は紛らわしい。cdk bootstrap で作られる S3 バケットはアセット(テンプレート・Lambda の zip 等)の置き場であって、スタック状態のスナップショットではない
- 選択肢 B の「cdk synth」は正しい用語なので技術的に正しく見えるが、synth はテンプレートを出力するだけ。用語が本物かどうかではなく、役割が合っているかで判断する
- CloudFormation は更新失敗時にデフォルトで自動ロールバックする(ロールバックを無効化する設定もある)。「手動でしか戻せない」という記述を見たら疑う
出題バリエーション
同じ知識が本番では条件を変えて出題されます。| 問題文がこう変わったら | 正解はこう変わる |
|---|---|
| 「デプロイ前にどのリソースがどう変わるか確認したい」 | cdk diff(内部的には変更セット)で差分を確認するのが正解軸に。 |
| 「ロールバック中にさらに失敗してスタックが UPDATE_ROLLBACK_FAILED になった」 | ContinueUpdateRollback(必要ならリソースをスキップ)で復旧するのが正解に。 |
| 「CDK アプリを複数環境へ自動デプロイしたい」 | CDK Pipelines(CodePipeline)による自動化が正解軸に。 |
| 「スタック削除時もデータベースだけは残したい」 | RemovalPolicy.RETAIN(CloudFormation の DeletionPolicy Retain)の設定が問われる。 |
| 「デプロイ前に CDK が使うS3 バケットや IAM ロールが無いと言われた」 | cdk bootstrap の実行が正解になる。 |
- AWS CDK はデプロイ時に AWS CloudFormation スタックを生成するため、CloudFormation の変更セット機能やスタックのロールバック機能を利用して以前の状態に戻すことができる。
- AWS CDK はシンセサイズ(cdk synth)フェーズのみで変更を管理するため、デプロイ後のロールバックは AWS CLI を使用して手動で行う必要がある。
- AWS CDK はデプロイ時に Amazon S3 にスナップショットを自動保存するため、S3 バケットから以前のバージョンを取得して復元できる。
- AWS CDK は AWS CodePipeline と統合されている場合のみロールバックが可能であり、単体では以前の状態への復元機能を持たない。