AWS CloudFormationでインフラを構築するときに CAPABILITY_NAMED_IAM というエラーが出た

AWS CodePipeline + CloudFormation でインフラをソースコードで管理しようと思い、cfn-ci-cd-demo というRepositoryをベースにいろいろ試してみました。

github.com

IAM Role を作るときに、

Requires capabilities : [CAPABILITY_NAMED_IAM] 

というエラーが出ました。

エラーが出たときの手順

  1. src配下で、 IAM Role (RoleName指定有り)を作成するテンプレートを作成する
  2. git push してインフラ構築をする
  3. 1.で作成したテンプレートの構築時にエラーが出る

という流れで試していたので、1.の該当ファイルだけをCloudFormationのテンプレートに指定して動かしてみたところエラーも無く IAM Role の作成に成功しました。

cfn-ci-cd-demo では、

  1. ソースコード取得
  2. テスト
  3. ビルド
  4. 認証許可
  5. デプロイ

の手順で、デプロイ時に失敗するのでココに原因があるものだと思い、追加したファイルをいろいろ変更して試してみたのですがCodePipelineからのデプロイは成功しませんでした。

解決方法

ビルド時の Capabilities: CAPABILITY_IAM という設定が原因でした。

この部分です。

- Name: Build
  Actions:
    Configuration:
      Capabilities: CAPABILITY_IAM

IAM や IAM Role に名前を付けたい場合は CAPABILITY_NAMED_IAM にしないといけないようです。

公式のドキュメントにも書いてあることでした。

docs.aws.amazon.com