

# StackSets の概念
<a name="stacksets-concepts"></a>

StackSets を理解して使用するために重要な用語と概念を以下に示します。

**Topics**
+ [管理者アカウントおよびターゲットアカウント](#stacksets-concepts-accts)
+ [CloudFormation StackSets](#stacksets-concepts-stackset)
+ [StackSets のアクセス許可モデル](#stacksets-concepts-stackset-permission-models)
+ [スタックインスタンス](#stacksets-concepts-stackinstances)
+ [StackSet オペレーション](#stacksets-concepts-ops)
+ [StackSet オペレーションのオプション](#stackset-ops-options)
+ [タグ](#stackset-concepts-tags)
+ [StackSets ステータスコード](#stackset-status-codes)
+ [スタックインスタンスのステータスコード](#stack-instance-status-codes)

## 管理者アカウントおよびターゲットアカウント
<a name="stacksets-concepts-accts"></a>

*管理者アカウント*は、StackSets を作成する AWS アカウント です。サービスマネージド型のアクセス許可を持つ StackSets の場合、管理者アカウントは組織の管理アカウントまたは委任管理者アカウントです。StackSet を作成した AWS 管理者アカウントにサインインすることで、StackSet を管理できます。

*ターゲットアカウント*は、StackSet の 1 つ以上のスタックを作成、更新、削除するアカウントです。StackSet を使用してターゲットアカウントにスタックを作成する前に、管理者アカウントとターゲットアカウントの間に信頼関係をセットアップします。

## CloudFormation StackSets
<a name="stacksets-concepts-stackset"></a>

*StackSet* は、指定された AWS アカウント およびリージョンにデプロイされる複数のスタックのコンテナとして機能します。各スタックは同じ CloudFormation テンプレートに基づいていますが、パラメータを使用して個々のスタックをカスタマイズすることができます。

StackSet を定義したら、指定したターゲットアカウントや AWS リージョン でスタックを作成、更新、削除できるようになります。スタックを作成、更新、または削除する際には、オペレーションの環境設定も指定できます。例えば、オペレーションを実行するリージョンの順序、スタックオペレーションが停止する前の耐障害性のしきい値、およびスタックオペレーションを同時に実行するアカウントの数を含めます。

StackSet はリージョンのリソースです。StackSet を 1 つの AWS リージョン で作成する場合は、そのリージョンを表示しているときにのみ表示または変更できます。

## StackSets のアクセス許可モデル
<a name="stacksets-concepts-stackset-permission-models"></a>

StackSets は、*セルフマネージド型*のアクセス許可、または*サービスマネージド型*のアクセス許可のいずれかを使用して作成できます。

*セルフマネージド型*アクセス許可を使用する場合、アカウントとリージョン間でデプロイするために StackSets で必要な IAM ロールを作成します。これらのロールは、StackSet を管理するアカウントとスタックインスタンスをデプロイするアカウントとの間に信頼できる関係を確立するために必要です。このアクセス許可モデルを使用すると、StackSets は、 IAM ロールを作成するアクセス許可を持つ任意の AWS アカウント にデプロイできます。

*サービスマネージド型*のアクセス許可を使用する場合、AWS Organizations が管理するアカウントにスタックインスタンスをデプロイできます。このアクセス許可モデルを使用すると、必要な IAM ロールを作成する必要はありません。ユーザーに代わって StackSets が IAM ロールを作成します。このモデルでは、将来組織に追加するアカウントへの自動デプロイをオンにすることもできます。

AWS Organizations は、CloudFormation と統合され、AWS リソースの拡張や成長に伴い、環境の一元管理およびガバナンスを支援します。
+ 管理アカウント - 組織を作成するために使用するアカウント。詳細については、「[AWS Organizations の用語と概念](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html)」を参照してください。
+ 委任管理者 - 互換性のある AWS サービスでは、組織内の AWS メンバーアカウントをそのサービスにおける組織のアカウントの管理者として登録できます。詳細については、「[AWS Organizations で使用できる AWS のサービス](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services_list.html)」を参照してください。

サービスマネージド型のアクセス許可を使用して StackSets を作成および管理する方法の詳細については、次のトピックを参照してください。
+ [AWS Organizations を使用して StackSets のための信頼されたアクセスをアクティブ化する](stacksets-orgs-activate-trusted-access.md)
+ [委任された管理者メンバーアカウントを登録する](stacksets-orgs-delegated-admin.md)
+ [サービスマネージド型のアクセス許可を持つ CloudFormation StackSets の作成](stacksets-orgs-associate-stackset-with-org.md)

## スタックインスタンス
<a name="stacksets-concepts-stackinstances"></a>

*スタックインスタンス*は、リージョン内のターゲットアカウントのスタックへのリファレンスです。スタックインスタンスはスタックなしで存在できます。例えば、何らかの理由によりスタックが作成されていない場合は、スタック作成の失敗理由がスタックインスタンスに表示されます。スタックインスタンスは、1 つの StackSet にのみ関連付けられます。

次の図は、StackSets、スタックオペレーション、スタック間の論理関係を表しています。StackSet を更新すると、関連付けられている*すべて*のスタックインスタンスは、すべてのアカウントおよびリージョンで更新されます。

![\[StackSet は、複数のアカウントおよびリージョン全体でスタックインスタンスとスタックを作成、更新、または削除できます。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/stack_sets_operations_stacks_sv.png)


## StackSet オペレーション
<a name="stacksets-concepts-ops"></a>

StackSets では、以下のオペレーションを実行できます。

StackSet の作成  
新しい StackSet を作成するには、スタックの作成に使用する CloudFormation テンプレートの指定、スタックを作成するターゲットアカウントの指定、ターゲットアカウントのスタックをデプロイする AWS リージョン の特定などを行います。StackSet では、選択したリージョン内の指定したすべてのターゲットアカウントに対して同一の設定を使用して、同一のスタックリソースを一貫してデプロイできます。

StackSet を更新する  
StackSet を更新したら、StackSet のスタックに変更内容をプッシュします。StackSet は、以下のいずれかの方法で更新できます。テンプレートをアップデートすると必ずすべてのスタックに反映されます。StackSet の一部スタックのテンプレートを選択してアップデートすることはできません。その他のスタックもアップデートされます。  
+ テンプレートの既存の設定を変更するか (例: 特定のサービスのパラメータ設定の更新)、新しいリソースを追加します (例: 新しい Amazon EC2 インスタンスの追加)。
+ テンプレートを別のテンプレートに置き換えます。
+ 既存のリージョンまたは追加リージョンの既存または追加のターゲットアカウントにスタックを追加します。

 スタックの削除  
スタックを削除する場合は、指定したリージョン内の指定したターゲットアカウントから、スタックおよび関連付けられているリソースを削除します。スタックは次の方法で削除できます。  
+ 一部のターゲットアカウントからスタックを削除し、実行中の他のターゲットアカウントの他のスタックはそのままにしておきます。
+ 一部のリージョンからスタックを削除し、実行中の他のリージョンのスタックはそのままにしておきます。
+ StackSet からスタックを削除しても保存されるため、**[スタックを保持]** オプションを選択して、引き続き、個別にスタックを実行できます。その後、CloudFormation で設定された StackSet の外部で保持されたスタックを管理できます。
+ StackSet 全体を削除する準備段階として、StackSet 内のすべてのスタックを削除します。

StackSet を削除する  
StackSet は、StackSet 内にスタックインスタンスが存在しない場合のみ、削除できます。

## StackSet オペレーションのオプション
<a name="stackset-ops-options"></a>

このセクションで説明されているオプションを使用すると、StackSet オペレーションを成功させるために許容されている障害時間や障害数を制御しやすくなるだけでなく、スタックリソースの損失を抑えるのにも役立ちます。

同時アカウントの最大数  
この設定は、ワークフローの作成、更新、削除に適用され、一度にオペレーションを実行するターゲットアカウントの最大数または割合 (%) を指定することができます。数または割合 (%) が少ない場合は、オペレーションが、一度に少数のターゲットアカウントで実行していることを表します。オペレーションは、一度に 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 に丸められます。  
この設定では、オペレーションの*最大値*を指定できます。大規模なデプロイの場合、特定の状況下では、同時に処理される実際のアカウント数はサービスのスロットリングのために低くなる可能性があります。  
**同時アカウントの最大数**は、**耐障害性**の値によって異なることがあります (耐障害性の値は、ご使用の**同時実行モード**に応じて異なります)。**同時実行モード**が**厳格な耐障害性**に設定されている場合、**同時アカウントの最大数**を**耐障害性**設定よりも 1 つだけ多くすることができます。

同時実行モード  
この設定は、作成、更新、および削除のワークフローで利用可能であり、StackSet オペレーション時の同時実行レベルの動作を選択できます。詳細については、「[CloudFormation StackSets の同時実行モードの選択](concurrency-mode.md)」を参照してください。

耐障害性  
この設定は、ワークフローの作成、更新、削除で利用でき、各リージョンで発生する場合があるスタックオペレーションの失敗の最大数や割合を指定できます。この値を超えると、オペレーションは 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 に切り捨てられます。

スタックの保持  
スタック削除ワークフローで利用できるこの設定により、StackSet からスタックを削除した後でも、スタックとそのリソースを実行し続けることができます。スタックを保持すると、CloudFormation は、個別のアカウントとリージョンインタクトにスタックを残します。スタックは StackSet から関連付けを解除しますが、スタックとそのリソースを保存します。スタックの削除オペレーションが完了したら、スタックを作成したターゲットアカウント (管理者アカウントではありません) を使用して、CloudFormation で保持されているスタックを管理します。

リージョンの同時実行  
この設定は、作成、更新、および削除のワークフローで利用可能であり、StackSets をリージョンにデプロイする方法を選択できます。  
*順次* - リージョンのデプロイ失敗が指定された耐障害性を超えない限り、リージョンの **[デプロイ順序]** ボックスで指定されているように、一度に 1 つのリージョンに StackSets オペレーションをデプロイします。デフォルトでは、順次デプロイが選択されています。  
*並列* - リージョンのデプロイ失敗が指定された耐障害性を超えない限り、指定されたすべてのリージョンに StackSets オペレーションを同時にデプロイします。

## タグ
<a name="stackset-concepts-tags"></a>

StackSet の作成オペレーションおよび更新オペレーション時にタグを追加するには、キーと値のペアを指定します。請求額とコストの配分を行うために StackSet リソースのソートおよびフィルタリングを行う場合は、タグが便利です。AWS でのタグの使用方法に関する詳細については、「*AWS Billing and Cost Management ユーザーガイド*」の「[Organizing and tracking costs using AWS cost allocation tags](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)」を参照してください。キーと値のペアを指定したあと、[**\$1**] を選択してタグを保存します。タグの右側にある赤い **X** を選択すると、使用しなくなったタグを削除できます。

StackSets に適用するタグは、すべてのスタックと、スタックにより作成されるリソースに適用されます。CloudFormation のスタックのみのレベルでタグを追加することもできますが、そのタグは StackSets には表示されない場合があります。

StackSets でシステム定義のタグが追加されることはありませんが、文字列 `aws:` を含むタグのキー名から開始しないようにしてください。

## StackSets ステータスコード
<a name="stackset-status-codes"></a>

CloudFormation StackSets は、StackSet オペレーションのステータスコードを生成します。

StackSet オペレーションのステータスコードを以下のテーブルに示します。

`RUNNING`  
オペレーションは現在進行中です。

`SUCCEEDED`  
オペレーションは、オペレーションの耐障害性を超えることなく終了しました。

`FAILED`  
オペレーションが完了できなかったスタックの数は、ユーザー定義の耐障害性を超えました。オペレーション向けに設定した耐障害性の値は、スタック作成およびスタック更新のオペレーション時に各リージョンに適用されます。リージョン内で失敗したスタックの数が耐障害性を超えた場合、リージョン内のオペレーションのステータスは、`FAILED` に変更されます。オペレーション全体のステータスも `FAILED` に設定され、その他のリージョンのオペレーションは CloudFormation によってキャンセルされます。

`QUEUED`  
`Service-managed permissions` 一連のオペレーションを必要とする自動デプロイの場合、オペレーションはキューに入り、実行されます。例:  
+ アカウントをある組織単位 (OU) `OU1` から別の組織単位 `OU2` に移動すると、自動デプロイがトリガーされます。StackSets は、削除オペレーションを実行してターゲットリージョンのターゲット `OU1` アカウントからスタックインスタンスを削除し、ターゲットリージョンのターゲット `OU2` アカウントにスタックインスタンスを追加するための作成オペレーションをキューに入れます。
+ OU にアカウント `AccountA` を追加すると、自動デプロイがトリガーされます。StackSets は、ターゲットリージョンの `AccountA` にスタックインスタンスを追加するための作成オペレーションを実行します。この作成オペレーションの実行中に別のアカウント `AccountB` を OU に追加すると、StackSets は 2 番目の作成オペレーションをキューに入れます。最初の作成オペレーションが完了すると、StackSets は 2 番目の作成オペレーションを実行して、ターゲットリージョンの `AccountB` にスタックインスタンスを追加します。

`STOPPING`  
ユーザーのリクエストにより、オペレーションは停止中です。

`STOPPED`  
ユーザーのリクエストにより、オペレーションは停止しました。

## スタックインスタンスのステータスコード
<a name="stack-instance-status-codes"></a>

CloudFormation StackSets は、スタックインスタンスのステータスコードを生成します。

次の表は、StackSets 内のスタックインスタンスのステータスコードについて説明したものです。

`CURRENT`  
スタックは、StackSet と同様、最新の状態です。

`OUTDATED`  
スタックは、以下のいずれかの理由により、StackSet で最新状態ではありません。  
+ 関連付けられたスタックの [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStackSet.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStackSet.html) オペレーションまたは [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html) オペレーションが失敗しました。
+ スタックは作成または更新される前に、失敗または停止した [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStackSet.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStackSet.html) オペレーションまたは [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html) オペレーションの一部でした。

`INOPERABLE`  
[https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeleteStackInstances.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeleteStackInstances.html) オペレーションが失敗し、スタックは不安定な状態のままになっています。この状態のスタックは、今後の [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html) オペレーションから除外されます。必要に応じて、`RetainStacks` を `true` に設定して [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeleteStackInstances.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeleteStackInstances.html) オペレーションを実行し、スタックインスタンスを削除します。その後、手動でスタックを削除します。

`CANCELLED`  
指定されたアカウントとリージョンでのオペレーションがキャンセルされました。これは、ユーザーが StackSet オペレーションを停止したか、StackSet オペレーションの耐障害性を超えたためです。

`FAILED`  
指定されたアカウントとリージョンでのオペレーションに失敗しました。リージョン内の十分な数のアカウントで StackSet オペレーションが失敗した場合、StackSet オペレーション全体の耐障害性を超える可能性があります。

`FAILED_IMPORT`  
指定されたアカウントとリージョンのスタックインスタンスのインポートが失敗し、スタックが不安定な状態になりました。障害の原因となった問題が修正されたら、インポート操作を再試行できます。リージョン内の十分な数のアカウントで十分な数の StackSet オペレーションが失敗した場合、StackSet オペレーション全体の障害許容度を超える可能性があります。

`PENDING`  
指定されたアカウントとリージョンでのオペレーションはまだ開始されていません。

`RUNNING`  
指定されたアカウントとリージョンでのオペレーションは現在進行中です。

`SKIPPED_SUSPENDED_ACCOUNT`  
操作の時点でアカウントが停止されたため、指定されたアカウントとリージョンでの操作がスキップされました。

`SUCCEEDED`  
指定されたアカウントとリージョンでのオペレーションが正常に完了しました。