📝

AWS CloudFormation StackSetsってなんだろ?

2021/04/24に公開

CloudFormationはよく使いますが、スタックセットは使ったことがないので調べてみました。

AWS CloudFormation StackSets の操作 - AWS CloudFormation

概要

  • 複数のアカウントおよびリージョンのスタックを 1 度のオペレーションで、作成、更新、削除できるようにすることで、スタックの機能を拡張
  • 管理者アカウントを使用して、AWS CloudFormation テンプレートを定義および管理
  • 指定のリージョンの選択されたターゲットアカウントにスタックをプロビジョニングする基盤としてテンプレートを使用
    image.png

スタックセットを使用することで、複数アカウントや複数リージョンにまたがってスタックの作成などができるようです。
作成条件は管理者アカウントであることみたいですね。

用語

  • 管理者アカウント
    • スタックセットを作成する AWS アカウント
  • ターゲットアカウント
    • スタックセットの 1 つ以上のスタックを作成、更新、削除するアカウント
    • スタックセット作成前に管理者アカウントとターゲットアカウント間で信頼関係の構築が必要
  • スタックセット
    • 1 つの AWS CloudFormation テンプレートを使用して、複数のリージョンの AWS アカウントにスタックを作成できる
    • 各スタックに含まれるリソースはすべて、スタックセットの AWS CloudFormation テンプレートで定義
    • スタックセットを定義したら、指定したターゲットアカウントやリージョンでスタックを作成、更新、削除できる
    • スタックセットはリージョンのリソース
    • 1 つのリージョンでスタックを作成した場合、他のリージョンでそのスタックを表示または変更することはできない
  • スタックセットのアクセス許可モデル
    • スタックセットは、セルフマネージド型のアクセス許可またサービスマネージド型のアクセス許可のいずれかを使用して作成
    • セルフマネージド型アクセス許可を使用する場合、アカウントとリージョン間でデプロイするために StackSets で必要な IAM ロールを作成
    • サービスマネージド型のアクセス許可を使用する場合、AWS Organizations が管理するアカウントにスタックインスタンスをデプロイ
    • サービスマネージド型の場合、ユーザーに代わって StackSets が IAM ロールを作成するため、IAM ロールの作成は不要
  • スタックインスタンス
    • リージョン内のターゲットアカウントのスタックへのリファレンス
    • スタックインスタンスは、スタックがなくても存在することができる
    • スタックインスタンスに関連付けられるスタックセットは、1 つのみ
      image.png

管理者アカウントはOrganizationsのマスターアカウントとは限らないようですね。
ある組織で複数のアカウントを管理するためのアカウントなので、必ずしもOrganizaionsを利用する必要はないようです。

スタックインスタンスは、でテンプレートであるスタックセットが実際に展開されたスタックのことを指しているんでしょうか?
リファレンス(参照)なので、そのスタックへのパスみたいな概念とも捉えられます。そうだとすれば、スタックがなくてもパスは存在するという説明も納得できます。

[新機能] CloudFormation StackSetsを試してみた | DevelopersIO

  • 1つのテンプレートから複数のAWSアカウント、リージョンに対しStackを作成することが可能
  • 複数のアカウントにまたがる共有の設定などを一括して実行することが可能
  • 管理者アカウントにはAWSCloudFormationStackSetAdministrationRoleという専用ロールを付与
  • ターゲットアカウントにはAWSCloudFormationStackSetExecutionRoleという専用ロールを付与
  • 同時実行アカウント数を指定できる
  • 新規アカウント作成時のCloudTrail有効化や、SecurityGroupやIAMで統制管理などに使えそう

【CloudFormation】StackSetsの仕組みについて - サーバーワークスエンジニアブログ

  • サービスマネージド型には、3つIAMロールが存在
    • AWSServiceRoleForCloudFormationStackSetsOrgAdmin
      • 管理アカウントに作成され、スタックセット実行時に利用される
    • AWSServiceRoleForCloudFormationStackSetsOrgMember
      • ターゲットアカウントに作成されるロール
    • stacksets-exec-xxxxxxxxxxxx
      • ターゲットアカウントに作成されるロールで、ターゲットアカウントにスタックを作成する際に利用する。管理アカウントのロールと信頼関
  • セルフマネージド型には、2つのIAMロール
    • その1のAWSCloudFormationStackSetAdministrationRoleAWSCloudFormationStackSetExecutionRole

やってみる

Organizationsを使うサービスマネージド型でやってるので、Organizationsの設定を確認してみます。
image.png

無効になっていたので有効化しました。
image.png

非推奨のようですが、お試しなので許可します。
image.png

CloudFormationコンソールに移動してきました。
まだスタックセットがないので作ってみます。
image.png

サンプルテンプレートがあったので、CloudTrailの有効化をやってみます。
image.png

詳細設定です。基本的にデフォルト設定のままです。
image.png
image.png
image.png
image.png
リージョンはせっかくなので先日正式リージョンになった大阪を選びました。
image.png
image.png
image.png
image.png

作成が始まりました。
image.png

成功したようです。
image.png

別アカウントを確認してみます。
CloudTrail用のバケットができていました。
image.png

ロールもできていました。
image.png

CloudTrailの履歴はデフォルトで有効になってるため、今回のスタックセットでの変更はありませんでした。
image.png

まとめ

今回はCloudFormationのスタックセットについて調べてみました。
以下がポイントでした。

  • 複数アカウントや複数リージョンにまたがってスタックの作成、更新、削除ができる
  • 管理者アカウントを使用して、AWS CloudFormation テンプレートを定義および管理
  • 管理者アカウントは文字通り複数アカウントを管理するアカウントだが、必ずしもOrganizationsを利用している必要はない
  • 管理者アカウントとターゲットアカウント間には信頼関係が必要
  • セルフマネージド型ではOrganizationsを使用せず、IAMロールを自作する
  • サービスマネージド型ではOrganizationsを使用し、スタックセットが自動でIAMロールを作成する

参考になれば幸いです。

Discussion