7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【AWS CloudFormation】CAPABILITY_IAM と CAPABILITY_NAMED_IAM どう使い分けたら良いのか

Last updated at Posted at 2021-09-30

概要

AWS CLI を用いて、CloudFormation のスタックを作成する時に、
Capabilities を要求される場面があるかと思います。

その時に、CAPABILITY_IAMCAPABILITY_NAMED_IAM どっちでも通るけどどっち使えばいいんだ?ってなることがあったので、公式リファレンスの自分の理解をこの場にまとめます。

そもそもどういう場合にCapabilitiesが必要になるのか

作成する CloudFormation のスタックの中のリソースに IAM リソースがある場合です。

AWS CloudFormationがスタックを作成するために、スタックテンプレートに特定の機能が含まれていることを明示的に確認する必要があります。
参考: https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStack.html

AWS のドキュメントにもある通り、CloudFormation がスタックを作成するために、特定の機能が含まれていることを明示的に示す必要があるということです。

では、2つの違いは

それでは CAPABILITY_IAMCAPABILITY_NAMED_IAM は何が違うのでしょうか。
それはカスタム名の IAM リソースがある場合とそうでない場合です。
IAM リソース名は指定しない場合、<CloudFormationスタック名>-<CloudFormationリソース名>-<ランダム文字列>で作成されますが、これを任意の名称に指定することもできます。

名称を指定した(=カスタム名)IAM リソースがある場合は CAPABILITY_NAMED_IAM のみ。名称を指定しない場合は、どちらでも指定することが出来る様です。

まだ2つほどCapabilitiesはある

上で紹介した 2 つ以外にも、CAPABILITY_RESOURCE_POLICY および CAPABILITY_AUTO_EXPAND なるものが存在する様です。(参考: https://docs.aws.amazon.com/ja_jp/serverlessrepo/latest/devguide/acknowledging-application-capabilities.html

CAPABILITY_RESOURCE_POLICY に関しては以下のものがリソースとして存在する場合に必要な様です。

AWS::Lambda::LayerVersionPermission,AWS::Lambda::Permission,AWS::Events::EventBusPolicy,AWS። IAM: ポリシー,AWS::ApplicationAutoScaling::ScalingPolicy,AWS::S3::BucketPolicy,AWS::SQS::QueuePolicy, およびAWS::SNS::TopicPolicy。
参考: https://docs.aws.amazon.com/ja_jp/serverlessrepo/latest/devguide/acknowledging-application-capabilities.html

CAPABILITY_AUTO_EXPAND に関しては 1 つまたは複数のネストされたアプリケーションが含まれているアプリケーションで指定する必要がある。とあり、具体的にはこちらでサンプルとして用意されているものと同様のリソースが当てはまるようです。
タイトルとは少し逸れてしまうので、詳しくは公式ドキュメントを参考にしてみて下さい。

まとめ

CloudFormation で作成されるスタックのリソースの中にカスタム名の IAM リソースがあれば CAPABILITY_NAMED_IAM
IAM リソースの名称を指定していない場合は、CAPABILTY_IAM CAPABILITY_NAMED_IAM どちらも使える様です。(とはいえ、不必要に NAMED の方を使う理由も無さそうですが)

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?