CloudFormation で使用するサービスロールの作成方法を教えてください

2021.12.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

この記事はアノテーション株式会社 AWS Technical Support Advent Calendar 2021のカレンダー | Advent Calendar 2021 - Qiita 21日目の記事です。

困っていた内容

CloudFormation のスタック作成や更新時、稀にタイムアウトが発生します。

サービスロールを設定したいのですが、作成方法や設定方法を教えてください。

どう対応すればいいの?

CloudFormation では Stack 作成時に CloudFormation 用のサービスロールが作成されません。

そのため、先に CloudFormation 用のサービスロールを作成し、作成したサービスロールをスタック作成時に指定します。

サービスロールの作成

  1. IAMロール作成画面から、AWS サービスを選択し、ユースケースの選択にて CloudFormationを選択 → 次のステップ
  2. 適切なアクセス権限を付与 → 次のステップ
  3. 必要に応じてタグを付与 → 次のステップ
  4. 作成されるロールの内容を確認し、信頼されたエンティティに「cloudformation.amazonaws.com」が指定されていることを確認 → ロールの作成
  5. 作成された cloudformation-role にて、信頼されたエンティティに CloudFormation が表示されることを確認

CloudFormation スタック作成時に IAM ロールを指定する

  1. スタック作成画面のステップ3「スタックオプションの設定」にて、先ほど作成したIAMロールを指定する
  2. スタック作成後、スタックの情報タブのIAMロールを確認

サービスロールを使用することで改善される内容

例えば、AWS::RDS::DBInstance リソース等のスタックのオペレーションは、デフォルトのタイムアウト期間以上に時間が掛かる可能性があります。

スタックにサービスロールを指定しておくことで、タイムアウト期間を延長することが可能ですので、 テンプレートや手順等に問題がない場合、サービスロールを指定しておくことで改善される可能性があります。

スタックの作成、更新、または削除オペレーションの際、リソースが安定しない - AWS CloudFormation

操作が AWS CloudFormation タイムアウト期間を超えたか、AWS サービスが中断されたため、リソースが応答しませんでした。サービス中断の場合は、関連する AWS のサービスが実行中であることを確認し、次にスタックオペレーションを再試行します。

AWS サービスが正常に実行中であれば、スタックに以下のリソースの 1 つが含まれているかどうかを確認してください。

AWS::AutoScaling::AutoScalingGroup 作成、更新、削除オペレーション

AWS::CertificateManager::Certificate 作成オペレーション

AWS::CloudFormation::Stack 作成、更新、削除オペレーション

AWS::ElasticSearch::Domain 更新オペレーション

AWS::RDS::DBCluster 作成および更新オペレーション

AWS::RDS::DBInstance 作成、更新、削除オペレーション

AWS::Redshift::Cluster 更新オペレーション

これらのリソースのオペレーションは、デフォルトのタイムアウト期間以上の時間がかかる場合があります。タイムアウト期間は、リソースと使用する認証情報によって異なります。タイムアウト期間を延長するには、スタックオペレーションを実行する際にサービスロールを指定します。

参考資料

AWS CloudFormation サービスロール - AWS CloudFormation

AWS のサービスにアクセス許可を委任するロールの作成 - AWS Identity and Access Management

スタックの作成、更新、または削除オペレーションの際、リソースが安定しない - AWS CloudFormation