498-AWS SAP AWS 「理論・実践・一問道場」カスタムリソース

 

理論

AWS CloudFormationとリソース削除

AWS CloudFormationは、インフラストラクチャをコードとして管理できるサービスで、リソースの作成、更新、削除を自動化します。CloudFormationスタックは、関連するAWSリソースを一度に管理するためのテンプレートに基づいています。

CloudFormationのリソース削除

CloudFormationスタックを削除すると、デフォルトで作成されたリソースも削除されます。ただし、削除の挙動はリソースによって異なり、いくつかのリソースは手動で削除する必要がある場合もあります。
  • DeletionPolicy属性: CloudFormationでは、DeletionPolicy属性を設定することで、リソース削除時の挙動を指定できます。
    • Delete: リソースが削除される。
    • Retain: リソースが削除されない。
    • Snapshot: リソースのスナップショットを作成し、その後削除する。

S3バケットの削除問題

S3バケットをCloudFormationで管理する際、バケット内にオブジェクトが残っていると、バケット削除に失敗することがあります。これを回避するためには、オブジェクトを削除する方法を事前に設定しておく必要があります。

解決方法

  • Lambda関数によるオブジェクト削除: S3バケット内のオブジェクトを削除するために、CloudFormationのカスタムリソースとしてLambda関数を使用することが有効です。Lambda関数を使うことで、オブジェクトの削除を自動化し、スタック削除時にオブジェクトが削除されるようにします。
  • DependsOn属性: CloudFormationのDependsOn属性を使用して、特定のリソースが削除される前にLambda関数を実行するように順序を指定できます。これにより、S3バケット内のオブジェクトが確実に削除されてからバケット自体が削除されます。

まとめ

CloudFormationを使用する場合、リソースの削除順序や削除方法を適切に管理することが重要です。Lambda関数やDependsOn属性を活用することで、スタック削除時の問題を防ぐことができます。

実践

一問道場

質問 #498
企業は、Amazon EC2およびAWS Lambda上でアプリケーションを実行しています。このアプリケーションは、Amazon S3に一時的なデータを保存します。S3のオブジェクトは24時間後に削除されます。
会社はAWS CloudFormationスタックを使って新しいバージョンのアプリケーションをデプロイします。スタックは必要なリソースを作成します。新しいバージョンの検証が完了すると、古いスタックを削除しますが、最近、古い開発スタックの削除に失敗しました。
ソリューションアーキテクトは、大きなアーキテクチャの変更なしでこの問題を解決する必要があります。
どのソリューションがこの要件を満たすでしょうか?
A. S3バケットからオブジェクトを削除するLambda関数を作成し、このLambda関数をCloudFormationスタックのカスタムリソースとして追加します。そして、DependsOn属性でS3バケットリソースを指定します。
B. CloudFormationスタックを変更して、S3バケットにDeletationPolicy属性を追加し、その値をDeleteに設定します。
C. CloudFormationスタックを更新して、S3バケットリソースにDeletionPolicy属性を追加し、その値をSnapshotに設定します。
D. CloudFormationテンプレートを更新して、一時ファイルを格納するためにAmazon Elastic File System(Amazon EFS)を作成し、Lambda関数をEFSファイルシステムと同じVPC内で実行するように設定します。

解説

この問題は、AWS CloudFormationスタックの削除に関する問題です。具体的には、CloudFormationスタックを削除しようとしたときに、S3バケットのオブジェクトが削除されなかったため、スタック削除が失敗しました。この問題を解決する方法を求めています。以下は、各選択肢に関する解説です。

選択肢 A: Lambda関数を使ったカスタムリソースの追加

  • 概要: S3バケットからオブジェクトを削除するためにLambda関数を作成し、このLambda関数をCloudFormationスタックのカスタムリソースとして追加します。DependsOn 属性を使って、Lambda関数の実行をS3バケットリソースの削除に依存させます。
  • 解説: この方法では、CloudFormationのカスタムリソースとしてLambda関数を使い、S3バケット内のオブジェクト削除を自動化できます。DependsOn 属性を使って、リソース削除の順序を制御することができます。この方法は、スタック削除時にオブジェクト削除を確実に実行するための良いアプローチです。

選択肢 B: DeletionPolicy属性をDeleteに設定

  • 概要: CloudFormationスタックで、S3バケットに対して DeletionPolicy 属性を設定し、その値を Delete に設定します。
  • 解説: DeletionPolicy 属性は、CloudFormationスタック削除時にリソースの削除方法を制御するためのものです。Delete を設定すると、CloudFormationはリソースを削除しますが、S3バケット内のオブジェクトは削除されません。この方法ではオブジェクト削除が行われないため、問題解決には不適切です。

選択肢 C: DeletionPolicy属性をSnapshotに設定

  • 概要: CloudFormationスタックで、S3バケットに対して DeletionPolicy 属性を設定し、その値を Snapshot に設定します。
  • 解説: Snapshot 設定は、リソースの削除前にスナップショットを作成する設定ですが、S3バケットに対しては意味を持ちません。スナップショットが取られるのは、主にEBSボリュームやRDSインスタンスなどです。このため、S3バケットに対して Snapshot を設定してもオブジェクト削除には影響を与えないため、問題解決には不適切です。

選択肢 D: Amazon EFSを使用する

  • 概要: 一時ファイルを格納するためにAmazon EFS(Elastic File System)を使用し、Lambda関数がEFSと同じVPC内で実行されるように設定します。
  • 解説: EFSは分散型のファイルストレージで、EC2インスタンスやLambda関数がアクセスできます。しかし、S3バケットのオブジェクト削除問題とは直接的な関係はなく、この方法では根本的な問題は解決できません。AWS LambdaをEFS内で実行しても、S3のオブジェクト削除問題を解決することにはなりません。

最適解: 選択肢 A

  • Lambda関数を使ってS3バケットのオブジェクト削除を行う方法が、CloudFormationのスタック削除時にオブジェクト削除を確実に行うための最適な方法です。カスタムリソースとしてLambda関数を設定し、DependsOn 属性で順序を制御することで、S3オブジェクト削除を適切に実行できます。

結論

選択肢 A がこの要件を最も適切に解決する方法です。
499-AWS SAP AWS 「理論・実践・一問道場」Amazon S3497-AWS SAP AWS 「理論・実践・一問道場」空間データ
Loading...
minami
minami
みなみの成長 🐝
Announcement

🎉 ブログへようこそ 🎉

名前: みなみ一人会社
性別:
国籍: China 🇨🇳
政治スタンス: 民主主義支持者
完全独学で基本情報技術者をはじめ、32個の資格を仕事をしながら取得。
現在はIT会社で技術担当として働きながら、ブログ執筆や学習支援にも取り組んでいます。
独学で合格できる学習法や勉強法、試験対策を発信中!

📚 発信内容

  • 💻 IT・システム開発
  • 🏠 不動産 × 宅建士
  • 🎓 MBA 学習記録