はじめに
ソリューションアーキテクトのための視点を整理してみました。
今回は、CloudFormationです。具体的には、「カタログ化する方法」「リソースを保持する方法」「S3バケットの削除が上手くいかない時の対応」「カスタム名を持つリソースがある場合」 を想定しました。実務でも試験でも、ご参考にして頂けましたら、幸いです。
目次
カタログ化する方法
要件
• AWS インフラストラクチャの起動時にユーザーに最小限の特権アクセスを提供し、ユーザーが未承認のサービスをプロビジョニングできないようにしたい。
• 中央アカウントを使用して、インフラストラクチャ サービスの作成を管理したい。
• AWS Organizations の複数のアカウントにインフラストラクチャ サービスを配布する機能を提供したい。
• ユーザーが開始するインフラストラクチャにタグを強制する機能を提供したい。
ソリューション
AWS CloudFormation テンプレートを使用してインフラストラクチャ サービスを開発します。各テンプレートを AWS Service Catalog 製品として、中央の AWS アカウントで作成されたポートフォリオにアップロードします。これらのポートフォリオを、会社用に作成されたOrganizationと共有します。
ユーザー IAM ロールに ServiceCatalogEndUserAccess 権限のみを許可します。自動化スクリプトを使用して、中央ポートフォリオをローカル AWS アカウントにインポートし、TagOption をコピーし、ユーザーにアクセス権を割り当て、起動制約を適用します。
AWS Service Catalog TagOption Library を使用して、会社が必要とするタグのリストを管理します。 TagOption を AWS Service Catalog 製品またはポートフォリオに適用します。
リソースを保持する方法
CloudFormation のスタックを削除する際に、リソースの保持が出来ずに困っています。どのようにすれば、リソースを保持する事が出来るでしょうか?
ソリューション
DeletionPolicy 属性をRetainにします。そうすることで、CloudFormation は、スタックを削除する際に、リソースやコンテンツを削除せず保持します。
S3バケットの削除が上手くいかない時の対応
古いバージョンの CloudFormation スタックを削除しようとしましたが、操作は失敗。CloudFormation が既存の S3 バケットの削除に失敗したことがわかりました。どのようにこの問題を解決しますか?
ソリューション
S3 バケットからすべてのファイルを削除する Lambda 関数を実装。この Lambda 関数をカスタム リソースとして CloudFormation スタックに統合。カスタム リソースに、S3 バケットのリソースを指す dependsOn 属性があることを確認する。
DependsOn 属性を使用すると、特定のリソースが他のリソースに続けて作成されるように指定できます。DependsOn 属性をリソースに追加した場合、そのリソースの作成は必ず、DependsOn 属性で指定したリソースの作成後に行われます。
カスタム名を持つリソースがある場合
CloudFormation スタック セットを使用してツールをデプロイします。スタック セットのテンプレートには、カスタム名を持つ IAM ロールが含まれています。スタック セットの作成時に、スタック インスタンスが正常に作成されません。インスタンスを正常に作成するために、どのような対応が必要ですか?
ソリューション
スタック セットの作成時に CAPABILITY_NAMED_IAM 機能を指定します。
カスタム名を持つ IAM リソースがある場合は、CAPABILITY_NAMED_IAM を指定する必要があります。このパラメータを指定しない場合、このアクションは InsufficientCapabilities エラーを返します。次のリソースでは、CAPABILITY_IAM または CAPABILITY_NAMED_IAM を指定する必要があります。