Q22 — AWS DOP-C02 第3章
第 22/100 問 | ← 第3章
ある企業がAmazon S3バケット上で静的Webサイトを展開しています。このWebサイトは天文台のクラウドイメージを使用しています。CloudFormationテンプレートはS3バケットとカスタムリソースを定義しており、これらのリソースはコンテンツをバケットに複製するソース位置を指定しています。 同社はWebサイトを新しい場所に移動することを決定し、現在のCloudFormationスタックを削除して再作成することを検討しています。しかし、CloudFormationはスタックをクリーンに削除できないと報告しています。 最も可能性の高い原因は何ですか?また、この問題を今後のバージョンのWebサイトで回避するにはどうすればよいですか?
- A. 削除失敗の原因は、S3バケットにアクティブなウェブサイト構成があるためです。CloudFormationテンプレートを修正し、S3バケットリソースからWebsiteConfigurationプロパティを削除します。
- B. 削除失敗の原因は、S3バケットが空でないためです。カスタムリソースのAWS Lambda関数コードを修正し、Deleteリクエストタイプ時にバケットを再帰的に空にするようにします。 ✓
- C. 削除失敗の原因は、カスタムリソースに削除ポリシーが定義されていないためです。カスタムリソース定義にDeletionPolicy属性を追加し、値としてDeleteを指定します。
- D. 削除失敗の原因は、S3バケットが空でないためです。CloudFormationテンプレート内のS3バケットリソースに、空文字列を値とするDeletionPolicy属性を追加します。
正解: B. 削除失敗の原因は、S3バケットが空でないためです。カスタムリソースのAWS Lambda関数コードを修正し、Deleteリクエストタイプ時にバケットを再帰的に空にするようにします。
解説
AWS CloudFormationは、S3バケットにオブジェクトが存在する場合、デフォルトでそのバケットを削除できません。AWS公式ドキュメントによると、非空S3バケットを削除するには、明示的にその内容を空にする必要があります。選択肢Bは、AWS Lambdaカスタムリソースを用いて削除要求時にバケットを再帰的に空にするというベストプラクティスに合致します。他の選択肢では、非空バケットの問題を直接解決していません:選択肢Dで言及されるDeletionPolicy属性を空文字列に設定するのは無効であり、正しくはDeleteを指定してもバケットが空である必要があります;選択肢AおよびCは非空バケットの根本的な問題に対処していません。正解のBは、Lambdaコードを修正して削除前にバケットを空にすることで、AWS推奨の方法に従っています。