StackSets の概念
StackSets を使用する場合は、スタックセット、スタックインスタンス、スタックを使用します。
トピック
管理者アカウントおよびターゲットアカウント
管理者アカウントは、スタックセットを作成する AWS アカウントです。サービスマネージド型のアクセス許可を持つスタックセットの場合、管理者アカウントは組織の management account または委任された管理者アカウントです。スタックセットを管理するには、スタックセットを作成した AWS 管理者アカウントにサインインします。ターゲットアカウントは、スタックセットの 1 つ以上のスタックを作成、更新、削除するアカウントです。スタックセットを使用してターゲットアカウントにスタックを作成する前に、管理者アカウントとターゲットアカウントの間に信頼関係をセットアップする必要があります。
スタックセット
スタックセットでは、1 つの CloudFormation テンプレートを使用して、複数のリージョンの AWS アカウントにスタックを作成できます。各スタックに含まれるリソースはすべて、スタックセットの CloudFormation テンプレートで定義されます。スタックセットを作成する際、使用するテンプレートに加え、そのテンプレートで必要なパラメータや機能を指定します。
スタックセットを定義したら、指定したターゲットアカウントやリージョンでスタックを作成、更新、削除できるようになります。スタックを作成、更新、削除する際、オペレーション設定 (オペレーションを実行するリージョンの順序、スタックオペレーションを停止する障害耐性、スタックでオペレーションを同時に実行するアカウント数など) を指定することもできます。
スタックセットはリージョンのリソースです。1 つのリージョンでスタックを作成した場合、他のリージョンでそのスタックを表示または変更することはできません。
スタックセットのアクセス許可モデル
スタックセットは、セルフマネージド型のアクセス許可またサービスマネージド型のアクセス許可のいずれかを使用して作成できます。
セルフマネージド型アクセス許可を使用する場合、アカウントとリージョン間でデプロイするために StackSets で必要な IAM ロールを作成します。これらのロールは、スタックセットを管理するアカウントとスタックインスタンスをデプロイするアカウントとの間に信頼できる関係を確立するために必要です。このアクセス許可モデルを使用すると、StackSets は、 IAM ロールを作成するアクセス許可を持つ任意の AWS アカウントにデプロイできます。
サービスマネージド型のアクセス許可を使用する場合、AWS Organizations が管理するアカウントにスタックインスタンスをデプロイできます。このアクセス許可モデルを使用すると、必要な IAM ロールを作成する必要はありません。ユーザーに代わって StackSets が IAM ロールを作成します。このモデルでは、将来組織に追加されるアカウントへの自動デプロイを有効にすることもできます。サービスマネージド型のアクセス許可を使用してスタックセットを作成および管理する方法の詳細については、次のトピックを参照してください。
スタックインスタンス
スタックインスタンスは、リージョン内のターゲットアカウントのスタックへのリファレンスです。スタックインスタンスは、スタックがなくても存在することができます。たとえば、何らかの理由によりスタックが作成されていない場合は、スタック作成の失敗理由がスタックインスタンスに表示されます。スタックインスタンスに関連付けられるスタックセットは、1 つのみです。
次の図は、スタックセット、スタックオペレーション、スタック間の論理関係を表しています。スタックセットを更新すると、関連付けられているスタックインスタンスはすべて、すべてのアカウントおよびリージョンで更新されます。

スタックセットオペレーション
スタックセットでは、以下の操作を実行できます。
- スタックセットの作成
-
新しいスタックセットを作成するには、スタックの作成に使用する CloudFormation テンプレートの指定、スタックを作成するターゲットアカウントの指定、ターゲットアカウントのスタックをデプロイする AWS リージョンの特定などを行います。スタックセットでは、選択したリージョン内の指定したすべてのターゲットアカウントに対して同一の設定を使用して、同一のスタックリソースを一貫してデプロイできます。
- スタックセットの更新
-
スタックセットを更新したら、スタックセットのスタックに変更内容をプッシュします。スタックセットは、以下のいずれかの方法で更新できます。テンプレートをアップデートすると必ずすべてのスタックに反映されます。スタックセットの一部スタックのテンプレートを選択してアップデートすることはできません。その他のスタックもアップデートされます。
-
テンプレートの既存の設定を変更するか (例: 特定のサービスのパラメータ設定の更新)、新しいリソースを追加します (例: 新しい Amazon EC2 インスタンスの追加)。
-
テンプレートを別のテンプレートに置き換えます。
-
既存のリージョンまたは追加リージョンの既存または追加のターゲットアカウントにスタックを追加します。
-
- スタックの削除
-
スタックを削除する場合は、指定したリージョン内の指定したターゲットアカウントから、スタックおよび関連付けられているリソースを削除します。スタックは次の方法で削除できます。
-
一部のターゲットアカウントからスタックを削除し、実行中の他のターゲットアカウントの他のスタックはそのままにしておきます。
-
一部のリージョンからスタックを削除し、実行中の他のリージョンのスタックはそのままにしておきます。
-
スタックセットからスタックを削除しても保存されるため、[Retain Stacks (スタックの保持)] オプションを選択して、引き続き、個別にスタックセットを実行できます。保持されているスタックは、スタックセット外の AWS CloudFormation で管理されています。
-
スタックセット全体を削除する準備段階として、スタックセット内のすべてのスタックを削除します。
-
- スタックセットの削除
-
スタックセットは、スタックセット内にスタックインスタンスが存在しない場合のみ、削除できます。
スタックセットオペレーションのオプション
このセクションで説明されているオプションを使用すると、スタックセットオペレーションを適切に実行する上で許容されている障害時間や障害数を制御しやすくなるだけでなく、スタックリソースの損失を抑えるのにも役立ちます。
- 同時アカウントの最大数
-
この設定は、ワークフローの作成、更新、削除に適用され、一度にオペレーションが実行されるターゲットアカウントの最大数または割合 (%) を指定することができます。数または割合 (%) が少ない場合は、オペレーションが、一度に少数のターゲットアカウントで実行されていることを表します。オペレーションは、一度に 1 つのリージョンで、[Deployment order (デプロイ順序)] ボックスで指定した順序で実行されます。たとえば、スタックを 2 つのリージョンの 10 のターゲットアカウントにデプロイした場合、[Maximum concurrent accounts (同時アカウントの最大数)] を [50] と [By percentage (割合)] に設定すると、スタックは最初のリージョンの 5 つのアカウント、次に最初のリージョンの次の 5 つのアカウントにデプロイされた後、次のリージョンに移動し、最初の 5 つのターゲットアカウントにデプロイされます。
[By percentage] (割合) を選択して、指定された割合 (%) が指定したアカウントの整数にならない場合は、CloudFormation によって丸められます。例えば、スタックを 10 のターゲットアカウントにデプロイし、[Maximum concurrent accounts] (同時アカウントの最大数) を [25] と [By percentage] (割合) に設定した場合は、同時にデプロイされるスタック数は、CloudFormation によって 2.5 (設定できません) から 2 に丸められます。
この設定では、オペレーションの最大値を指定できます。大規模なデプロイの場合、特定の状況下では、同時に処理される実際のアカウント数はサービスのスロットリングのために低くなる可能性があります。デプロイの最大速度は、スタックセットあたり 100 の同時スタックインスタンスです。
- 障害耐性
-
この設定は、ワークフローの作成、更新、削除で利用でき、各リージョンで発生する場合があるスタックオペレーションの失敗の最大数や割合を指定できます。この値を超えると、オペレーションは CloudFormation によって自動的に停止されます。数値または割合 (%) が少ない場合は、オペレーションで実行されているスタックが少数であることを意味しますが、失敗したオペレーションのトラブルシューティングをすばやく開始することができます。たとえば、10 のスタックを 3 つのリージョン内の 10 のターゲットアカウントにデプロイした場合、[Failure tolerance (障害耐性)] を [20] と [By percentage (割合)] に設定すると、オペレーションを続行するために、最大 2 つのスタックのアップデートがリージョン内で失敗することがあります。同リージョンの 3 番目のスタックで失敗した場合、CloudFormation はオペレーションを停止します。最初のリージョンでスタックを更新できなかった場合、更新オペレーションはそのリージョンで続行され、その後、次のリージョンに移行します。2 番目のスタックを 2 番目のリージョンで更新できない場合、障害耐性は 20% に達し、同リージョンの 3 番目のスタックが失敗した場合、CloudFormation は更新オペレーションを停止し、次のリージョンに移行することもありません。
[By percentage] (割合) を選択して、指定された割合 (%) が、各リージョン内のスタックの整数にならない場合、CloudFormation は切り捨てられます。例えば、スタックを 3 つのリージョンの 10 のターゲットアカウントにデプロイし、[Failure tolerance] (障害耐性) を [25] と [By percentage] (割合) に設定した場合、リージョンあたりの障害耐性 2.5 (設定できません) は、CloudFormation によって 2 に切り捨てられます。
- スタックの保持
-
この設定は、スタックワークフローの削除に利用することができるだけでなく、スタックセットから削除されても、スタックやリソースを引き続き実行することができます。スタックを保持すると、AWS CloudFormation は、個別のアカウントとリージョンインタクトにスタックを残します。スタックはスタックセットから関連付けが解除されますが、スタックとそのリソースは保存されます。スタックの削除オペレーションが完了したら、作成されたターゲットアカウント (管理者アカウントではありません) を使用して、CloudFormation で保持されているスタックを管理します。[Retaining stacks (スタックの保持)] はスタックをスタックセットから恒久的に切り離します。スタックを元のスタックセットに戻すことはできません。スタックを別のスタックセットに追加することもできません。
- リージョンの同時実行
-
この設定は、作成、更新、および削除のワークフローで利用可能であり、StackSets をリージョンにデプロイする方法を選択できます。
[Sequential (順次)] – リージョンのデプロイ失敗が指定された耐障害性を超えない限り、[Region Deployment (リージョンのデプロイ)] オーダーボックスで指定されているように、一度に 1 つのリージョンに StackSets 操作をデプロイします。デフォルトでは、順次デプロイが選択されています。
[Parallel (並列)] – リージョンのデプロイ失敗が指定された耐障害性を超えない限り、指定されたすべてのリージョンに StackSets 操作を並行してデプロイします。
タグ
スタックセットの作成オペレーションおよび更新オペレーション時にタグを追加するには、キーと値のペアを指定します。請求額とコストの配分を行うためにスタックセットリソースのソートおよびフィルタリングを行う場合は、タグが便利です。AWS でのタグの使用方法に関する詳細については、『AWS Billing and Cost Management ユーザーガイド』の「コスト配分タグの使用」を参照してください。キーと値のペアを指定したあと、[+] を選択してタグを保存します。タグの右側にある赤い X を選択すると、使用しなくなったタグを削除できます。
スタックセットに適用するタグは、すべてのスタック、およびスタックで作成されるリソースに適用されます。タグは、スタック専用レベルで CloudFormation に追加できますが、このようなタグは、StackSets で表示されない場合があります。
StackSets でシステム定義のタグが追加されることはありませんが、文字列 aws:
を含むタグのキー名から開始しないようにしてください。
スタックセットおよびスタックインスタンスのステータスコード
AWS CloudFormation StackSets は、スタックセットオペレーションおよびスタックインスタンスのステータスコードを生成します。
スタックセットオペレーションのステータスコードを以下のテーブルに示します。
スタックセットオペレーションのステータス | 説明 |
---|---|
|
オペレーションは現在進行中です。 |
|
オペレーションは、オペレーションの障害耐性を超えることなく終了しました。 |
|
オペレーションを完了できなかったスタックの数は、ユーザー定義の障害耐性を超えました。オペレーション向けに設定した障害耐性の値は、スタック作成およびスタック更新のオペレーション時に各リージョンに適用されます。リージョン内で失敗したスタックの数が障害耐性を超えた場合、リージョン内のオペレーションのステータスは、 |
|
[
|
|
ユーザーのリクエストにより、オペレーションは停止中です。 |
|
ユーザーのリクエストにより、オペレーションは停止しました。 |
スタックセット内のスタックインスタンスのステータスコードを次のテーブルに示します。
スタックインスタンスの状態 | 説明 |
---|---|
|
スタックは、スタックセットと同様、最新の状態です。 |
|
スタックは、以下のいずれかの理由により、スタックセットと同じ最新状態になっていません。
|
|
|
|
指定されたアカウントとリージョンでのオペレーションがキャンセルされました。これは、ユーザーがスタックセットオペレーションを停止したか、スタックセットオペレーションの障害耐性を超えたためです。 |
|
指定されたアカウントとリージョンでのオペレーションに失敗しました。リージョン内の十分なアカウントでスタックセットオペレーションが失敗した場合、スタックセットオペレーション全体の障害耐性を超える可能性があります。 |
|
指定されたアカウントとリージョンでのオペレーションはまだ開始されていません。 |
|
指定されたアカウントとリージョンでのオペレーションは現在進行中です。 |
|
指定されたアカウントとリージョンでのオペレーションが正常に完了しました。 |