

# StackSets を使用したアカウントとリージョン全体でのスタックの管理
<a name="what-is-cfnstacksets"></a>

CloudFormation StackSets は、複数のアカウントおよび AWS リージョン全体でのスタックの作成、更新、削除を単一のオペレーションで実行できるようにすることで、スタックの機能を拡張します。管理者アカウントを使用して、CloudFormation テンプレートを定義および管理し、指定の AWS リージョン 間で選択したターゲット アカウントにスタックをプロビジョニングするためのベースとして使用します。

![\[StackSet は、テンプレート内にあるリソースのコレクションで、複数のアカウントとリージョン全体にデプロイされます。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/stack_set_conceptual_sv.png)


このセクションは、StackSets の使用開始に役立つほか、StackSet の作成、更新、削除に伴う操作やトラブルシューティングの手順に関する一般的な質問への回答を確認できます。

**Topics**
+ [StackSets の概念](stacksets-concepts.md)
+ [CloudFormation StackSets を使用するための前提条件](stacksets-prereqs.md)
+ [サンプルテンプレートを使用して StackSets の使用を開始する](stacksets-getting-started.md)
+ [セルフマネージド型のアクセス許可を持つ CloudFormation StackSets の作成](stacksets-getting-started-create-self-managed.md)
+ [サービスマネージド型のアクセス許可を持つ CloudFormation StackSets の作成](stacksets-orgs-associate-stackset-with-org.md)
+ [AWS Organizations で StackSets の自動デプロイを有効または無効にする](stacksets-orgs-manage-auto-deployment.md)
+ [CloudFormation StackSets を更新する](stacksets-update.md)
+ [CloudFormation StackSets にスタックを追加する](stackinstances-create.md)
+ [CloudFormation StackSet 内のスタックのパラメータ値を上書きする](stackinstances-override.md)
+ [CloudFormation StackSets からスタックを削除する](stackinstances-delete.md)
+ [CloudFormation StackSets を削除する](stacksets-delete.md)
+ [ターゲットアカウントゲートを使用して失敗した StackSets デプロイを防止する](stacksets-account-gating.md)
+ [CloudFormation StackSets の同時実行モードの選択](concurrency-mode.md)
+ [CloudFormation StackSets でのドリフト検出の実行](stacksets-drift.md)
+ [スタックを CloudFormation StackSets にインポートする](stacksets-import.md)
+ [CloudFormation StackSets を使用するためのベストプラクティス](stacksets-bestpractices.md)
+ [CloudFormation StackSets サンプルテンプレート](stacksets-sampletemplates.md)
+ [CloudFormation StackSets のトラブルシューティング](stacksets-troubleshooting.md)

# 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`  
指定されたアカウントとリージョンでのオペレーションが正常に完了しました。

# CloudFormation StackSets を使用するための前提条件
<a name="stacksets-prereqs"></a>

StackSets はスタックの機能を拡張するため、1 回のオペレーションで複数のアカウントとリージョンにまたがるスタックを作成、更新、削除できます。

StackSets では複数のアカウントでスタックオペレーションが実行されるため、最初の StackSet の作成を開始する前に、AWS アカウント で定義される必要なアクセス許可が必要です。

*セルフマネージド*または*サービスマネージド*の許可を使用して StackSets を管理できます。
+ *セルフマネージド* StackSets の場合、各ターゲットアカウントと AWS リージョン で IAM ロールを作成および管理する必要があります。詳細については、「[セルフマネージドのアクセス許可の付与](stacksets-prereqs-self-managed.md)」を参照してください。
+ *サービスマネージド* StackSets の場合、各アカウントで IAM ロールを手動で作成および管理する必要はありません。AWS がロールの作成と許可を処理します。詳細については、「[信頼されたアクセスをアクティブ化する](stacksets-orgs-activate-trusted-access.md)」を参照してください。

**Topics**
+ [デフォルトでは無効になっている AWS リージョン で StackSet オペレーションを実行する準備をする](stacksets-opt-in-regions.md)
+ [セルフマネージド型のアクセス許可を付与する](stacksets-prereqs-self-managed.md)
+ [AWS Organizations を使用して StackSets のための信頼されたアクセスをアクティブ化する](stacksets-orgs-activate-trusted-access.md)

# デフォルトでは無効になっている AWS リージョン で StackSet オペレーションを実行する準備をする
<a name="stacksets-opt-in-regions"></a>

2019 年 3 月 20 日以降に導入されたアジアパシフィック (香港) などの AWS リージョン は、デフォルトで無効になっています。これらのリージョンは使用前にアカウントで有効にする必要があります。詳細については、「*AWS アカウント管理 リファレンスガイド*」の「[アカウントでの AWS リージョン の有効化または無効化](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-regions.html)」を参照してください。

デフォルトで無効になっているリージョンで、StackSet の管理者アカウント (セルフマネージド型のアクセス許可を使用している場合) または組織の管理アカウント (サービスマネージド型のアクセス許可を使用している場合) から StackSet を作成するには、最初に管理者アカウントまたは管理アカウントでそのリージョンを有効にする必要があります。

CloudFormation で、スタックインスタンスを正常に作成または更新するには、以下が必要です。
+ ターゲットアカウントは、そのターゲットアカウントで現在有効になっているリージョンに存在する必要があります。
+ StackSet の管理者アカウントまたは組織の管理アカウントで、ターゲットアカウントと同じリージョンを有効にする必要があります。

**重要**  
StackSet のオペレーション中、管理者アカウントとターゲットアカウントは、アカウント自体だけでなく、さらに関連する StackSet およびそれらのインスタンスに関するメタデータをやり取りします。  
また、StackSet のインスタンスがあるアカウントを含むリージョンを無効にした場合、必要に応じて、そのようなインスタンスまたはリソースをすべて削除する必要があります。さらに、無効にしたリージョンにあるターゲットアカウントに関するメタデータは、管理者アカウントに保持されます。

# セルフマネージド型のアクセス許可を付与する
<a name="stacksets-prereqs-self-managed"></a>

このトピックでは、*セルフマネージド*許可を使用して、複数のアカウントおよび AWS リージョン にデプロイするために、StackSets によって必要とされる IAM サービスロールを作成する方法について説明します。これらのロールは、StackSet を管理するアカウントとスタックインスタンスをデプロイするアカウントとの間に信頼できる関係を確立するために必要です。このアクセス許可モデルを使用すると、StackSets は、 IAM ロールを作成するアクセス許可を持つ任意の AWS アカウント にデプロイできます。

*サービス管理アクセス*許可を使用するには、[信頼されたアクセスをアクティブ化する](stacksets-orgs-activate-trusted-access.md)代わりに「」を参照してください。

**Topics**
+ [セルフマネージド許可の概要](#prereqs-self-managed-permissions)
+ [管理者アカウントのすべてのユーザーに、すべてのターゲットアカウントのスタックを管理するための許可を付与します。](#stacksets-prereqs-accountsetup)
+ [StackSet オペレーションのアドバンストアクセス許可オプションの設定](#stacksets-prereqs-advanced-perms)
+ [混乱した代理問題を軽減するためにグローバルキーを設定する](#confused-deputy-mitigation)

## セルフマネージド許可の概要
<a name="prereqs-self-managed-permissions"></a>

セルフマネージド型のアクセス許可を持つ StackSet を作成する前に、各アカウントで IAM サービスロールを作成しておく必要があります。

基本的なステップは次のとおりです。

1. どの AWS アカウント が*管理者アカウント*であるかを判断します。

   StackSets はこの管理者アカウントで作成されます。*ターゲットアカウント*は、StackSet に属する個別のスタックを作成するアカウントです。

1. StackSet のアクセス許可を構成する方法を決定します。

   最も単純な (そして最も許容性の高い) アクセス許可設定は、管理者アカウントの*すべて*のユーザーとグループに、そのアカウントで管理されている*すべて*の StackSet を作成および更新する権限を付与することです。きめ細かな制御が必要な場合は、以下を指定するアクセス許可を設定できます。
   + どのユーザーとグループがどのターゲットアカウントで StackSet オペレーションを実行できるか。
   + ユーザーとグループが StackSets に含めることができるリソース。
   + 特定のユーザーおよびグループが実行できる StackSet オペレーション。

1. 管理者とターゲットアカウントに必要な IAM サービスロールを作成して、必要なアクセス許可を定義します。

   具体的には、必要な 2 つのロールは次のとおりです:
   + **AWSCloudFormationStackSetAdministrationRole** – このロールは管理者アカウントにデプロイされます。
   + **AWSCloudFormationStackSetExecutionRole** – このロールは、スタックインスタンスを作成するすべてのアカウントにデプロイされます。

## 管理者アカウントのすべてのユーザーに、すべてのターゲットアカウントのスタックを管理するための許可を付与します。
<a name="stacksets-prereqs-accountsetup"></a>

このセクションでは、管理者アカウントのすべてのユーザーとグループが、すべてのターゲットアカウントで StackSet オペレーションを実行することを許可するためのアクセス許可を設定する方法を説明します。管理者アカウントとターゲットアカウントで必要な IAM サービスロールを作成する手順を説明します。管理者アカウントのユーザーは誰でも、任意のターゲットアカウント全体でスタックを作成、更新、または削除できるようになります。

このようにアクセス許可を構成することで、ユーザーは StackSet を作成または更新するときに管理ロールを渡す必要がなくなります。

![\[このため、信頼関係を設定した後は、管理者アカウント内のユーザーなら誰でもターゲットアカウントに StackSet を作成できるようになります。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/stacksets_perms_master_target.png)


------
#### [ Administrator account ]

管理者アカウントで、**AWSCloudFormationStackSetAdministrationRole** という名前の IAM ロールを作成します。

そのためには、CloudFormation テンプレートからスタックを作成します。このテンプレートは [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AWSCloudFormationStackSetAdministrationRole.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AWSCloudFormationStackSetAdministrationRole.yml) で入手できます。

**Example アクセス許可ポリシーの例。**  
前述のテンプレートによって作成された管理ロールには、次の許可ポリシーが含まれています。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "sts:AssumeRole"
      ],
      "Resource": [
        "arn:aws:iam::*:role/AWSCloudFormationStackSetExecutionRole"
      ],
      "Effect": "Allow"
    }
  ]
}
```

**Example 信頼ポリシーの例 1**  
また、前述のテンプレートには、管理ロールと、ロールにアタッチされた許可を使用するためのサービス許可を付与する次の信頼ポリシーも含まれています。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudformation.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

**Example 信頼ポリシーの例 2**  
デフォルトで無効になっているリージョンにあるターゲットアカウントにスタックインスタンスをデプロイするには、そのリージョンのリージョンサービスプリンシパルを含める必要もあります。デフォルトで無効になっているリージョンごとに、独自のリージョンサービスプリンシパルがあります。  
次の信頼ポリシーのサンプルは、デフォルトでは無効になっているアジアパシフィック (香港) リージョン (`ap-east-1`) で管理ロールを使用するための許可をサービスに付与します。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
            "cloudformation.amazonaws.com",
            "cloudformation.ap-east-1.amazonaws.com"
         ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```
詳細については、「[デフォルトでは無効になっている AWS リージョン で StackSet オペレーションを実行する準備をする](stacksets-opt-in-regions.md)」を参照してください。リージョンコードの一覧については、「*AWS 全般のリファレンス ガイド*」の「[Regional endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints)」を参照してください。

------
#### [ Target accounts ]

各ターゲットアカウントで、管理者アカウントを信頼する **AWSCloudFormationStackSetExecutionRole** という名前のサービスロールを作成します。ロールにはこの正確な名前が必要です。そのためには、以下の CloudFormation テンプレートからスタックを作成します。このテンプレートは [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AWSCloudFormationStackSetExecutionRole.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AWSCloudFormationStackSetExecutionRole.yml) でオンラインで入手できます。このテンプレートを使用すると、ターゲットアカウントと信頼関係を持っている必要がある管理者アカウントのアカウント ID を指定するよう求められます。

**重要**  
このテンプレートは管理者アクセス権を付与することに注意してください。テンプレートを使用してターゲットアカウント実行ロールを作成した後、ポリシーステートメントのアクセス許可を、StackSets を使用して作成するリソースの種類にスコープする必要があります。

ターゲットアカウントサービスロールは、CloudFormation テンプレートで指定されたすべてのオペレーションを実行する許可を必要とします。たとえば、テンプレートが S3 バケットを作成している場合、S3 の新しいオブジェクトを作成するためのアクセス許可が必要です。ターゲットアカウントは常に完全な CloudFormation 許可を必要とします。これには、スタックを作成、更新、削除、および記述するための許可が含まれます。

**Example アクセス許可ポリシー 1 の例。**  
このテンプレートで作成されたロールは、ターゲットアカウントで次のポリシーを有効にします。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "*",
      "Resource": "*"
    }
  ]
}
```

**Example アクセス許可ポリシー 2 の例。**  
以下の例は、StackSets が機能するための*最低限*のアクセス許可を持つポリシーステートメントを示します。CloudFormation 以外のサービスのリソースを使用するターゲットアカウントでスタックを作成するには、それらのサービスアクションおよびリソースを、各ターゲットアカウントの **AWSCloudFormationStackSetExecutionRole** ポリシーステートメントに追加する必要があります。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
         "cloudformation:*"
      ],
      "Resource": "*"
    }
  ]
}
```

**Example 信頼ポリシーの例**  
次の信頼関係は、テンプレートによって作成されています。管理者アカウントの ID は、*admin\$1account\$1id* として表示されます。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```
既存のターゲットアカウントの実行ロールの信頼関係を設定して、管理者アカウントで特定のロールを信頼できます。管理者アカウントでロールを削除し、代わりとなる新しいロールを作成する場合、新しい管理者アカウントロールでターゲットアカウントの信頼関係を設定する必要があります。これは、前の例の *admin\$1account\$1id* によって表されます。

------

## StackSet オペレーションのアドバンストアクセス許可オプションの設定
<a name="stacksets-prereqs-advanced-perms"></a>

ユーザーとグループが 1 つの管理者アカウントを使用して作成している StackSets に対してきめ細かな制御が必要な場合は、IAM ロールを使用して次の項目を指定できます。
+ どのユーザーとグループがどのターゲットアカウントで StackSet オペレーションを実行できるか。
+ ユーザーとグループが StackSets に含めることができるリソース。
+ 特定のユーザーおよびグループが実行できる StackSet オペレーション。

### 特定のターゲットアカウントで StackSet オペレーションを実行できるユーザーを制御する
<a name="stacksets-prereqs-multiadmin"></a>

カスタマイズされた管理ロールを使用して、どのユーザーおよびグループがどのターゲットアカウントで StackSet オペレーションを実行できるかを制御します。StackSet オペレーションを実行する管理者アカウントのユーザーとターゲットアカウントを制御します。これを行うには、管理者アカウント自体に **AWSCloudFormationStackSetAdministrationRole** サービスロールを作成するのではなく、各ターゲットアカウントと特定のカスタマイズされた管理ロールの間に信頼関係を作成します。これで、特定のターゲットアカウントで StackSet オペレーションを実行する際、特定のユーザーとグループをアクティブ化して、カスタマイズされた管理ロールを使用します。

たとえば、ロール A とロール B を管理者アカウント内に作成できます。ターゲットアカウント 1 ～ 8 にアクセスする許可を ロール A に付与することができます。ターゲットアカウント 9 ～ 16 にアクセスする許可を ロール B に付与することができます。

![\[ユーザーによる StackSet の作成を許可する、カスタマイズされた管理ロールとターゲットアカウント間における信頼関係。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/stacksets_perms_admin_target.png)


必要な許可を設定するには、カスタマイズされた管理ロールの定義、ターゲットアカウントのサービスロールの作成、ユーザーへの許可の付与を行い、StackSet オペレーションを実行するときに、カスタマイズされた管理ロールを渡す必要があります。

必要な許可を設定したときの一般的な動作は次のとおりです。StackSet を作成する際、ユーザーは、カスタマイズされた管理ロールを指定する必要があります。ユーザーには、CloudFormation にロールを渡すための許可が必要です。さらに、カスタマイズされた管理ロールには、StackSet に指定されたターゲットアカウントとの信頼関係が必要です。CloudFormation では StackSet を作成し、カスタマイズされた管理ロールをこの StackSet に関連付けます。StackSet を更新する場合、ユーザーはカスタマイズされた管理ロールを明示的に指定する必要があります (この StackSet で以前に使用したのと同じカスタマイズされた管理ロールである場合でも必要です)。CloudFormation は、上記の要件に従い、このロールを使用してスタックを更新します。

------
#### [ Administrator account ]

**Example アクセス許可ポリシーの例。**  
StackSet ごとに、ターゲットアカウント実行ロールを引き受けるためのアクセス許可を持つカスタマイズされた管理ロールを作成します。  
ターゲットアカウント実行ロール名は、すべてのターゲットアカウントで同じである必要があります。ロール名が **AWSCloudFormationStackSetExecutionRole** である場合、StackSets は StackSet を作成する際にその名前を自動的に使用します。カスタムロール名を指定する場合、ユーザーは StackSet を作成する際に実行ロール名を指定する必要があります。  
カスタム名と次の許可ポリシーを使用して [IAM サービスロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)を作成します。以下の例では、*custom\$1execution\$1role* はターゲットアカウントの実行ロールを指します。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": [
                "arn:aws:iam::111122223333:role/custom_execution_role"
            ],
            "Effect": "Allow"
        }
    ]
}
```
単一のステートメントで複数のアカウントを指定するには、アカウントをカンマで区切ります。  

```
"Resource": [
  "arn:aws:iam::target_account_id_1:role/custom_execution_role", 
  "arn:aws:iam::target_account_id_2:role/custom_execution_role"
]
```
アカウント ID の代わりにワイルドカード (\$1) を使用して、すべてのターゲットアカウントを指定できます。  

```
"Resource": [
  "arn:aws:iam::*:role/custom_execution_role"
]
```

**Example 信頼ポリシーの例 1**  
どの IAM プリンシパルがロールを引き受けることができるかを定義するには、サービスロールの信頼ポリシーを指定する必要があります。    
****  

```
{ 
  "Version":"2012-10-17",		 	 	  
  "Statement": [ 
    { 
      "Effect": "Allow", 
      "Principal": { 
        "Service": "cloudformation.amazonaws.com" 
      }, 
      "Action": "sts:AssumeRole" 
    } 
  ] 
}
```

**Example 信頼ポリシーの例 2**  
デフォルトで無効になっているリージョンにあるターゲットアカウントにスタックインスタンスをデプロイするには、そのリージョンのリージョンサービスプリンシパルを含める必要もあります。デフォルトで無効になっているリージョンごとに、独自のリージョンサービスプリンシパルがあります。  
次の信頼ポリシーのサンプルは、デフォルトでは無効になっているアジアパシフィック (香港) リージョン (`ap-east-1`) で管理ロールを使用するための許可をサービスに付与します。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
            "cloudformation.amazonaws.com",
            "cloudformation.ap-east-1.amazonaws.com"
         ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```
詳細については、「[デフォルトでは無効になっている AWS リージョン で StackSet オペレーションを実行する準備をする](stacksets-opt-in-regions.md)」を参照してください。リージョンコードのリストについては、「*AWS 全般のリファレンスガイド*」の「[Regional endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints)」を参照してください。

**Example パスロールポリシーの例**  
また、StackSet オペレーションを実行する際にユーザーがカスタマイズされた管理ロールを渡すことを許可する IAM ユーザーの IAM 許可ポリシーも必要です。詳細については、[Granting a user permissions to pass a role to an AWS service](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html) を参照してください。  
以下の例では、*customized\$1admin\$1role* は、ユーザーが渡す必要のある管理ロールを意味します。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:GetRole",
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::*:role/customized_admin_role"
    }
  ]
}
```

------
#### [ Target accounts ]

ターゲットアカウントごとに、このアカウントで使用するカスタマイズされた管理者ロールを信頼するサービスロールを作成します。

ターゲットアカウントロールは、CloudFormation テンプレートで指定されたすべてのオペレーションを実行する許可を必要とします。たとえば、テンプレートが S3 バケットを作成している場合、S3 の新しいオブジェクトを作成するためのアクセス許可が必要です。ターゲットアカウントは常に完全な CloudFormation 許可を必要とします。これには、スタックを作成、更新、削除、および記述するための許可が含まれます。

ターゲットアカウントのロール名は、すべてのターゲットアカウントで同じである必要があります。ロール名が **AWSCloudFormationStackSetExecutionRole** である場合、StackSets は StackSet を作成する際にその名前を自動的に使用します。カスタムロール名を指定する場合、ユーザーは StackSet を作成する際に実行ロール名を指定する必要があります。

**Example アクセス許可ポリシーの例。**  
以下の例は、StackSets が機能するための*最低限*のアクセス許可を持つポリシーステートメントを示します。CloudFormation 以外のサービスのリソースを使用するターゲットアカウントでスタックを作成するには、それらのサービスアクションおよびリソースを、許可ポリシーに追加する必要があります。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cloudformation:*"
      ],
      "Resource": "*"
    }
  ]
}
```

**Example 信頼ポリシーの例**  
信頼関係を定義するロールを作成する際、次の信頼ポリシーを指定する必要があります。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/customized_admin_role"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

### ユーザーが特定の StackSets に含めることができるリソースを制御する
<a name="stacksets-prereqs-executionrole"></a>

カスタマイズされた実行ロールを使用して、ユーザーおよびグループが StackSets に含めることができるスタックリソースを制御します。例えば、作成した StackSets に Amazon S3 関連のリソースのみを含めることができるグループを設定し、別のチームには DynamoDB リソースのみを含めることができます。これを行うには、各グループのカスタマイズされた管理ロールと各リソースセットのカスタマイズされた実行ロールとの間に信頼関係を作成します。カスタマイズされた実行ロールは、どのスタックリソースを StackSets に含めることができるかを定義します。カスタマイズされた管理ロールは管理者アカウントにあり、カスタマイズされた実行ロールは定義されたリソースを使用して StackSets を作成する各ターゲットアカウントにあります。次に、StackSets オペレーションを実行するときにカスタマイズされた管理ロールを使用するように特定のユーザーとグループをアクティブ化します。

例えば、管理アカウントでカスタマイズされた管理者ロール A、B、C を作成できます。ロール A を使用するアクセス許可を持つユーザーおよびグループは、カスタマイズされた実行ロール X に明確にリストされているスタックリソースを含む StackSets を作成できますが、ロール Y または Z のリソースや実行ロールに含まれていないリソースは含まれません。

![\[ユーザーによる StackSet の作成を許可する、カスタム管理者ロールとターゲットアカウント内のカスタム実行ロール間における信頼関係。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/stacksets_perms_admin_execution.png)


StackSet を更新する場合、ユーザーはカスタマイズされた管理ロールを明示的に指定する必要があります (この StackSet で以前に使用したのと同じカスタマイズされた管理ロールである場合でも必要です)。ユーザーが StackSet に対してオペレーションを実行するアクセス許可を持っている場合、CloudFormation は指定のカスタマイズされた管理ロールを使用して更新を実行します。

同様に、ユーザーはカスタマイズされた実行ロールを指定することもできます。カスタマイズされた実行ロールを指定した場合、CloudFormation は、上記の要件に従って、スタックを更新するロールを使用します。ユーザーがカスタマイズされた実行ロールを指定しない場合、CloudFormation は、StackSet でオペレーションを実行するアクセス許可がユーザーに付与されている限り、StackSet に以前関連付けられていた、カスタマイズされた実行ロールを使用して更新を行います。

------
#### [ Administrator account ]

「[特定のターゲットアカウントで StackSet オペレーションを実行できるユーザーを制御する](#stacksets-prereqs-multiadmin)」で説明されているように、カスタマイズされた管理ロールを管理者アカウントで作成します。カスタマイズされた管理ロールと、使用するカスタマイズされた実行ロールとの間に信頼関係を含めます。

**Example アクセス許可ポリシーの例。**  
次の例は、ターゲットアカウントのために定義された **AWSCloudFormationStackSetExecutionRole** とカスタマイズされた実行ロールの両方のための許可ポリシーです。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
   "Statement": [
    {
      "Sid": "Stmt1487980684000",
      "Effect": "Allow",
      "Action": [
        "sts:AssumeRole" 
      ],
      "Resource": [ 
        "arn:aws:iam::*:role/AWSCloudFormationStackSetExecutionRole",
        "arn:aws:iam::*:role/custom_execution_role" 
      ]
    } 
  ]
}
```

------
#### [ Target accounts ]

StackSets を作成するターゲットアカウントで、ユーザーとグループが StackSets に含めることができるようにするサービスとリソースにアクセス許可を付与するカスタマイズされた実行ロールを作成します。

**Example アクセス許可ポリシーの例。**  
次の例では、StackSets の最小限のアクセス許可に加えて、Amazon DynamoDB テーブルを作成するアクセス許可を付与しています。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cloudformation:*"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "dynamoDb:createTable"
      ],
      "Resource": "*"
    }
  ]
}
```

**Example 信頼ポリシーの例**  
信頼関係を定義するロールを作成する際、次の信頼ポリシーを指定する必要があります。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/customized_admin_role"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

### 特定の StackSet オペレーションのアクセス許可を設定する
<a name="stacksets-prereqs-iam-actions"></a>

さらに、StackSets またはスタックインスタンスの作成、更新、削除など、特定の StackSet オペレーションを実行できるユーザーとグループのアクセス許可を設定できます。詳細については、「*サービス認可リファレンス*」の「[CloudFormation のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html)」を参照してください。

## 混乱した代理問題を軽減するためにグローバルキーを設定する
<a name="confused-deputy-mitigation"></a>

混乱した代理問題は、アクションを実行する許可を持たないエンティティが、より特権のあるエンティティにアクションを実行するように強制できるセキュリティの問題です。AWS では、サービス間でのなりすましによって、混乱した代理問題が発生する場合があります。サービス間でのなりすましは、あるサービス (*呼び出し元サービス*) が、別のサービス (*呼び出し対象サービス*) を呼び出すときに発生する可能性があります。呼び出し元サービスが操作され、それ自身のアクセス許可を使用して、本来アクセス許可が付与されるべきではない方法で別の顧客のリソースに対して働きかけることがあります。これを防ぐため、AWS では、アカウント内のリソースへのアクセス許可が付与されたサービスプリンシパルですべてのサービスのデータを保護するために役立つツールを提供しています。

リソースポリシーで [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) および [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) のグローバル条件コンテキストキーを使用して、CloudFormation StackSets が別のサービスに付与するアクセス許可をそのリソースに制限することをお勧めします。両方のグローバル条件コンテキストキーを同じポリシーステートメントで使用する場合は、`aws:SourceAccount` 値と、`aws:SourceArn` 値に含まれるアカウントが、同じアカウント ID を示している必要があります。

混乱した代理問題から保護するための最も効果的な方法は、リソースの完全な ARN を指定して `aws:SourceArn` グローバル条件コンテキストキーを使用することです。リソースの完全な ARN が不明な場合や、複数のリソースを指定する場合は、`aws:SourceArn` グローバルコンテキスト条件キーを使用して、ARN の未知部分をワイルドカード (`*`) で表します。例えば、`arn:aws:cloudformation::123456789012:*` です。より具体的であるため、可能な限り `aws:SourceArn` を使用してください。`aws:SourceAccount` は、正しい ARN または ARN パターンを判別できない場合にのみ使用してください。

StackSets が **[administrator]** (管理者) アカウントで **[Administration]** (管理者) ロールを引き受けるとき、StackSets は **[administrator]** (管理者) アカウント ID と StackSets Amazon リソースネーム (ARN) を入力します。したがって、信頼関係で[グローバルキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) `aws:SourceAccount` および `aws:SourceArn` の条件を定義して、[混乱した代理問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)を防ぐことができます。次の例では、StackSets で `aws:SourceArn` および `aws:SourceAccount` グローバル条件コンテキストキーを使用して、混乱した代理問題を回避する方法を示します。

------
#### [ Administrator account ]

**Example `aws:SourceAccount` および `aws:SourceArn` のグローバルキー**  
StackSets を使用する場合は、混乱した代理の問題を防ぐために、**AWSCloudFormationStackSetAdministrationRole** 信頼ポリシーでグローバルキー `aws:SourceAccount` および `aws:SourceArn` を定義します。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudformation.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "111122223333"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:cloudformation:*:111122223333:stackset/*"
        }
      }
    }
  ]
}
```

**Example StackSets ARN**  
より細かく制御するために、関連する StackSets ARN を指定します。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudformation.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333",
                    "aws:SourceArn": [
                        "arn:aws:cloudformation:STACKSETS-REGION:111122223333:stackset/STACK-SET-ID-1",
                        "arn:aws:cloudformation:STACKSETS-REGION:111122223333:stackset/STACK-SET-ID-2"
                    ]
                }
            }
        }
    ]
}
```

------

# AWS Organizations を使用して StackSets のための信頼されたアクセスをアクティブ化する
<a name="stacksets-orgs-activate-trusted-access"></a>

このトピックには、*サービスマネージド*許可を使用して、アカウントおよび AWS リージョン 間でデプロイするために StackSets によって必要とされる信頼されたアクセスを AWS Organizations でアクティブ化する方法の手順が記載されています。*セルフマネージド*許可を使用するには、代わりに「[セルフマネージドのアクセス許可の付与](stacksets-prereqs-self-managed.md)」を参照してください。

サービスマネージド型のアクセス許可を持つ StackSet を作成する前に、まず次のタスクを実行する必要があります。
+ AWS Organizations で[すべての機能を有効にします](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html)。一括請求 (コンソリデーティッドビリング) 機能のみが有効になっている場合、サービスマネージド型のアクセス許可を持つ StackSet を作成することはできません。
+ AWS Organizations の信頼されたアクセスをアクティブ化します。このアクションにより、CloudFormation は管理アカウントにサービスリンクロールを作成できます。信頼されたアクセスをアクティブ化した後に、サービスマネージド型のアクセス許可を持つ StackSet を作成すると、CloudFormation は必要なサービスリンクロールと、`stacksets-exec-*` という名前のサービスロールの両方をターゲット (メンバー) アカウントに作成します。

  信頼されたアクセスをアクティブ化すると、管理アカウントと委任管理者アカウントは、組織のサービスマネージド型の StackSets を作成して管理できます。

信頼されたアクセスをアクティブ化するには、管理アカウントの管理者ユーザーである必要があります。*管理者ユーザー*は、AWS アカウント に対するフルの許可を持つユーザーです。詳細については、「*AWS アカウント管理 リファレンスガイド*」の「[Create an administrator user](https://docs.aws.amazon.com/accounts/latest/reference/getting-started-step4.html)」を参照してください。管理アカウントのセキュリティを保護するための推奨事項については、「*AWS Organizations ユーザーガイド*」の「[管理アカウントのベストプラクティス](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_best-practices_mgmt-acct.html)」を参照してください。

**信頼されたアクセスをアクティブ化するには**

1. 管理アカウントの管理者として AWS にサインインし、[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation) で CloudFormation コンソールを開きます。

1. ナビゲーションペインから [**StackSets**] を選択します。信頼されたアクセスを非アクティブ化した場合、信頼されたアクセスを有効にするように求めるバナーが表示されます。  
![\[信頼されたアクセスバナーをアクティブ化します。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/console-stacksets-enable-trusted-access-from-stacksets-list-new.png)

1. **[信頼されるアクセスのアクティブ化]** を選択します。

   次のバナーが表示されると、信頼されたアクセスが正常にアクティブ化になります。  
![\[信頼されたアクセスは正常にバナーをアクティブ化します。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/console-stackset-trusted-access-enabled-banner-new.png)
**注記**  
[組織アクセスのアクティブ化] は [組織アクセスの有効化] と同じであり、[組織アクセスの非アクティブ化] は [組織アクセスの無効化] と同じです。これらの条件は、マーケティングガイドラインに基づいて更新されました。

**信頼されたアクセスを非アクティブ化する方法**  
「AWS Organizations ユーザーガイド」の 「[CloudFormation StackSets と AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/services-that-can-integrate-cloudformation.html)」を参照してください。

AWS Organizations を使用する信頼されたアクセスを非アクティブ化にする前、委任されたすべての管理者の登録を解除する必要があります。詳細については、「[委任された管理者の登録](stacksets-orgs-delegated-admin.md)」を参照してください。

**注記**  
コンソールの代わりに API オペレーションを使用して信頼されたアクセスをアクティブ化または非アクティブ化する方法については、次を参照してください:  
[https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ActivateOrganizationsAccess.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ActivateOrganizationsAccess.html)
[https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeactivateOrganizationsAccess.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeactivateOrganizationsAccess.html)
[https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeOrganizationsAccess.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeOrganizationsAccess.html)

## サービスリンクロール
<a name="stacksets-orgs-service-linked-roles"></a>

管理アカウントは、**AWSServiceRoleForCloudFormationStackSetsOrgAdmin** サービスにリンクされたロールを使用します。AWS Organizations を使用する信頼されたアクセスが非アクティブ化になっている場合のみ、このロールを変更または削除できます。

各ターゲットアカウントは、**AWSServiceRoleForCloudFormationStackSetsOrgMember** サービスにリンクされたロールを使用します。2 つの条件下 (AWS Organizations を使用する信頼されたアクセスが非アクティブ化されているか、アカウントがターゲット組織または組織単位 (OU) から削除されている場合) でのみ、このロールを変更または削除できます。

詳細については、「*AWS Organizations ユーザーガイド*」の「[CloudFormation StackSets と AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/services-that-can-integrate-cloudformation.html)」を参照してください。

# 委任された管理者メンバーアカウントを登録する
<a name="stacksets-orgs-delegated-admin"></a>

組織の管理アカウントの他に、委任管理者アクセス許可を持つメンバーアカウントは、組織に対するサービスマネージド型のアクセス許可を使用して StackSets を作成および管理できます。サービスマネージド型のアクセス許可を持つ StackSets は、委任管理者によって作成された StackSets を含め、管理アカウントに作成されます。組織の委任された管理者として登録するには、組織内にメンバーアカウントが必要です。組織に参加する方法については、「[Inviting an AWS アカウント to join your organization](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_invites.html)」を参照してください。

組織では、登録済みの委任された管理者を一度に最大 5 人設定できます。委任された管理者は、組織内のすべてのアカウントにデプロイするか、特定の OU にデプロイするかを選択できます。委任された管理者が組織によって管理されるアカウントにデプロイする前に、AWS Organizations を使用する信頼されたアクセスをアクティブ化する必要があります。詳細については、「[AWS Organizations を使用して StackSets のための信頼されたアクセスをアクティブ化する](stacksets-orgs-activate-trusted-access.md)」を参照してください。

**重要**  
以下の点に注意してください。  
委任された管理者は、組織内のアカウントにデプロイするための完全なアクセス許可を持っています。管理アカウントでは、特定の OU にデプロイしたり、特定の StackSet のオペレーションを実行したりする、委任管理者のアクセス許可を制限することはできません。
潜在的なエラーを回避するため、委任された管理者に `organizations:ListDelegatedAdministrators` アクセス許可が付与されていることを確認します。

組織の委任された管理者は、米国東部 (オハイオ)、米国東部 (バージニア北部)、米国西部 (北カリフォルニア)、米国西部 (オレゴン)、アジアパシフィック (ムンバイ)、アジアパシフィック (ソウル)、アジアパシフィック (シンガポール)、アジアパシフィック (シドニー)、アジアパシフィック (東京)、カナダ (中部)、欧州 (フランクフルト)、欧州 (アイルランド)、欧州 (ロンドン)、欧州 (パリ)、欧州 (ストックホルム)、イスラエル (テルアビブ)、南米 (サンパウロ)、AWS GovCloud (米国東部)、AWS GovCloud (US-West) の各リージョンに登録できます。

[CloudFormation コンソール ](https://console.aws.amazon.com/cloudformation/)、[AWS CLI](https://aws.amazon.com/cli/)、または [AWS SDK](https://aws.amazon.com/developer/tools/) を使用して 、委任された管理者の登録および登録解除を行うことができます。

## 委任された管理者を登録するには (コンソール)
<a name="stacksets-orgs-register-delegated-admin-console"></a>

1. 管理アカウントの管理者として AWS にサインインし、 [https://console.aws.amazon.com/cloudformation/](https://console.aws.amazon.com/cloudformation/) で CloudFormation コンソールを開きます。

1. ナビゲーションペインから [**StackSets**] を選択します。

1. [**委任された管理者**] で、[**委任された管理者の登録**] を選択します。

1. [**委任された管理者の登録**] ダイアログボックスで、[**委任された管理者の登録**] を選択します。

   成功のメッセージは、メンバアーカウントが委任された管理者として正常に登録されたことを示します。

## 委任された管理者の登録を解除するには (コンソール)
<a name="stacksets-orgs-deregister-delegated-admin-console"></a>

1. 管理アカウントの管理者として AWS にサインインし、 [https://console.aws.amazon.com/](https://console.aws.amazon.com/) で CloudFormation コンソールを開きます。

1. ナビゲーションペインから [**StackSets**] を選択します。

1. [**委任された管理者**] で、登録解除するアカウントを選択し、[**登録の解除**] を選択します。

   成功のメッセージは、メンバーアカウントが委任された管理者として正常に登録解除されたことを示します。

   このアカウントはいつでも再登録できます。

## 委任された管理者を登録する (AWS CLI)
<a name="stacksets-orgs-register-delegated-admin-cli"></a>

1. AWS CLI を開きます。

1. `register-delegated-administrator` コマンドを実行します。

   ```
   $ aws organizations register-delegated-administrator \
     --service-principal=member.org.stacksets.cloudformation.amazonaws.com \
     --account-id="memberAccountId"
   ```

1. 指定されたメンバーアカウントが委任された管理者として正常に登録されていることを確認するには、`list-delegated-administrators` コマンドを実行します。

   ```
   $ aws organizations list-delegated-administrators \
     --service-principal=member.org.stacksets.cloudformation.amazonaws.com
   ```

## 委任された管理者の登録を解除する (AWS CLI)
<a name="stacksets-orgs-deregister-delegated-admin-cli"></a>

1. AWS CLI を開きます。

1. `deregister-delegated-administrator` コマンドを実行します。

   ```
   $ aws organizations deregister-delegated-administrator \
     --service-principal=member.org.stacksets.cloudformation.amazonaws.com \
     --account-id="memberAccountId"
   ```

1. 指定されたメンバーアカウントが委任された管理者として正常に登録解除されていることを確認するには、`list-delegated-administrators` コマンドを実行します。

   ```
   $ aws organizations list-delegated-administrators \
     --service-principal=member.org.stacksets.cloudformation.amazonaws.com
   ```

   このアカウントはいつでも再登録できます。

# サンプルテンプレートを使用して StackSets の使用を開始する
<a name="stacksets-getting-started"></a>

このチュートリアルは、AWS マネジメントコンソール を使用して StackSets の使用を開始するのに役立ちます。サンプルテンプレートを使用して StackSet を作成する手順を説明します。複数のリージョンにスタックをデプロイし、StackSet オペレーションをモニタリングして、結果を表示する方法について説明します。

このチュートリアルでは、米国西部 (オレゴン) リージョン (`us-west-2`) および米国東部 (バージニア北部) リージョン (`us-east-1`) 内の AWS アカウント で AWS Config を有効にする StackSet を作成します。StackSets を使用すると、1 回のオペレーションで複数のアカウントとリージョンにまたがるスタックを作成、更新、または削除できるため、大規模なインフラストラクチャを管理するのに最適なソリューションです。このチュートリアルでは、簡素化のために 1 つのアカウントを使用していますが、StackSets のマルチリージョン機能を効果的に示す内容となっています。

サンプルテンプレートは、次の S3 バケットにあります: [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSConfig.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSConfig.yml)。

**注記**  
StackSets は無料ですが、このチュートリアルで作成する AWS Config などの AWS リソースに対して課金されます。詳細については、「[AWS Config 料金表](https://aws.amazon.com/config/pricing/)」を参照してください。

**Topics**
+ [前提条件](#stacksets-tutorial-prerequisites)
+ [コンソールからサンプルテンプレートを使用して StackSet を作成する](#stacksets-tutorial-create-stackset)
+ [StackSet の作成をモニタリングする](#stacksets-tutorial-monitor-creation)
+ [StackSet の結果を表示する](#stacksets-tutorial-view-results)
+ [StackSet を更新する](#stacksets-tutorial-update-stackset)
+ [スタックを StackSet に追加する](#stacksets-tutorial-add-stacks)
+ [クリーンアップ](#stacksets-tutorial-clean-up)
+ [次のステップ](#stacksets-tutorial-next-steps)

## 前提条件
<a name="stacksets-tutorial-prerequisites"></a>

このチュートリアル開始する前に、以下の前提条件を満たしていることを確認してください。
+ セルフマネージド型のアクセス許可に必要な IAM ロールを設定しておく必要があります。StackSet を作成して 1 つのアカウント内にスタックをデプロイするには、アカウントで次のロールが必要です。
  + `AWSCloudFormationStackSetAdministrationRole`
  + `AWSCloudFormationStackSetExecutionRole`

  これらのロールの設定手順の詳細については、「[セルフマネージドのアクセス許可の付与](stacksets-prereqs-self-managed.md)」を参照してください。

## コンソールからサンプルテンプレートを使用して StackSet を作成する
<a name="stacksets-tutorial-create-stackset"></a>

**AWS Config を有効にする StackSet を作成するには**

1. [ クラウドフォーメーション コンソール](https://console.aws.amazon.com/cloudformation/)を開きます。

1. 画面の上部のナビゲーションバーで、StackSet を管理する AWS リージョン を選択します。

   StackSets がサポートされているリージョンはいずれも選択できます。選択したリージョンは、StackSet でデプロイできるリージョンには影響しません。

1. ナビゲーションペインから [**StackSets**] を選択します。

1. [**StackSets**] ページの上部から [**StackSets の作成**] を選択します。

1. **[アクセス許可]** で、**[セルフサービスのアクセス許可]** を選択し、前提条件で作成した IAM ロールを選択します。
   + IAM 管理者ロールで、**[AWSCloudFormationStackSetAdministrationRole]** を選択します。
   + IAM 実行ロール名で、**[AWSCloudFormationStackSetExecutionRole]** を選択します。

1. [**Prerequisite - Prepare template (前提条件 - テンプレートの準備)**] で [**Use a sample template (サンプルテンプレートの使用)**] を選択します。

1. **[サンプルテンプレートの選択]** で、ドロップダウンメニューから **[AWS Config の有効化]** テンプレートを選択します。その後、**[Next]** を選択します。

   このテンプレートは、設定レコーダーや配信チャネルなど、アカウントで AWS Config を有効にするために必要なリソースを作成します。

1. **[StackSet の詳細を指定]** ページで、**[StackSet 名]** に **my-awsconfig-stackset** と入力します。

1. **[StackSet の説明]** には、**A StackSet that enables Config across multiple Regions** と入力します。

1. **[パラメータ]** で、次のように AWS Config 設定を行います。

   1. **[すべてのリソースタイプをサポート]** で、デフォルト値の **true** のままにして、サポートされているすべてのリソースタイプを記録します。

   1. **[グローバルリソースタイプを含める]** で、デフォルト値の **false** のままにして、IAM ロールなどのグローバルリソースを除外します。

   1. **[すべてがサポートされていない場合のリソースタイプのリスト]** を **<All>** のままにしておきます

   1. **[Config サービスにリンクされたロールのリソースを含むリージョン]** で、**<DeployToAnyRegion>** を **us-west-2** に置き換えます。

      つまり、`AWSServiceRoleForConfig` という名前のサービスにリンクされたロールは、スタックが米国西部 (オレゴン) リージョンにデプロイされている場合にのみ作成されます。デプロイリージョンは、この手順の後半で選択します。

   1. **[設定レコーダーの記録頻度]** で、**[DAILY]** 記録を選択します。

1. **[次へ]** を選択して続行します。

1. **[StackSet オプションの設定]** ページで、**[新しいタグの追加]** を選択し、キーと値のペアを指定してタグを追加します。

   1. [**キー**] に「**Stage**」と入力します。

   1. [**Value (値)**] に「**Test**」と入力します。

   StackSets に適用するタグは、スタックによって作成されるリソースに適用されます。

1. **[実行設定]** で、**[アクティブ]** を選択して CloudFormation の最適化されたオペレーション処理を有効にします。
   + 競合しないオペレーションは、デプロイ時間を短縮するために同時に実行されます。
   + 競合するオペレーションは自動的にキューに入れられ、リクエストされた順序で処理されます。

   オペレーションが実行中またはキューに入れられている間、CloudFormation ではオペレーションが競合しない場合でもすべての受信オペレーションがキューに入ります。この間は実行設定を変更できません。

1. [**次へ**] を選択します。

1. **[デプロイオプションの設定]** ページの **[StackSet にスタックを追加]** で、**[新しいスタックのデプロイ]** オプションを選択します。

1. [**アカウント**] で [**Deploy stacks in accounts (スタックをアカウントにデプロイ)**] を選択します。

1. テキストボックスに AWS アカウント ID を入力します。

1. **[リージョンの指定]** では、次のリージョンをこの順序で選択します。

   1. 米国西部 (オレゴン) リージョン (`us-west-2`)

   1. 米国東部 (バージニア北部) リージョン (`us-east-1`)

   必要に応じて、米国西部 (オレゴン) リージョンの横にある上矢印を使用して、リストの最初の項目になるように移動します。リージョンの順序に従って、デプロイの順序が決まります。

1. **[デプロイオプション]** では、次の設定を行います。

   1. **[Maximum concurrent accounts (同時アカウントの最大数)]** については、デフォルト値の **[数値]** と **1** をそのまま使用します。

      つまり、マルチアカウントデプロイの場合、この設定では、CloudFormation は一度に 1 つのアカウントのみでスタックをデプロイします。

   1. [**Failure tolerance (耐障害性)**] については、デフォルトの [**数値**] と [**0**] をそのまま使用します。

      つまり、CloudFormation が現在のリージョンでデプロイを停止し、残りのリージョンでのデプロイをキャンセルする前に、最大で 0 個のスタックデプロイが、指定されたリージョンのうちいずれかで失敗できるということを意味します。

   1. **[リージョンの同時実行]** では、**[順次]** (デフォルト) を選択します。

      この設定により、CloudFormation は 1 つのリージョンでデプロイを完了してから次のリージョンに移動します。

   1. **[同時実行モード]** では、**[厳格な耐障害性]** のデフォルト設定を維持します。

      マルチアカウントデプロイの場合、これにより障害発生時のアカウントの同時実行レベルが下がり、**[耐障害性]** \$11 の範囲内に維持されます。

1. [**次へ**] を選択します。

1. **[確認]** ページで選択内容を確認します。変更するには、関連セクションで [**編集**] をクリックします。

1. StackSet を作成する準備ができたら、**[送信]** を選択します。

## StackSet の作成をモニタリングする
<a name="stacksets-tutorial-monitor-creation"></a>

**[送信]** を選択すると、CloudFormation は StackSet の作成と、アカウント内の指定されたリージョンへのスタックのデプロイを開始します。StackSet の詳細ページが自動的に開き、オペレーションの進行状況をモニタリングできます。

**StackSet の作成をモニタリングするには**

1. StackSet の詳細ページで、**[オペレーション]** タブがデフォルトで表示され、進行中の現在のオペレーションが表示されます。

1. オペレーションのステータスは、最初は `RUNNING` である必要があります。CloudFormation は、設定したデプロイオプションに従って、指定したリージョンにスタックを作成します。

1. オペレーションの詳細については、リストでオペレーション ID を選択します。

1. オペレーションの詳細ページで、各リージョンで作成されているスタックインスタンスのステータスを表示できます。

1. オペレーションステータスが `SUCCEEDED` に変わるまで待ちます。これは、StackSet とそのすべてのスタックインスタンスが正常に作成されたことを示します。

## StackSet の結果を表示する
<a name="stacksets-tutorial-view-results"></a>

StackSet の作成が完了したら、デプロイされたスタックインスタンスを表示し、指定したリージョンのアカウントで AWS Config が有効になっていることを確認できます。

**StackSet の結果を表示するには**

1. StackSet の詳細ページで、**[スタックインスタンス]** タブを選択します。

1. 指定したリージョンのアカウントで作成されたスタックインスタンスのリストが表示されます。各スタックインスタンスのステータスは `SUCCEEDED` である必要があり、これは正常にデプロイされたことを示します。

1. アカウントで AWS Config が有効になっていることを確認するには、デプロイされた各リージョンで AWS Config コンソールを確認します。

## StackSet を更新する
<a name="stacksets-tutorial-update-stackset"></a>

StackSet を作成したら、それを更新してパラメータ値を変更したり、リージョンを追加したりできます。このセクションでは、AWS Config 記録頻度パラメータを更新する方法について説明します。

**StackSet を更新するには**

1. **[StackSets]** ページで、**my-awsconfig-stackset** を選択します。

1. StackSet を選択した状態で、**[アクション]** メニューから **[StackSet の詳細を編集]** を選択します。

1. **[テンプレートの選択]** ページの **[前提条件 - テンプレートの準備]** で、**[現在のテンプレートの使用]** を選択します。

1. [**次へ**] を選択します。

1. **[StackSet の詳細を指定]** ページの **[パラメータ]** で、**[設定レコーダーの記録頻度]** を見つけて、**[DAILY]** から **[CONTINUOUS]** に変更します。

1. [**次へ**] を選択します。

1. **[StackSet オプションの設定]** ページで、設定をそのままにして **[次へ]** を選択します。

1. **[デプロイオプションの設定]** ページで、アカウント ID と StackSet の作成時に使用したのと同じリージョンを指定します。

1. **[デプロイオプション]** では、以前と同じ設定のままにします。

1. [**次へ**] を選択します。

1. **[レビュー]** ページで変更内容を確認し、**[送信]** を選択します。

1. CloudFormation が StackSet の更新を開始します。StackSet の詳細ページの **[オペレーション]** タブで進行状況をモニタリングできます。

## スタックを StackSet に追加する
<a name="stacksets-tutorial-add-stacks"></a>

追加のリージョンにデプロイすることで、StackSet にさらにスタックを追加できます。このセクションでは、新しいリージョンにスタックを追加する方法を示します。

**StackSet にスタックを追加するには**

1. **[StackSets]** ページで、**my-awsconfig-stackset** を選択します。

1. StackSet を選択した状態で、**[アクション]** メニューから **[StackSet にスタックを追加]** を選択します。

1. **[デプロイオプションの設定]** ページの **[StackSet にスタックを追加]** で、**[新しいスタックのデプロイ]** オプションを選択します。

1. **[アカウント]** で、**[スタックをアカウントにデプロイ]** を選択し、アカウント ID を入力します。

1. **[リージョンの指定]** には、**[欧州 (アイルランド)]** (`eu-west-1`) などの新しいリージョンを選択します。

1. **[デプロイオプション]** では、以前と同じ設定のままにします。

1. [**次へ**] を選択します。

1. **[上書きの指定]** ページでは、プロパティ値を指定されたままにして、**[次へ]** を選択します。

1. [**確認**] ページで選択内容を確認し、[**送信**] を選択します。

1. CloudFormation は、指定されたリージョンで新しいスタックの作成を開始します。StackSet の詳細ページの **[オペレーション]** タブで進行状況をモニタリングできます。

## クリーンアップ
<a name="stacksets-tutorial-clean-up"></a>

不要な AWS Config リソースに対して料金が発生しないようにするには、StackSet からスタックを削除し、StackSet 自体を削除し、このチュートリアル用に作成した IAM ロールを削除してクリーンアップする必要があります。すべてのリソースはアカウント内にデプロイされるため、クリーンアップは簡単です。

**StackSet からスタックを削除するには**

1. **[StackSets]** ページで、**my-awsconfig-stackset** を選択します。

1. StackSet を選択した状態で、**[アクション]** メニューから **[StackSet からスタックを削除]** を選択します。

1. **[デプロイオプションの設定]** ページの **[アカウント]** で、**[スタックをアカウントにデプロイ]** を選択し、アカウント ID を入力します。

1. **[リージョンの指定]** で、スタックをデプロイしたすべてのリージョンを選択します。

1. **[デプロイオプション]** では、デフォルト設定のままにします。

1. スタックとそのリソースが削除されるように、**[スタックを保持]** が有効になって*いない*ことを確認します。

1. [**次へ**] を選択します。

1. [**確認**] ページで選択内容を確認し、[**送信**] を選択します。

1. CloudFormation は StackSet からのスタックの削除を開始します。StackSet の詳細ページの **[オペレーション]** タブで進行状況をモニタリングできます。

**StackSet を削除するには**

1. すべてのスタックが削除されたら、**[StackSets]** ページで **my-awsconfig-stackset** を選択します。

1. StackSet を選択した状態で、**[アクション]** メニューから **[StackSet の削除]** を選択します。

1. 確認を求められたら、**[削除]** を選択します。

**IAM サービスロールを削除するには**

一つのアカウントにのみデプロイしたため、このアカウントから IAM ロールを削除するだけで済み、マルチアカウントデプロイに比べてクリーンアップが非常に簡単です。

1. [[IAM コンソール]](https://console.aws.amazon.com/iam/) を開きます。

1. ナビゲーションペインで、[**Roles**] を選択します。

1. 検索ボックスに **AWSCloudFormationStackSet** と入力して、このチュートリアル用に作成したロールを見つけます。

1. **[AWSCloudFormationStackSetAdministrationRole]** の横にあるチェックボックスをオンにします。

1. ページの上部から、**[削除]** を選択します。

1. 確認ダイアログボックスで、**delete** と入力し、**[削除]** を選択します。

1. 同じプロセスを繰り返して、**[AWSCloudFormationStackSetExecutionRole]** を削除します。

StackSet を削除すると、`AWS::S3::Bucket` リソースの `DeletionPolicy` 属性により、Amazon S3 バケットが各 AWS リージョン に残ります。これにより、AWS Config 履歴データが保持されます。このデータが不要になった場合は、バケットを手動で削除しても問題ありません。バケットを削除するには、パケットを空にする必要があります。バケットを空にすると、バケット内のすべてのオブジェクトが削除されます。

**Amazon S3 バケットを空にして削除するには**

1. [Amazon S3 コンソール](https://console.aws.amazon.com/s3/)を開きます。

1. コンソールの左側のナビゲーションペインで、[**バケット**] を選択します。

1. **[バケット]** リストには、デプロイした各リージョンでこの StackSet 用に作成されたバケットが表示されます。この StackSet 用に作成されたバケットの名前の横にあるオプションを選択し、**[空]** を選択します。

1. **[バケットを空にする]** ページで、テキストフィールドに **permanently delete** と入力して、**[空にする]** をクリックします。

1. [**バケットを空にする: ステータス**] ページで、バケットを空にするプロセスの進行状況をモニタリングします。

1. バケットリストに戻るには、[**Exit (終了)**] を選択します。

1. バケットの名前の横にあるオプションを選択し、**[削除]** を選択します。

1. 確認を求められたら、バケットの名前を入力し、**[バケットを削除]** を選択します。

1. **[バケット]** リストで、バケット削除プロセスの進捗状況を確認します。Amazon S3 がバケットの削除を完了すると、バケットはリストから消えます。

1. 異なるリージョンで StackSet によって作成された各バケットに対して、このプロセスを繰り返します。

## 次のステップ
<a name="stacksets-tutorial-next-steps"></a>

お疲れ様でした。サンプルテンプレートを使用した StackSet の作成、アカウント内の複数のリージョンへのスタックのデプロイ、StackSet の更新、スタックの追加、リソースのクリーンアップが正常に完了しました。シングルアカウントデプロイに焦点を当てることで、StackSets のマルチリージョン機能の核心を学習しながら、クリーンアッププロセスを簡素化しました。

StackSets の詳細については、次のトピックをご覧ください。
+ [CloudFormation StackSet 内のスタックのパラメータ値を上書きする](stackinstances-override.md) – 特定のアカウントとリージョンのパラメータ値を上書きする方法を説明します。
+ [サービスマネージド型のアクセス許可を持つ CloudFormation StackSets の作成](stacksets-orgs-associate-stackset-with-org.md) – AWS Organizations を使用したマルチアカウントデプロイ用の StackSets の作成について説明します。

# セルフマネージド型のアクセス許可を持つ CloudFormation StackSets の作成
<a name="stacksets-getting-started-create-self-managed"></a>

このトピックでは、AWS アカウント およびリージョンにスタックをデプロイするための*セルフマネージド型*のアクセス許可を持つ StackSets を作成する方法について説明します。

**注記**  
続行する前に、StackSets に必要な IAM サービスロールを作成して、StackSet の管理元アカウントとスタックのデプロイ先のアカウントとの間に信頼関係を確立します。詳細については、「[セルフマネージド型のアクセス許可を付与する](stacksets-prereqs-self-managed.md)」を参照してください。

**Topics**
+ [セルフマネージド型のアクセス許可を持つ StackSet の作成 (コンソール)](#stacksets-getting-started-create-self-managed-console)
+ [セルフマネージド型のアクセス許可を持つ StackSet の作成 (AWS CLI)](#stacksets-getting-started-self-managed-cli)

## セルフマネージド型のアクセス許可を持つ StackSet の作成 (コンソール)
<a name="stacksets-getting-started-create-self-managed-console"></a>

**StackSet を作成するには**

1. AWS マネジメントコンソール にサインインし、CloudFormation コンソール ([https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)) を開きます。

1. 画面の上部のナビゲーションバーで、StackSet を管理する AWS リージョン を選択します。

1. ナビゲーションペインから [**StackSets**] を選択します。

1. [**StackSets**] ページの上部から [**StackSets の作成**] を選択します。

1. **[アクセス許可]** で、**[セルフサービスのアクセス許可]** を選択し、作成した IAM ロールを選択します。

1. [**前提条件 − テンプレートの準備**] で、[**テンプレートの準備完了**] を選択します。

1. [**Specify template (テンプレートの指定)**] で、スタックテンプレートを含む S3 バケットの URL を指定するか、スタックテンプレートファイルをアップロードするかを選択します。その後、**[Next]** を選択します。

1. **[StackSet の詳細を指定]** ページで、StackSet の名前を指定し、パラメータを指定して、**[次へ]** を選択します。

1. **[次へ]** を選択して続行します。

1. [**StackSet オプションの設定**] ページの [**タグ**] で、スタックのリソースに適用するタグを指定します。AWS でのタグの使用方法に関する詳細については、*AWS Billing and Cost Management ユーザーガイド*の「[AWS コスト配分タグを使用してコストを整理および追跡する](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)」を参照してください。

1. **[実行設定]** で、**[アクティブ]** を選択して CloudFormation の最適化されたオペレーション処理を有効にします。
   + 競合しないオペレーションは、デプロイ時間を短縮するために同時に実行されます。
   + 競合するオペレーションは自動的にキューに入れられ、リクエストされた順序で処理されます。

   オペレーションが実行中またはキューに入れられている間、CloudFormation ではオペレーションが競合しない場合でもすべての受信オペレーションがキューに入ります。この間は実行設定を変更できません。

1. テンプレートに IAM リソースが含まれる場合は、[**機能**] で[**I acknowledge that this template may create IAM resources (このテンプレートが IAM リソースを作成する可能性を認識しています)**] を選択して、テンプレート内の IAM リソースを使用することを指定します。詳細については、「[CloudFormation テンプレートでの IAM リソースの承認](control-access-with-iam.md#using-iam-capabilities)」を参照してください。

1. **[Next]** (次へ) を選択します。

1. **[デプロイオプションの設定]** ページの **[StackSet にスタックを追加]** で、**[新しいスタックのデプロイ]** オプションを選択します。

1. [**アカウント**] で [**Deploy stacks in accounts (スタックをアカウントにデプロイ)**] を選択します。ターゲット AWS アカウント 番号をテキストボックスに貼り付け、複数の数字をカンマで区切ります。
**注記**  
管理者アカウントにもスタックをデプロイする場合は、管理者アカウント ID を含めることができます。

1. **[リージョンの指定]** で、スタックをデプロイするリージョンを選択します。

1. **[デプロイオプション]** で、次の操作を行います。
   + **[同時アカウントの最大数]** で、同時に処理されるアカウントの数を指定します。
   + **[耐障害性]** には、リージョンごとに許可されるアカウント障害の最大数を指定します。この制限に達すると、オペレーションは停止し、他のリージョンには進みません。
   + **[リージョンの同時実行]** で、リージョンの処理方法を選択します。**[順次]** (一度に 1 つのリージョン) または **[並列]** (複数のリージョンを同時に) を選択できます。
   + **[同時実行モード]** で、オペレーションの実行中に同時実行がどのように動作するかを選択します。
     + **[厳格な耐障害性]** – 障害発生時の同時実行レベルを下げ、**[耐障害性]** の値を \$11 の範囲内にとどめます。
     + **[ソフトな障害耐性]** – 障害に関係なく、指定された同時実行レベル (**[同時アカウントの最大数]** の値) を維持します。

1. [**次へ**] を選択します。

1. **[確認]** ページで選択内容を確認します。変更するには、関連セクションで [**編集**] をクリックします。

1. StackSet を作成する準備ができたら、**[送信]** を選択します。

   CloudFormation で StackSet の作成が開始されます。StackSet 内のスタック作成の進捗と状況は、**[送信]** を選択した際に開く StackSet 詳細ページで確認できます。

## セルフマネージド型のアクセス許可を持つ StackSet の作成 (AWS CLI)
<a name="stacksets-getting-started-self-managed-cli"></a>

このセクションの手順に従い、AWS CLI を使用して次の操作を実行します。
+ StackSet コンテナを作成します。
+ スタックインスタンスをデプロイします。

**StackSet を作成するには**

1. [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-set.html) コマンドを使用して、`my-stackset` という名前の新しい StackSet を作成します。次の例では、S3 バケットに保存されているテンプレートを使用し、パラメーターとして `KeyPairName` に `TestKey` という値を設定しています。

   ```
   aws cloudformation create-stack-set \
     --stack-set-name my-stackset \
     --template-url https://s3.region-code.amazonaws.com/amzn-s3-demo-bucket/MyApp.template \
     --parameters ParameterKey=KeyPairName,ParameterValue=TestKey
   ```

1. **create-stack-set** コマンドが完了した後、[https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-sets.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-sets.html) コマンドを実行して StackSet が作成されたことを確認します。新しい StackSet が表示結果で確認できます。

   ```
   aws cloudformation list-stack-sets
   ```

1. [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html) コマンドを使用して、StackSet 内にスタックをデプロイします。次の例では、2 つのリージョン (`us-west-2` と `us-east-1`) にわたって 2 つの AWS アカウント (`account_ID_1` と `account_ID_2`) にスタックをデプロイします。

   `--operation-preferences` オプションを使用して、同時アカウント処理およびその他のデプロイ設定を設定します。この例では、カウントベースの設定を使用します。`MaxConcurrentCount` は `FailureToleranceCount` \$1 1 を超えることはできません。パーセンテージベースの設定の場合は、代わりに `FailureTolerancePercentage` または `MaxConcurrentPercentage` を使用します。

   ```
   aws cloudformation create-stack-instances \
     --stack-set-name my-stackset \
     --accounts account_ID_1 account_ID_2 \
     --regions us-west-2 us-east-1 \
     --operation-preferences MaxConcurrentCount=1,FailureToleranceCount=0
   ```

   詳細については、「*AWS CloudFormation API リファレンス*」の「[CreateStackInstances](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStackInstances.html)」を参照してください。

1. [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html) コマンドを使用して、スタックが正常に作成されたことを確認します。`--operation-id` オプションで、**create-stack-instances** 出力の一部として返されたオペレーション ID を指定します。

   ```
   aws cloudformation describe-stack-set-operation \
     --stack-set-name my-stackset \
     --operation-id operation_ID
   ```

# サービスマネージド型のアクセス許可を持つ CloudFormation StackSets の作成
<a name="stacksets-orgs-associate-stackset-with-org"></a>

サービスマネージド型のアクセス許可を使用すると、AWS Organizations が管理する特定のリージョン内のアカウントにスタックをデプロイできます。このモデルを使用すると、ターゲットアカウントと AWS リージョンそれぞれに IAM ロールを作成する必要がなくなります。IAM ロールは CloudFormation がユーザーに代わって作成します。詳細については、「[信頼されたアクセスをアクティブ化する](stacksets-orgs-activate-trusted-access.md)」を参照してください。

**Topics**
+ [考慮事項](#stacksets-orgs-considerations)
+ [サービスマネージド型のアクセス許可を持つ StackSet の作成 (コンソール)](#stacksets-orgs-associate-stackset-with-org-console)
+ [サービスマネージド型のアクセス許可を持つ StackSet 作成 (AWS CLI)](#stacksets-orgs-associate-stackset-with-org-cli)

## 考慮事項
<a name="stacksets-orgs-considerations"></a>

サービスマネージド型の許可を持つ StackSet を作成する前に、次の点を考慮してください。
+ サービスマネージド型の許可を持つ StackSet は、組織の管理アカウントまたは委任管理者アカウントのいずれかが開始できますが、すべてのオペレーションは管理アカウントが実行します。
+ CloudFormation は、管理アカウントが組織の一部であったり、組織単位 (OU) に属していたりする場合でも、スタックを管理アカウントにデプロイしません。
+ StackSet は、組織全体 (すべてのアカウントを含む) または指定した OU をターゲットにすることができます。StackSet が親 OU をターゲットにするときは、子 OU も自動的にターゲットになります。デフォルトで、StackSet が特定の OU をターゲットにする場合は、それらの OU 内にあるすべてのアカウントもターゲットになります。ただし、アカウントフィルターオプションを使用して特定のアカウントをターゲットにすることはできます。
+ 複数の StackSets で同じ組織または OU をターゲットにすることができます。
+ 組織外のアカウントをターゲットにすることはできません。
+ StackSet にデプロイする認可は、管理アカウントへのサインインに使用される、IAM プリンシパル (ユーザー、ロール、グループ) に割り当てられた許可に応じて異なります。組織にデプロイする許可を付与する IAM ポリシーの例については、「[リージョンとリソースタイプに基づいてスタックセットのオペレーションを制限する](security_iam_id-based-policy-examples.md#resource-level-permissions-service-managed-stack-set)」を参照してください。
+ 委任管理者は、組織内の任意のアカウントにデプロイするための完全な許可を持っています。管理アカウントは、特定の OU や StackSet オペレーションにデプロイする委任管理者の許可を制限できません。
+ 自動デプロイ設定は StackSet レベルで適用されます。OU、アカウント、リージョンを選択して自動デプロイを調整することはできません。
+ サービスマネージド型の許可を使用する StackSet は、マクロまたは変換が含まれるネストされたスタックやテンプレートをサポートしません。

## サービスマネージド型のアクセス許可を持つ StackSet の作成 (コンソール)
<a name="stacksets-orgs-associate-stackset-with-org-console"></a>

**StackSet を作成するには**

1. AWS マネジメントコンソール にサインインし、CloudFormation コンソール ([https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)) を開きます。

1. 画面の上部のナビゲーションバーで、StackSet を管理する AWS リージョン を選択します。

1. ナビゲーションペインから [**StackSets**] を選択します。

1. [**StackSets**] ページの上部から [**StackSets の作成**] を選択します。

1. **[アクセス権限]** で、**[Service-managed permissions (サービスマネージド型のアクセス許可)]** を選択します。
**注記**  
AWS Organizations との信頼されたアクセスが無効になっている場合は、バナーが表示されます。サービスマネージド型のアクセス許可を持つ StackSet を作成または更新するには、信頼されたアクセスが必要です。組織の管理カウントの管理者のみが、[AWS Organizations を使用して StackSets のための信頼されたアクセスをアクティブ化する](stacksets-orgs-activate-trusted-access.md) のアクセス許可を持ちます。

1. [**前提条件 − テンプレートの準備**] で、[**テンプレートの準備完了**] を選択します。

1. [**Specify template (テンプレートの指定)**] で、スタックテンプレートを含む S3 バケットの URL を指定するか、スタックテンプレートファイルをアップロードするかを選択します。その後、**[Next]** を選択します。

1. **[StackSet の詳細を指定]** ページで、StackSet の名前を指定し、パラメータを指定して、**[次へ]** を選択します。

1. [**StackSet オプションの設定**] ページの [**タグ**] で、スタックのリソースに適用するタグを指定します。AWS でのタグの使用方法に関する詳細については、*AWS Billing and Cost Management ユーザーガイド*の「[AWS コスト配分タグを使用してコストを整理および追跡する](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)」を参照してください。

1. **[実行設定]** で、**[アクティブ]** を選択して CloudFormation の最適化されたオペレーション処理を有効にします。
   + 競合しないオペレーションは、デプロイ時間を短縮するために同時に実行されます。
   + 競合するオペレーションは自動的にキューに入れられ、リクエストされた順序で処理されます。

   オペレーションが実行中またはキューに入れられている間、CloudFormation ではオペレーションが競合しない場合でもすべての受信オペレーションがキューに入ります。この間は実行設定を変更できません。

1. テンプレートに IAM リソースが含まれる場合は、[**機能**] で[**I acknowledge that this template may create IAM resources (このテンプレートが IAM リソースを作成する可能性を認識しています)**] を選択して、テンプレート内の IAM リソースを使用することを指定します。詳細については、「[CloudFormation テンプレートでの IAM リソースの承認](control-access-with-iam.md#using-iam-capabilities)」を参照してください。

1. [**次へ**] を選択して続行し、信頼されたアクセスがまだアクティブ化になっていない場合はアクティブ化します。

1. [**デプロイオプションの設定**]ページの[**デプロイターゲット**] で、次のいずれかを実行します。
   + 組織内のすべてのアカウントにデプロイするには、[**Deploy to organization (組織にデプロイ)**] を選択します。
   + 特定の OU のすべてのアカウントにデプロイするには、[**Deploy to organizational units (OUs) (組織単位 (OU) にデプロイ)**] を選択します。[**Add an OU (OU の追加)**] を選択し、テキストボックスにターゲット OU ID を貼り付けます。新しいターゲット OU ごとに繰り返します。

   **[組織単位 (OU) へのデプロイ]** を選択した場合、**[アカウントフィルタータイプ]** で、次のいずれかのオプションを選択し、アカウント番号を指定することで、デプロイターゲットを特定の個々のアカウントに設定できます。
   + **[なし]** (デフォルト) – 指定した OU 内のすべてのアカウントにスタックをデプロイします。
   + **[共通集合]** – 選択した OU 内の特定の個々のアカウントにスタックをデプロイします。
   + **[差異]** – 特定のアカウントを除く、選択した OU 内のすべてのアカウントにスタックをデプロイします。
   + **[和集合]** – 指定した OU と追加の個々のアカウントにスタックをデプロイします。

1. **[自動デプロイ]** で、今後ターゲットの組織または OU に追加されるアカウントに自動デプロイを行うかどうかを選択します。詳細については、「[AWS Organizations で StackSets の自動デプロイを有効または無効にする](stacksets-orgs-manage-auto-deployment.md)」を参照してください。

1. 自動デプロイを有効にした場合、[**Account removal behavior (アカウントの削除の動作)**] で、ターゲットの組織または OU からアカウントを削除するときに、スタックリソースを保持するか削除するかを選択します。
**注記**  
**[スタックを保持]** を選択すると、スタックは StackSet から削除されますが、スタックとそれに関連付けられたリソースは保持されます。リソースは現在の状態のままですが、StackSet には含まれなくなります。

1. **[リージョンの指定]** で、スタックをデプロイするリージョンを選択します。

1. **[デプロイオプション]** で、次の操作を行います。
   + **[同時アカウントの最大数]** で、同時に処理されるアカウントの数を指定します。
   + **[耐障害性]** には、リージョンごとに許可されるアカウント障害の最大数を指定します。この制限に達すると、オペレーションは停止し、他のリージョンには進みません。
   + **[リージョンの同時実行]** で、リージョンの処理方法を選択します。**[順次]** (一度に 1 つのリージョン) または **[並列]** (複数のリージョンを同時に) を選択できます。
   + **[同時実行モード]** で、オペレーションの実行中に同時実行がどのように動作するかを選択します。
     + **[厳格な耐障害性]** – 障害発生時の同時実行レベルを下げ、**[耐障害性]** の値を \$11 の範囲内にとどめます。
     + **[ソフトな障害耐性]** – 障害に関係なく、指定された同時実行レベル (**[同時アカウントの最大数]** の値) を維持します。
   + StackSet の**依存関係**では、依存する StackSet ARN を追加して、最大 10 個以内で依存関係を維持します。詳細については、「[AWS Organizations で StackSets の自動デプロイを有効または無効にする](stacksets-orgs-manage-auto-deployment.md)」を参照してください。

1. **[次へ]** を選択して続行します。

1. **[レビュー]** ページで、StackSet が正しいリージョンに正しいアカウントをデプロイすることを確認し、**[StackSet の作成]** を選択します。

   [**StackSet の詳細**] ページが開きます。StackSet 内のスタックの作成の進行状況とステータスを表示できます。

## サービスマネージド型のアクセス許可を持つ StackSet 作成 (AWS CLI)
<a name="stacksets-orgs-associate-stackset-with-org-cli"></a>

このセクションの手順に従い、AWS CLI を使用して次の操作を実行します。
+ StackSet コンテナを作成します。
+ スタックインスタンスをデプロイします。

**注記**  
委任管理者として操作する場合は、コマンドに `--call-as DELEGATED_ADMIN` を含める必要があります。

------
#### [ Deploy to your organization ]

**StackSet を作成するには**

1. [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-set.html) コマンドを使用して、`my-stackset` という名前の新しい StackSet を作成します。次の例では、S3 バケットに保存されているテンプレートを使用し、自動デプロイを有効にして、アカウントが削除されたときにスタックを保持します。詳細については、「[AWS Organizations で StackSets の自動デプロイを有効または無効にする](stacksets-orgs-manage-auto-deployment.md)」を参照してください。

   ```
   aws cloudformation create-stack-set \
     --stack-set-name my-stackset \
     --template-url https://s3.region-code.amazonaws.com/amzn-s3-demo-bucket/MyApp.template \
     --permission-model SERVICE_MANAGED \
     --auto-deployment Enabled=true,RetainStacksOnAccountRemoval=true,DependsOn=ARN1,ARN2
   ```

1. [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-sets.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-sets.html) コマンドを使用して、StackSet が作成されたことを確認します。新しい StackSet が結果に表示されます。

   ```
   aws cloudformation list-stack-sets
   ```
   + メンバーアカウントにサインインしているときに `--call-as` オプションを `DELEGATED_ADMIN` に設定した場合、**list-stack-sets** は組織の管理アカウント内のサービスマネージド型のアクセス許可を持つすべての StackSets を返します。
   + AWS アカウント にサインインしているときに `--call-as` オプションを `SELF` に設定した場合、**list-stack-sets** は AWS アカウント 内のすべてのセルフマネージド型の StackSets を返します。
   + 組織の管理アカウントにサインインしているときに `--call-as` オプションを `SELF` に設定した場合、**list-stack-sets** は組織の管理アカウント内のすべての StackSets を返します。

1. [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html) コマンドを使用して、StackSet にスタックを追加します。`--deployment-targets` オプションには、組織内のすべてのアカウントにデプロイする組織のルート ID を指定します。

   `--operation-preferences` オプションを使用して、同時アカウント処理およびその他のデプロイ設定を設定します。この例では、カウントベースの設定を使用します。`MaxConcurrentCount` は `FailureToleranceCount` \$1 1 を超えることはできません。パーセンテージベースの設定の場合は、代わりに `FailureTolerancePercentage` または `MaxConcurrentPercentage` を使用します。

   ```
   aws cloudformation create-stack-instances --stack-set-name my-stackset \
     --deployment-targets OrganizationalUnitIds=r-a1b2c3d4e5 \
     --regions us-west-2 us-east-1 \
     --operation-preferences MaxConcurrentCount=1,FailureToleranceCount=0
   ```

   詳細については、「*AWS CloudFormation API リファレンス*」の「[CreateStackInstances](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStackInstances.html)」を参照してください。

1. **create-stack-instances** 出力の一部として返された `operation-id` を使用して、次の [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html) コマンドを使用し、スタックが正常に作成されたことを確認します。

   ```
   aws cloudformation describe-stack-set-operation \
     --stack-set-name my-stackset \
     --operation-id operation_ID
   ```

------
#### [ Deploy to organizational units (OUs) ]

**StackSet を作成するには**

1. [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-set.html) コマンドを使用して、`my-stackset` という名前の新しい StackSet を作成します。次の例では、S3 バケットに保存されているテンプレートを使用し、`KeyPairName` に値 `TestKey` を設定するパラメータが含まれています

   ```
   aws cloudformation create-stack-set \
     --stack-set-name my-stackset \
     --template-url https://s3.region-code.amazonaws.com/amzn-s3-demo-bucket/MyApp.template \
     --permission-model SERVICE_MANAGED \
     --parameters ParameterKey=KeyPairName,ParameterValue=TestKey
   ```

1. [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-sets.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-sets.html) コマンドを使用して、StackSet が作成されたことを確認します。新しい StackSet が結果に表示されます。

   ```
   aws cloudformation list-stack-sets
   ```
   + メンバーアカウントにサインインしているときに `--call-as` オプションを `DELEGATED_ADMIN` に設定した場合、**list-stack-sets** は組織の管理アカウント内のサービスマネージド型のアクセス許可を持つすべての StackSets を返します。
   + AWS アカウント にサインインしているときに `--call-as` オプションを `SELF` に設定した場合、**list-stack-sets** は AWS アカウント 内のすべてのセルフマネージド型の StackSets を返します。
   + 組織の管理アカウントにサインインしているときに `--call-as` オプションを `SELF` に設定した場合、**list-stack-sets** は組織の管理アカウント内のすべての StackSets を返します。

1. [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html) コマンドを使用して、StackSet にスタックを追加します。`--deployment-targets` オプションで、デプロイ先の OU ID を指定します。

   `--operation-preferences` オプションを使用して、同時アカウント処理およびその他のデプロイ設定を設定します。この例では、カウントベースの設定を使用します。`MaxConcurrentCount` は `FailureToleranceCount` \$1 1 を超えることはできません。パーセンテージベースの設定の場合は、代わりに `FailureTolerancePercentage` または `MaxConcurrentPercentage` を使用します。

   ```
   aws cloudformation create-stack-instances --stack-set-name my-stackset \
     --deployment-targets OrganizationalUnitIds=ou-rcuk-1x5j1lwo,ou-rcuk-slr5lh0a \
     --regions us-west-2 us-east-1 \
     --operation-preferences MaxConcurrentCount=1,FailureToleranceCount=0
   ```

   詳細については、「*AWS CloudFormation API リファレンス*」の「[CreateStackInstances](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStackInstances.html)」を参照してください。

1. **create-stack-instances** 出力の一部として返された `operation-id` を使用して、次の [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html) コマンドを使用し、スタックが正常に作成されたことを確認します。

   ```
   aws cloudformation describe-stack-set-operation \
     --stack-set-name my-stackset \
     --operation-id operation_ID
   ```

------
#### [ Deploy to specific accounts in OUs ]

特定の組織単位 (OU) をターゲットにし、アカウントフィルタリングを使用して、スタックデプロイを受信するアカウントを正確に制御できます。デフォルトでは、アカウントフィルタリングが指定されていない場合、スタックは指定された OU 内のすべてのアカウントにデプロイされます。

AWS CLI で、`--deployment-targets` オプションを使用してアカウントフィルタリングを指定します。詳細については、「[DeploymentTargets](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeploymentTargets.html)」を参照してください。

**create-stack-set** コマンドを使用して StackSet コンテナを作成したら、次のいずれかの例を使用してスタックを特定のアカウントにデプロイします。

**OU 内の特定のアカウントをターゲットにする**  
次の例では、OU1 内のアカウント A1 と A2 にのみスタックをデプロイします。

```
aws cloudformation create-stack-instances --stack-set-name my-stackset \
  --deployment-targets OrganizationalUnitIds=OU1,Accounts=A1,A2,AccountFilterType=INTERSECTION \
  --regions us-west-2 us-east-1
```

**OU からアカウントを除外する**  
次の例では、アカウント A1 と A2 を除く OU1 内のすべてのアカウントにスタックをデプロイします。

```
aws cloudformation create-stack-instances --stack-set-name my-stackset \
  --deployment-targets OrganizationalUnitIds=OU1,Accounts=A1,A2,AccountFilterType=DIFFERENCE \
  --regions us-west-2 us-east-1
```

------

# AWS Organizations で StackSets の自動デプロイを有効または無効にする
<a name="stacksets-orgs-manage-auto-deployment"></a>

CloudFormation は、新しい AWS Organizations アカウントがターゲットの組織または組織単位 (OU) に追加されると、そのアカウントに追加のスタックを自動的にデプロイします。自動デプロイを有効にして、アカウントがターゲット OU から削除されたときにスタックおよび関連するリソースを削除するか保持するかを選択することができます。これらの設定は、サービスマネージド型のアクセス許可を使用する StackSets ではいつでも変更できます。

## 自動デプロイの仕組み
<a name="stacksets-orgs-auto-deployment-example"></a>

自動デプロイを有効にすると、アカウントがターゲット組織または OU に追加されたとき、ターゲット組織または OU から削除されたとき、ターゲット OU 間で移動したときに、トリガーされます。

例えば、`us-east-1` リージョンの `OU1` をターゲットにする `StackSet1` と、`us-east-1` リージョンの `OU2` をターゲットにする `StackSet2` がある場合、`OU1` には `AccountA` が含まれます。

自動デプロイを有効にして `AccountA` を `OU1` から `OU2` に移動すると、CloudFormation は自動的に削除オペレーションを実行して `StackSet1` スタックを `AccountA` から削除し、`StackSet2` スタックを `AccountA` に追加する作成オペレーションをキューに入れます。

## 考慮事項
<a name="stacksets-orgs-auto-deployment-considerations"></a>

自動デプロイを使用する際の考慮事項を次に示します。
+ 自動デプロイ機能は StackSet レベルで有効になります。OU、アカウント、リージョンを選択して自動デプロイを調整することはできません。
+ 上書きされたパラメータ値は、ターゲット OU とその子 OU に現在存在するアカウントにのみ適用されます。今後ターゲット OU とその子 OU に追加されるアカウントでは、StackSet のデフォルト値が使用され、オーバーライドされた値は使用されません。
+ 自動デプロイでは、アカウントレベルのターゲティングフィルターは考慮しません。特定のアカウントをターゲットにして自動デプロイを有効にすると、StackSet はデプロイを継続して、デプロイされた組織内の新しく追加されたアカウントにデプロイします。新しく追加されたアカウントへのデプロイを防ぐには、自動デプロイを無効にします。
+ 依存関係管理: StackSet ごとに最大 10 個の依存関係を定義し、アカウントごとに最大 100 個の依存関係にします。例えば、それぞれ 5 つの依存関係を持つ 5 つの StackSets がある場合、100 個の依存関係制限に向けてカウントしている 25 の依存関係があります。[Service Quotas コンソール](https://console.aws.amazon.com/servicequotas/home)を使用して制限の引き上げをリクエストできます。依存関係は、StackSets が削除されるか、組織が非アクティブ化されると削除されます。
+ 自動デプロイを使用する場合は、マネージド実行を有効にすることをお勧めします。マネージド実行では、複数のターゲットアカウントでの自動デプロイオペレーションを StackSet 内で同時に実行できるため、特に大規模な組織では処理速度が向上します。

## 自動デプロイを有効または無効にする (コンソール）
<a name="stacksets-orgs-manage-auto-deployment-console"></a>

**自動デプロイを有効または無効にするには**

1. AWS マネジメントコンソール にサインインし、CloudFormation コンソール ([https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)) を開きます。

1. 画面の上部のナビゲーションバーで、StackSet を作成した AWS リージョン を選択します。

1. ナビゲーションペインから [**StackSets**] を選択します。

1. **[StackSets]** ページで、更新する StackSet の名前の横にあるオプションを選択します。

1. 右上の **[アクション]** メニューで **[自動デプロイを編集]** を選択します。

1. 開いたダイアログボックスで、次の操作を行います。

   1. **[自動デプロイ]** で、**[アクティブ化済み]** または **[非アクティブ化済み]** を選択します。

   1. **[アカウント削除の動作]** で、**[スタックを削除]** または **[スタックを保持]** を選択します。保持されたリソースは現在の状態のままですが、StackSet には含まれなくなります。

   1. StackSet の**依存関係**では、依存する StackSet ARN を追加して、最大 10 個以内で依存関係を維持します。

1. **[保存]** を選択します。

## 自動デプロイを有効または無効にする (AWS CLI）
<a name="stacksets-orgs-manage-auto-deployment-cli"></a>

**自動デプロイを有効または無効にするには**

1. `--auto-deployment` オプションで [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-set.html) コマンドを使用します。

   次のコマンドを実行すると、自動デプロイが有効になります。

   ```
   aws cloudformation update-stack-set --stack-set-name my-stackset \
     --use-previous-template --auto-deployment Enabled=true,RetainStacksOnAccountRemoval=true,DependsOn=ARN1,ARN2
   ```

   自動デプロイを無効にしたい場合は、次の例のように、`Enabled=false` を `--auto-deployment` オプションの値として指定します。

   ```
   aws cloudformation update-stack-set --stack-set-name my-stackset \
     --use-previous-template --auto-deployment Enabled=false
   ```

1. **update-stack-set** 出力の一部として返されたオペレーション ID を使用して、[https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html) を実行し、StackSet が正常に更新されたことを確認します。

   ```
   aws cloudformation describe-stack-set-operation --operation-id operation_ID
   ```

# CloudFormation StackSets を更新する
<a name="stacksets-update"></a>

CloudFormation コンソールまたは AWS CLI を使用して StackSet を更新できます。

StackSet からアカウントとリージョンを追加および削除するには、「[StackSets にスタックを追加する](stackinstances-create.md)」および「[StackSets からスタックを削除する](stackinstances-delete.md)」を参照してください。スタックのパラメータ値を上書きするには、「[スタックのパラメータを上書きする](stackinstances-override.md)」を参照してください。

**Topics**
+ [StackSet を更新する (コンソール)](#stacksets-update-console)
+ [StackSet を更新する (AWS CLI)](#stacksets-update-cli)

## StackSet を更新する (コンソール)
<a name="stacksets-update-console"></a>

**StackSet を更新するには**

1. AWS マネジメントコンソール にサインインし、CloudFormation コンソール ([https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)) を開きます。

1. 画面の上部のナビゲーションバーで、StackSet を作成した AWS リージョン を選択します。

1. ナビゲーションペインから [**StackSets**] を選択します。

1. **[StackSets]** ページで、更新する StackSet を選択します。

1. StackSet を選択した状態で、**[アクション]** メニューから **[StackSet の詳細を編集]** を選択します。

1. [**テンプレートの選択**] ページで、必要に応じて[**アクセス許可**] セクションを更新するか、次のステップに進みます。

1. **前提条件 - テンプレートを準備する**には、[**現在のテンプレートを使用する**] を選択して現在のテンプレートを使用するか、[**現在のテンプレートを置き換える**] を選択して別のテンプレートに S3 URL を指定するか、新しいテンプレートをアップロードします。

1. [**次へ**] を選択します。

1. **[StackSet の詳細を指定]** ページの **[StackSet の説明]** で、必要に応じて StackSet の説明を更新します。

1. **パラメータ** の場合、必要に応じてパラメータ値を更新します。

1. [**次へ**] を選択します。

1. [**StackSet オプションの設定**] ページの [**タグ**] で、タグを必要に応じて変更します。タグを追加、更新、または削除できます。AWS でのタグの使用方法に関する詳細については、*AWS Billing and Cost Management ユーザーガイド*の「[AWS コスト配分タグを使用してコストを整理および追跡する](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)」を参照してください。

1. [**実行設定**] では、必要に応じて実行設定を更新できます。
**注記**  
オペレーションが実行中またはキューに入っている場合、実行設定を変更することはできません。

1. テンプレートに IAM リソースが含まれる場合は、[**機能**] で[**I acknowledge that this template may create IAM resources (このテンプレートが IAM リソースを作成する可能性を認識しています)**] を選択して、テンプレート内の IAM リソースを使用することを指定します。詳細については、「[CloudFormation テンプレートでの IAM リソースの承認](control-access-with-iam.md#using-iam-capabilities)」を参照してください。

1. **[Next]** (次へ) を選択します。

1. [**デプロイオプションの設定**] ページで、更新用のアカウントとリージョンを指定します。

   CloudFormation は、リージョンのデプロイ失敗が指定された耐障害性を超えない限り、最初のリージョン内の指定されたアカウントにスタック更新をデプロイし、次のリージョンに移行し、それが繰り返されます。

   1. [セルフマネージド型のアクセス許可] [**アカウント**] の[**Deployment locations (デプロイ先)**] で [**Deploy stacks in accounts (スタックをアカウントにデプロイ)**] を選択します。StackSet の作成に使用したターゲットアカウント ID をテキストボックスに貼り付け、複数の数字をカンマで区切ります。

      [サービスマネージド型のアクセス許可] 次のいずれかを実行します。
      + [**Deploy to organizational units (OUs) (組織単位 (OU) にデプロイ)**] を選択します。StackSet の作成に使用したターゲット OU を入力します。
      + [**Deploy to accounts (アカウントにデプロイ)**] を選択します。StackSet の作成に使用したターゲット OU ID またはアカウント ID を貼り付けます。

   1. [**Specify regions (リージョンの指定)**] では、CloudFormation で更新をデプロイする順序を指定します。

   1. **[デプロイオプション]** で、次の操作を行います。
      + **[同時アカウントの最大数]** で、同時に処理されるアカウントの数を指定します。
      + **[耐障害性]** には、リージョンごとに許可されるアカウント障害の最大数を指定します。この制限に達すると、オペレーションは停止し、他のリージョンには進みません。
      + **[リージョンの同時実行]** で、リージョンの処理方法を選択します。**[順次]** (一度に 1 つのリージョン) または **[並列]** (複数のリージョンを同時に) を選択できます。
      + **[同時実行モード]** で、オペレーションの実行中に同時実行がどのように動作するかを選択します。
        + **[厳格な耐障害性]** – 障害発生時の同時実行レベルを下げ、**[耐障害性]** の値を \$11 の範囲内にとどめます。
        + **[ソフトな障害耐性]** – 障害に関係なく、指定された同時実行レベル (**[同時アカウントの最大数]** の値) を維持します。
      + [サービスマネージドアクセス許可] StackSet の**依存関係**では、依存する StackSet ARN を追加して、最大 10 個以内で依存関係を維持します。詳細については、「[AWS Organizations で StackSets の自動デプロイを有効または無効にする](stacksets-orgs-manage-auto-deployment.md)」を参照してください。

   1. [**次へ**] を選択して続行します。

1. **[確認]** ページで選択内容を確認します。変更するには、関連セクションで [**編集**] をクリックします。

1. 続行する準備ができたら、[**送信**] を選択します。

   CloudFormation によって StackSet への更新の適用が開始され、StackSet 詳細ページの **[オペレーション]** タブが表示されます。[**オペレーション**] タブで更新オペレーションの進捗と状況を確認できます。

## StackSet を更新する (AWS CLI)
<a name="stacksets-update-cli"></a>

**注記**  
委任管理者として操作する場合は、コマンドに `--call-as DELEGATED_ADMIN` を含める必要があります。

1. 

**StackSet を更新するには**

   [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-set.html) コマンドを実行して、StackSet を変更します。

   次の例では、`--parameters` オプションを使用して StackSet を更新します。特に、送信チャネル設定のデフォルトスナップショット送信頻度を、[`TwentyFour_Hours`] から [`Twelve_Hours`] に変更します。現在のテンプレートをまだ使用しているため、`--use-previous-template` オプションを追加します。

   `--operation-preferences` オプションを使用して、同時アカウント処理およびその他のデプロイ設定を設定します。これらの例では、カウントベースの設定を使用します。`MaxConcurrentCount` は `FailureToleranceCount` \$1 1 を超えることはできません。パーセンテージベースの設定の場合は、代わりに `FailureTolerancePercentage` または `MaxConcurrentPercentage` を使用します。

   [セルフマネージド型のアクセス許可] `--accounts` オプションでは、更新のターゲットにするアカウント ID を指定します。

   ```
   aws cloudformation update-stack-set --stack-set-name my-stackset \
     --use-previous-template \
     --parameters ParameterKey=MaximumExecutionFrequency,ParameterValue=Twelve_Hours \
     --accounts account_ID_1 account_ID_2 \
     --regions us-west-2 us-east-1 \
     --operation-preferences MaxConcurrentCount=1,FailureToleranceCount=0
   ```

   [サービスマネージド型のアクセス許可] `--deployment-targets` オプションでは、更新のターゲットにする組織ルート ID または 組織単位 (OU) ID を指定します。

   ```
   aws cloudformation update-stack-set --stack-set-name my-stackset \
     --use-previous-template \
     --parameters ParameterKey=MaximumExecutionFrequency,ParameterValue=Twelve_Hours \
     --deployment-targets OrganizationalUnitIds=ou-rcuk-1x5j1lwo,ou-rcuk-slr5lh0a \
     --regions us-west-2 us-east-1 \
     --operation-preferences MaxConcurrentCount=1,FailureToleranceCount=0
   ```

   詳細については、*AWS CloudFormation API リファレンス*の「[UpdateStackSet](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html)」を参照してください。

1. **describe-stack-set-operation** コマンドを実行して更新オペレーションのステータスおよび結果を表示し、StackSet が正常に更新されたことを確認します。`--operation-id` には、**update-stack-set** コマンドに返されたオペレーション ID を使用します。

   ```
   aws cloudformation describe-stack-set-operation \
     --operation-id operation_ID
   ```

# CloudFormation StackSets にスタックを追加する
<a name="stackinstances-create"></a>

StackSet の作成時に、StackSet のスタックを作成できます。CloudFormation では、StackSet の作成後はいつでも、追加のアカウントやリージョン用に、さらにスタックを追加することもできます。CloudFormation コンソールまたは AWS CLI を使用してスタックを追加できます。

**Topics**
+ [StackSet にスタックを追加する (コンソール)](#stackinstances-create-console)
+ [スタックを StackSet に追加する (AWS CLI)](#stackinstances-create-cli)

## StackSet にスタックを追加する (コンソール)
<a name="stackinstances-create-console"></a>

**スタックを StackSet に追加するには**

1. AWS マネジメントコンソール にサインインし、CloudFormation コンソール ([https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)) を開きます。

1. 画面の上部のナビゲーションバーで、StackSet を作成した AWS リージョン を選択します。

1. ナビゲーションペインから [**StackSets**] を選択します。[StackSets] ページで、作成した StackSet を選択します。

1. StackSet を選択した状態で、**[アクション]** メニューから **[StackSet にスタックを追加]** を選択します。

1. [**デプロイオプションの設定**] ページで、以下を実行します。

   1. **[StackSet にスタックを追加]** で、**[新しいスタックのデプロイ]** を選択します。

   1. 次に、StackSet のアクセス許可設定に応じて、以下を実行します。
      + [セルフマネージド型のアクセス許可] [**アカウント**] の[**Deployment locations (デプロイ先)**] で [**Deploy stacks in accounts (スタックをアカウントにデプロイ)**] を選択します。ターゲットアカウント番号をテキストボックスに貼り付け、複数の数字をカンマで区切ります。
      + [サービスマネージド型のアクセス許可] [**デプロイターゲット**] で次のいずれかを実行します。
        + 組織内のすべてのアカウントにデプロイするには、[**Deploy to organization (組織にデプロイ)**] を選択します。
        + 特定の OU のすべてのアカウントにデプロイするには、[**Deploy to organizational units (OUs) (組織単位 (OU) にデプロイ)**] を選択します。[**Add another OU (別の OU の追加)**] を選択し、テキストボックスにターゲット OU ID を貼り付けます。新しいターゲット OU ごとに繰り返します。CloudFormation は選択したターゲットの子 OU もターゲットにします。
**注記**  
StackSet が既にターゲットにしている OU を追加すると、CloudFormation は、StackSet でスタックを持たない OU 内のアカウント (例えば、StackSet が作成され、自動デプロイが無効になった後に OU に追加されたアカウントなど) に新しいスタックを作成します。

   1. [**リージョンを指定**] では、前のステップで指定したターゲットアカウントにデプロイする AWS リージョン を指定します。デフォルトでは、CloudFormation は、リージョンのデプロイ失敗が指定された耐障害性を超えない限り、最初のリージョン内の指定されたアカウントにスタックをデプロイし、次のリージョンに移行し、それが繰り返されます。

   1. **[デプロイオプション]** で、次の操作を行います。
      + **[同時アカウントの最大数]** で、同時に処理されるアカウントの数を指定します。
      + **[耐障害性]** には、リージョンごとに許可されるアカウント障害の最大数を指定します。この制限に達すると、オペレーションは停止し、他のリージョンには進みません。
      + **[リージョンの同時実行]** で、リージョンの処理方法を選択します。**[順次]** (一度に 1 つのリージョン) または **[並列]** (複数のリージョンを同時に) を選択できます。
      + **[同時実行モード]** で、オペレーションの実行中に同時実行がどのように動作するかを選択します。
        + **[厳格な耐障害性]** – 障害発生時の同時実行レベルを下げ、**[耐障害性]** の値を \$11 の範囲内にとどめます。
        + **[ソフトな障害耐性]** – 障害に関係なく、指定された同時実行レベル (**[同時アカウントの最大数]** の値) を維持します。

   1. [**次へ**] を選択します。

1. [**Set Overrides (上書きを設定)**] ページでは、プロパティ値は指定されたとおりにしておきます。作成しているスタックではプロパティ値を上書きすることはありません。[**次へ**] を選択します。

1. **[確認]** ページで選択内容を確認します。変更するには、関連セクションで [**編集**] をクリックします。

1. 続行する準備ができたら、[**送信**] を選択します。

   CloudFormation でスタックの作成が開始されます。StackSet 内のスタック作成の進捗と状況は、**[送信]** を選択した際に開く StackSet 詳細ページで確認できます。完了すると、新しいスタックが **[スタックインスタンス]** タブに一覧表示されます。

## スタックを StackSet に追加する (AWS CLI)
<a name="stackinstances-create-cli"></a>

**注記**  
委任管理者として操作する場合は、コマンドに `--call-as DELEGATED_ADMIN` を含める必要があります。

**セルフマネージド型のアクセス許可を持つ StackSet にスタックを追加するには**  
**create-stack-instances** CLI コマンドを使用します。`--accounts` オプションでは、スタックを作成するアカウント ID を指定します。

```
aws cloudformation create-stack-instances --stack-set-name my-stackset \
  --accounts account_id --regions eu-west-1 us-west-2
```

**サービスマネージド型のアクセス許可を持つ StackSet にスタックを追加するには**  
**create-stack-instances** CLI コマンドを使用します。`--deployment-targets` オプションでは、スタックを作成する組織 (ルート) ID または OU ID を指定します。特定のアカウントをターゲットとするコマンドの例については、「[サービスマネージド型のアクセス許可を持つ StackSet 作成 (AWS CLI)](stacksets-orgs-associate-stackset-with-org.md#stacksets-orgs-associate-stackset-with-org-cli)」を参照してください。

```
aws cloudformation create-stack-instances --stack-set-name my-stackset \
  --deployment-targets OrganizationalUnitIds=ou-rcuk-r1qi0wl7 --regions eu-west-1 us-west-2
```

**注記**  
StackSet が既にターゲットにしている OU を追加すると、CloudFormation は、StackSet でスタックを持たない OU 内のアカウント (例えば、StackSet が作成され、自動デプロイが無効になった後に OU に追加されたアカウントなど) に新しいスタックを作成します。

# CloudFormation StackSet 内のスタックのパラメータ値を上書きする
<a name="stackinstances-override"></a>

場合によっては、特定のリージョンまたはアカウントのスタックのプロパティ値を、StackSet そのものに指定されたものとは異なる値にすることがあります。たとえば、アカウントが開発に使用されているか本稼働に使用されているかに基づいて、指定されたパラメータに異なる値を指定する場合を考えます。このような状況の場合、CloudFormation では、アカウントおよびリージョン別にスタックのパラメータ値を上書きできます。スタックを初めて作成する際に、テンプレートパラメータの値を上書きできます。また、既存のスタックのパラメータ値を上書きすることもできます。スタックで以前に上書きしたパラメータは、StackSet に指定されている値にのみ戻すことができます。

パラメータ値の上書きは、選択したアカウントとリージョンのスタックに適用されます。StackSet の更新中、スタックで上書きされたすべてのパラメータ値は更新されず、上書きされた値を保持します。

StackSet で指定されたパラメータ*値*のみを上書きできます。パラメータそのものを追加または削除するには、StackSet のテンプレートを更新する必要があります。StackSet テンプレートにパラメータを追加する場合、スタックのパラメータ値を上書きするには、まずすべてのスタックを StackSet に指定された新しいパラメータと値で更新する必要があります。すべてのスタックが新しいパラメータに更新されたら、個々のスタックのパラメータ値を必要に応じて上書きできます。

スタックの作成時に StackSet のパラメータ値を上書きする方法については、「[StackSets にスタックを追加する](stackinstances-create.md)」を参照してください。

**Topics**
+ [スタックのパラメータを上書きする (コンソール)](#stackinstances-override-console)
+ [スタックのパラメータを上書きする (AWS CLI)](#stackinstances-override-cli)

## スタックのパラメータを上書きする (コンソール)
<a name="stackinstances-override-console"></a>

**特定のスタックのパラメータを上書きするには**

1. AWS マネジメントコンソール にサインインし、CloudFormation コンソール ([https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)) を開きます。

1. 画面の上部のナビゲーションバーで、StackSet を作成した AWS リージョン を選択します。

1. ナビゲーションペインから [**StackSets**] を選択します。[StackSets] ページで、StackSet を選択します。

1. StackSet を選択した状態で、**[アクション]** メニューから **[StackSet パラメータを上書き]** を選択します。

1. **[デプロイオプションの設定]** ページで、パラメータを上書きするスタックのアカウントとリージョンを指定します。

   デフォルトでは、CloudFormation は、リージョンのデプロイ失敗が指定された耐障害性を超えないという条件で、最初のリージョン内の指定されたアカウントにスタックをデプロイし、次のリージョンに移行し、それが繰り返されます。

   1. [セルフマネージド型のアクセス許可] [**Deployment locations (デプロイ先)**] で [**Deploy stacks in accounts (スタックをアカウントにデプロイ)**] を選択します。StackSet の作成に使用した一部またはすべてのターゲットアカウント ID を貼り付けます。

      [サービスマネージド型のアクセス許可] 次のいずれかを実行します。
      + [**Deploy to organizational units (OUs) (組織単位 (OU) にデプロイ)**] を選択します。StackSet の作成に使用したターゲット OU を 1 つ以上入力します。上書きされたパラメータ値は、ターゲット OU とその子 OU に現在存在するアカウントにのみ適用されます。今後ターゲット OU とその子 OU に追加されるアカウントでは、StackSet のデフォルト値が使用され、オーバーライドされた値は使用されません。
      + [**Deploy to accounts (アカウントにデプロイ)**] を選択します。StackSet の作成に使用した一部またはすべてのターゲット OU ID またはアカウント ID を貼り付けます。

   1. **[リージョンの指定]** で、この StackSet のスタックをデプロイしたリージョンを 1 つまたは複数追加します。

      複数のリージョンを追加すると、[**Specify regions (リージョンの指定)**] のリージョンの順序に従って、デプロイの順序が決まります。

   1. **[デプロイオプション]** で、次の操作を行います。
      + **[同時アカウントの最大数]** で、同時に処理されるアカウントの数を指定します。
      + **[耐障害性]** には、リージョンごとに許可されるアカウント障害の最大数を指定します。この制限に達すると、オペレーションは停止し、他のリージョンには進みません。
      + **[リージョンの同時実行]** で、リージョンの処理方法を選択します。**[順次]** (一度に 1 つのリージョン) または **[並列]** (複数のリージョンを同時に) を選択できます。
      + **[同時実行モード]** で、オペレーションの実行中に同時実行がどのように動作するかを選択します。
        + **[厳格な耐障害性]** – 障害発生時の同時実行レベルを下げ、**[耐障害性]** の値を \$11 の範囲内にとどめます。
        + **[ソフトな障害耐性]** – 障害に関係なく、指定された同時実行レベル (**[同時アカウントの最大数]** の値) を維持します。

   1. [**次へ**] を選択します。

1. [**Specify Overrides (上書きの指定)**] ページで、上書きするパラメータのチェックボックスをオンにし、[**Edit override value (上書き値の編集)**] メニューから [**Override StackSet value (StackSet 値の上書き)**] を選択します。

1. [**Override StackSet parameter values (StackSet パラメータ値の上書き)**] ページで、変更を加え、[**変更の保存**] を選択します。
**注記**  
上書きされたパラメータを、StackSet で指定された値を再度使用するように設定するには、すべてのパラメータを確認し、**[上書き値の編集]** メニューから **[StackSet 値に設定]** を選択します。これにより、スタックを更新すると、すべての上書きされた値が削除されます。

1. **[確認]** ページで選択内容を確認します。変更するには、関連セクションで [**編集**] をクリックします。

1. 続行する準備ができたら、[**送信**] を選択します。

   CloudFormation がスタックの更新を開始します。スタックの進捗状況とステータスは、**[送信]** を選択した際に開く StackSet 詳細ページで確認できます。

## スタックのパラメータを上書きする (AWS CLI)
<a name="stackinstances-override-cli"></a>

**注記**  
委任管理者として操作する場合は、コマンドに `--call-as DELEGATED_ADMIN` を含める必要があります。

**特定のスタックのパラメータを上書きするには**

1. [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-instances.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-instances.html) AWS CLI コマンドを使用し、`--parameter-overrides` オプションを指定します。

   [セルフマネージド型のアクセス許可] `--accounts` オプションでは、スタックのパラメータ値を上書きするアカウント ID を指定します。

   ```
   aws cloudformation update-stack-instances --stack-set-name my-stackset \
     --parameter-overrides ParameterKey=Subnets,ParameterValue=subnet-1baa3351\\,subnet-27b86940 \
     --accounts account_id --regions us-east-1
   ```

   [サービスマネージド型のアクセス許可] `--deployment-targets` オプションでは、スタックのパラメータ値を上書きする組織のルート ID、OU ID、または AWS Organizations アカウント ID を指定します。この例では、OU 内のすべてのアカウントのスタックのパラメータ値を `ou-rcuk-1x5j1lwo` ID で上書きします。

   上書きされたパラメータ値は、ターゲット OU とその子 OU に現在存在するアカウントにのみ適用されます。今後ターゲット OU とその子 OU に追加されるアカウントでは、StackSet のデフォルト値が使用され、上書きされた値は使用されません。

   ```
   aws cloudformation update-stack-instances --stack-set-name my-stackset \
     --parameter-overrides ParameterKey=Subnets,ParameterValue=subnet-1baa3351\\,subnet-27b86940 \
     --deployment-targets OrganizationalUnitIds=ou-rcuk-1x5j1lwo \
     --regions us-east-1
   ```

1. **describe-stack-set-operation** コマンドを実行して更新オペレーションのステータスおよび結果を表示し、スタックのパラメータ値が正常に上書きされたことを確認します。`--operation-id` には、**update-stack-instances** コマンドに返されたオペレーション ID を使用します。

   ```
   aws cloudformation describe-stack-set-operation --operation-id operation_ID
   ```

# CloudFormation StackSets からスタックを削除する
<a name="stackinstances-delete"></a>

CloudFormation コンソールまたは AWS CLI を使用して、StackSets からスタックを削除できます。

**Topics**
+ [StackSet からスタックを削除する (コンソール)](#stackinstances-delete-console)
+ [StackSet からスタックを削除する (AWS CLI)](#stackinstances-delete-cli)

**注記**  
最上位の組織単位 (OU) からスタックを削除すると、その OU は StackSet のターゲットとして削除されます。

## StackSet からスタックを削除する (コンソール)
<a name="stackinstances-delete-console"></a>

**スタックを削除するには**

1. AWS マネジメントコンソール にサインインし、CloudFormation コンソール ([https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)) を開きます。

1. 画面の上部のナビゲーションバーで、StackSet を作成した AWS リージョン を選択します。

1. ナビゲーションペインから [**StackSets**] を選択します。[StackSets] ページで、StackSet を選択します。

1. StackSet を選択した状態で、**[アクション]** メニューから **[StackSet からスタックを削除]** を選択します。

1. **[デプロイオプションの設定]** ページで、まずスタックを削除するアカウントとリージョンを選択します。

   1. [セルフマネージド型のアクセス許可] **[アカウント]** で、**[スタックをアカウントにデプロイ]** または **[スタックを組織単位にデプロイ]** を選択します。

      **[スタックをアカウントにデプロイ]** を選択した場合、ターゲットアカウント番号を (複数の数字はカンマで区切って) **[アカウント番号]** テキストボックスに貼り付けます。

      **[スタックを組織単位にデプロイ]** を選択した場合、**[組織番号]** テキストボックスにターゲット OU ID を貼り付けると、指定された組織の一部であるすべてのアカウントをターゲットにできます。

   1. [サービスマネージド型のアクセス許可] [**組織単位 (OU)**] では、ターゲット OU ID を指定します。
**重要**  
CloudFormation は、指定されたターゲット OU とその子 OU の両方からスタックを削除します。

      **[アカウントフィルタータイプ]** では、次のいずれかのオプションを選択し、アカウント番号を指定することで、スタックを削除するアカウントを絞り込むことができます。
      + **[なし]** (デフォルト) – 指定した OU 内のすべてのアカウントからスタックを削除します。
      + **[共通集合]** – 選択した OU 内の特定の個々のアカウントからのみスタックを削除します。
      + **[差異]** – 特定のアカウントを除く、選択した OU 内のすべてのアカウントからスタックを削除します。
      + **[和集合]** – 指定した OU と追加の個々のアカウントからスタックを削除します。

   1. **[リージョンの指定]** で、ターゲットアカウント内のスタックを削除するリージョンを選択します。

1. **[デプロイオプション]** で、次の操作を行います。
   + **[同時アカウントの最大数]** で、同時に処理されるアカウントの数を指定します。
   + **[耐障害性]** には、リージョンごとに許可されるアカウント障害の最大数を指定します。この制限に達すると、オペレーションは停止し、他のリージョンには進みません。
   + **[スタックを保持]** オプションを有効にすると、StackSet からスタックを削除するときに、スタックとそれに関連付けられたリソースが保存されます。リソースは現在の状態のままですが、StackSet には含まれなくなります。
   + **[リージョンの同時実行]** で、リージョンの処理方法を選択します。**[順次]** (一度に 1 つのリージョン) または **[並列]** (複数のリージョンを同時に) を選択できます。
   + **[同時実行モード]** で、オペレーションの実行中に同時実行がどのように動作するかを選択します。
     + **[厳格な耐障害性]** – 障害発生時の同時実行レベルを下げ、**[耐障害性]** の値を \$11 の範囲内にとどめます。
     + **[ソフトな障害耐性]** – 障害に関係なく、指定された同時実行レベル (**[同時アカウントの最大数]** の値) を維持します。

1. [**次へ**] を選択します。

1. **[確認]** ページで選択内容を確認します。変更するには、関連セクションで [**編集**] をクリックします。

1. StackSet からスタックを削除する準備ができたら、**[送信]** を選択します。

   スタックの削除が完了したら、StackSet の詳細ページの **[スタックインスタンス]** タブで、StackSet からスタックが削除されたことを確認できます。

## StackSet からスタックを削除する (AWS CLI)
<a name="stackinstances-delete-cli"></a>

**注記**  
委任管理者として操作する場合は、コマンドに `--call-as DELEGATED_ADMIN` を含める必要があります。

StackSet 名を指定した **delete-stack-instances** コマンドを使用します。

これらの例では、スタックを保持していないため、`--no-retain-stacks` オプションを使用します。スタックとそのリソースを保持する場合は、`--no-retain-stacks` ではなく `--retain-stacks` を使用します。

`--regions` で、スタックを削除する AWS リージョン (`us-west-2`、`us-east-1` など) を指定します。

`--operation-preferences` オプションを使用して、同時アカウント処理およびその他の設定を設定します。これらの例では、カウントベースの設定を使用します。`MaxConcurrentCount` は `FailureToleranceCount` \$1 1 を超えることはできません。パーセンテージベースの設定の場合は、代わりに `FailureTolerancePercentage` または `MaxConcurrentPercentage` を使用します。

**スタックを削除するには (セルフマネージド型のアクセス許可)**  
`--accounts` オプションでは、スタックを削除するアカウントの ID を指定します。

```
aws cloudformation delete-stack-instances --stack-set-name my-stackset \
  --accounts account_ID_1 account_ID_2 \
  --regions us-west-2 us-east-1 \
  --no-retain-stacks \
  --operation-preferences MaxConcurrentCount=1,FailureToleranceCount=0
```

**スタックを削除するには (サービスマネージド型のアクセス許可)**  
`--deployment-targets` では、スタックを削除する組織のルート ID または組織単位 (OU) ID を指定します。

**重要**  
CloudFormation は、指定されたターゲット OU とその子 OU の両方からスタックを削除します。

```
aws cloudformation delete-stack-instances --stack-set-name my-stackset \
  --deployment-targets OrganizationalUnitIds=ou-rcuk-1x5jlwo,ou-rcuk-slr5lh0a \ 
  --regions us-west-2 us-east-1 \
  --no-retain-stacks \
  --operation-preferences MaxConcurrentCount=1,FailureToleranceCount=0
```

詳細については、「AWS CloudFormation API リファレンス」の「[DeleteStackInstances](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeleteStackInstances.html)」を参照してください。

必要に応じて、スタックの削除が完了した後に、**describe-stack-set-operation** コマンドを実行してスタック削除オペレーションのステータスおよび結果を表示し、StackSet からスタックが削除されたことを確認します。`--operation-id` には、**delete-stack-instances** コマンドに返されたオペレーション ID を使用します。

```
aws cloudformation describe-stack-set-operation --stack-set-name my-stackset \
  --operation-id ddf16f54-ad62-4d9b-b0ab-3ed8e9example
```

# CloudFormation StackSets を削除する
<a name="stacksets-delete"></a>

StackSet を削除するには、まず StackSet のスタックをすべて削除する必要があります。すべてのスタックを削除する方法の詳細については、「[StackSets からスタックを削除する](stackinstances-delete.md)」を参照してください。

**Topics**
+ [StackSet を削除する (コンソール)](#stacksets-delete-set)
+ [StackSet を削除する (AWS CLI)](#stacksets-delete-set-cli)
+ [Delete Service Roles (オプション)](#stacksets-delete-roles)

## StackSet を削除する (コンソール)
<a name="stacksets-delete-set"></a>

**StackSet を削除するには**

1. AWS マネジメントコンソール にサインインし、CloudFormation コンソール ([https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)) を開きます。

1. 画面の上部のナビゲーションバーで、StackSet を作成した AWS リージョン を選択します。

1. **[StackSets]** ページで、StackSet を選択します。

1. StackSet を選択した状態で、**[アクション]** メニューから **[StackSet の削除]** を選択します。

1. StackSet の削除を確認するプロンプトが表示されたら、**[StackSet の削除]** を選択します。

## StackSet を削除する (AWS CLI)
<a name="stacksets-delete-set-cli"></a>

**注記**  
委任管理者として操作する場合は、コマンドに `--call-as DELEGATED_ADMIN` を含める必要があります。

**StackSet を削除するには**

1. 次の **delete-stack-set** コマンドを使用します。確認を求められたら、**y** と入力してから [**Enter**] キーを押して続行します。

   ```
   aws cloudformation delete-stack-set --stack-set-name my-stackset
   ```

1. **list-stack-sets** コマンドを実行して、StackSet が削除されたことを確認します。list-stack-sets コマンドの結果は、`DELETED` のステータスを持つスタックを表示します。

   ```
   aws cloudformation list-stack-sets
   ```

## Delete Service Roles (オプション)
<a name="stacksets-delete-roles"></a>

CloudFormation が StackSet オペレーションを実行するために必要な IAM サービスロールが不要になった場合は、ロールを削除することをお勧めします。

セルフマネージド型の StackSets の場合、作成したロールになります。これらのユーザーロールの詳細については、「[セルフマネージド型のアクセス許可を付与する](stacksets-prereqs-self-managed.md)」を参照してください。

*サービスマネージド型の StackSets の場合*、StackSets 用に自動的に作成されたロールには、組織管理アカウントに `CloudFormationStackSetsOrgAdmin`、各ターゲットアカウントに `CloudFormationStackSetsOrgMember` のサフィックスが付いています。詳細については、「[サービスリンクロール](stacksets-orgs-activate-trusted-access.md#stacksets-orgs-service-linked-roles)」を参照してください。

**サービスロールを削除するには (コンソール)**

1. AWS マネジメントコンソール にサインインして、IAM コンソール [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) を開きます。

1. ナビゲーションペインから、[**ロール**] を選択し、削除するロールの隣にあるチェックボックスをオンにします。

1. ページ上部の [**Role actions (ロールのアクション)**] メニューで、[**Delete role (ロールの削除)**] を選択します。

1. 確認ダイアログボックスで、[**Yes, Delete**] を選択します。確実に削除する場合は、サービスの最終アクセス時間データをまだロード中であっても、削除を実行できます。

**サービスロールを削除するには (AWS CLI)**
+ 次の **delete-role** コマンドを使用します。確認を求められたら、**y** と入力してから [Enter] を押します。

  ```
  aws iam delete-role --role-name role name
  ```

ロールの削除に関する詳細については、「*IAM ユーザーガイド*」の「[Deleting roles and instance profiles (ロールおよびインスタンスプロファイルの削除)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html)」を参照してください。

# ターゲットアカウントゲートを使用して失敗した StackSets デプロイを防止する
<a name="stacksets-account-gating"></a>

アカウントゲートは、CloudFormation がターゲットアカウントで StackSets オペレーションを開始する前に、そのアカウントが特定の要件を満たしていることを検証できるオプション機能です。この検証は、前提条件チェックとして機能する AWS Lambda 関数を通じて実行されます。

アカウントゲートの一般的な例としては、ターゲットアカウントにアクティブまたは未解決の CloudWatch アラームがないことを検証することが挙げられます。CloudFormation は、ターゲットアカウントのスタックオペレーションを開始する度に Lambda 関数を呼び出し、`SUCCEEDED` コードが返る場合のみ次に進みます。Lambda 関数より `FAILED` ステータスが返される場合、CloudFormation は要求されたオペレーションを続行しません。Lambda 関数でアカウントゲートを設定していない場合、CloudFormation はこの確認をスキップし、オペレーションを継続します。

ターゲットアカウントでアカウントのゲートチェックを行うことができない場合、失敗したオペレーションは、スタックの指定した耐障害性の数または割合 (%) に含められます。耐障害性の詳細については、「[StackSet オペレーションのオプション](stacksets-concepts.md#stackset-ops-options)」を参照してください。

アカウントゲート機能は、StackSets オペレーションでのみ使用できます。この機能は、StackSets 以外の他の CloudFormation オペレーションでは使用できません。

## 要件
<a name="stacksets-accountgating_reqs"></a>

アカウントゲートでは、次の要件を満たす必要があります。
+ この機能を使用するには、Lambda 関数に `AWSCloudFormationStackSetAccountGate` という名前を付ける必要があります。
+ **AWSCloudFormationStackSetExecutionRole** では、Lambda 関数を呼び出すためのアクセス許可が必要です。これらのアクセス許可がない場合、CloudFormation はアカウントゲート機能の確認をスキップし、スタックオペレーションを続行します。
+ アカウントのゲート作成を行うには、Lambda `InvokeFunction` のアクセス許可をターゲットアカウントに追加する必要があります。ターゲットアカウントの信頼ポリシーには、管理者アカウントとの信頼関係が必要です。Lambda のアクセス許可 (`InvokeFunction`) を付与するポリシーステートメントの例を次に示します。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "lambda:InvokeFunction"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

------

## Lambda 関数を作成するための CloudFormation テンプレート
<a name="stacksets-sample-accountgate"></a>

次のサンプルテンプレートを使用して Lambda `AWSCloudFormationStackSetAccountGate` 関数を作成します。これらのいずれかのテンプレートを使用して新しいスタックを作成するには、「[CloudFormation コンソールからスタックを作成する](cfn-console-create-stack.md)」を参照してください。


|  テンプレートの場所  |  説明  | 
| --- | --- | 
|  [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AccountGateSucceeded.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AccountGateSucceeded.yml)  |  スタックを作成して、`SUCCEEDED` ステータスを返す Lambda アカウントゲート関数を実装します。  | 
|  [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AccountGateFailed.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AccountGateFailed.yml)  |  スタックを作成して、`FAILED` ステータスを返す Lambda アカウントゲート関数を実装します。  | 

# CloudFormation StackSets の同時実行モードの選択
<a name="concurrency-mode"></a>

**[同時実行モード]** は、StackSet オペレーション中の同時実行レベルの動作を選択できる [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_StackSetOperationPreferences.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_StackSetOperationPreferences.html) のパラメータです。以下のいずれかのモードを選択できます。
+ **厳密な耐障害性**: このオプションでは、失敗したアカウントの数が**耐障害性** \$11 の値を超えないように、同時実行レベルを動的に下げます。実際の同時実行数の初期値は、**同時アカウントの最大数**の値または**耐障害性** \$11 の値のいずれか低い方に設定されます。その場合、実際の同時実行数は障害の数に比例して減少します。これがデフォルトの動作です。
+ **ソフト耐障害性**: このオプションは**耐障害性**と実際の同時実行性を切り離します。これにより、障害の数に関係なく、StackSet オペレーションを **[同時アカウントの最大数]** の値で設定された同時実行レベルで実行できます。

**[厳格な耐障害性]** では、StackSet オペレーションの障害が発生すると、障害ごとに同時実行性が低下するため、デプロイ速度が低下します。**[ソフト耐障害性]** は、CloudFormation 安全機能を活用しながらデプロイ速度を優先させます。これにより、既存のリソース、サービスクォータ、アクセス許可に関連する問題など、一般的な問題による StackSet オペレーションの障害を確認して対処できます。

StackSets スタック操作の失敗の詳細については、「[スタックオペレーション失敗の一般的な原因](stacksets-troubleshooting.md#common-reasons-for-stack-operation-failure)」を参照してください。

**同時アカウントの最大数**と**耐障害性**の詳細については、「[StackSet オペレーションのオプション](stacksets-concepts.md#stackset-ops-options)」を参照してください。

## 各同時実行モードの仕組み
<a name="concurrency-mode-example"></a>

以下の画像は、StackSet オペレーション中の各 **[同時実行モード]** の動作を視覚的に表したものです。ノードの文字列は 1 つの AWS リージョンへのデプロイを表し、各ノードがターゲット AWS アカウントです。

**厳密な耐障害性**  
**[厳格な耐障害性]** を使用する StackSet オペレーションで、**[耐障害性]** の値が 5 に設定され、**[同時アカウントの最大数]** の値が 10 に設定されている場合、実際の同時実行数は 6 になります。これは、**耐障害性**の値 5 \$11 が**同時アカウントの最大数**の値よりも低いためです。  
以下の図は、**[耐障害性]** の値が **[同時アカウントの最大数]** の値に与える影響と、両方が StackSet オペレーションの実際の同時実行性に与える影響を示しています。  

![\[厳格な耐障害性を使用する StackSet オペレーション。耐障害性は 5、同時アカウントの最大数は 10、同時実行数は 6 です。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/concurrency-strict-failure-tolerance-1.png)

デプロイが開始され、スタックインスタンスに障害が発生すると、安全なデプロイを実現するために実際の同時実行数が減少します。StackSets が 1 つのスタックインスタンスのデプロイに失敗すると、実際の同時実行数は 6 から 5 に減少します。  

![\[厳格な耐障害性を使用する StackSet オペレーションで、デプロイの成功数が 2、失敗数が 1 になっています。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/concurrency-strict-failure-tolerance-2.png)


![\[失敗数が 1 になったことから、厳格な耐障害性を使用する StackSet オペレーションが実際の同時実行数を 5 に減らしました。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/concurrency-strict-failure-tolerance-3.png)

**厳密な耐障害性**モードでは、障害が発生したスタックインスタンスの数に比例して実際の同時実行数が減少します。次の例では、StackSets がさらに 2 つのスタックインスタンスのデプロイに失敗し、実際の同時実行数が 5 から 3 に減少して、失敗したスタックインスタンスの合計が 3 になっています。  

![\[これで、厳格な耐障害性を使用する StackSet オペレーションでのデプロイ失敗数が 3 になりました。同時実行数は 3 に減らされました。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/concurrency-strict-failure-tolerance-4.png)

StackSets では、障害が発生したスタックインスタンスの数が **[耐障害性]** \$11 の定義値に等しい場合、StackSet オペレーションに失敗します。次の例では、障害が発生したスタックインスタンスが 6 つあり、**耐障害性**の値が 5 の場合、StackSets は操作に失敗します。  

![\[これで、厳格な耐障害性を使用する StackSet オペレーションでのデプロイ失敗数が 6 になりました。この StackSet オペレーションは失敗します。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/concurrency-strict-failure-tolerance-5.png)

この例では、CloudFormation は StackSet オペレーションを停止する前に 9 つのスタックインスタンス (3 つは成功、6 つは失敗) をデプロイしました。

**ソフト耐障害性**  
**[ソフト耐障害性]** を使用する StackSet オペレーションで、**[耐障害性]** の値が 5 に設定され、**[同時アカウントの最大数]** の値が 10 に設定されている場合、実際の同時実行数は 10 になります。  

![\[ソフト耐障害性を使用する StackSet オペレーション。耐障害性は同時アカウントの最大数 5 で、実際の同時実行数は 10 です。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/concurrency-soft-failure-tolerance-1.png)

デプロイが開始され、スタックインスタンスに障害が発生しても、実際の同時実行数は変わりません。次の例では、1 つのスタック操作が失敗しましたが、実際の同時実行数は 10 のままです。  

![\[ソフト耐障害性を使用する StackSet オペレーションで、最初の失敗が発生します。実際の同時実行数は 10 のままです。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/concurrency-soft-failure-tolerance-2.png)

スタックインスタンスにさらに 2 回障害が発生しても、実際の同時実行数は 10 のままです。  

![\[ソフト耐障害性を使用する StackSet オペレーションの成功数が 2、失敗数が 3 になりましたが、実際の同時実行数は引き続き 10 のままです。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/concurrency-soft-failure-tolerance-3.png)

StackSets では、障害が発生したスタックインスタンスの数が **[耐障害性]** を超えた場合、StackSet オペレーションに失敗します。次の例では、障害が発生したスタックインスタンスが 6 つあり、**耐障害性**のカウントが 5 の場合、StackSets は操作に失敗します。ただし、同時実行キューの残りの操作が終了するまで操作は終了しません。  

![\[ソフト耐障害性を使用する StackSet オペレーションの失敗数が 6 になりましたが、同時実行キューに残っている処理を終了する必要があります。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/concurrency-soft-failure-tolerance-4.png)

StackSets は、同時実行キューにすでに存在するスタックインスタンスを引き続きデプロイします。つまり、障害が発生したスタックインスタンスの数は**耐障害性**よりも多くなる可能性があるということです。次の例では、StackSet オペレーションが **[耐障害性]** の 5 に達したにもかかわらず、同時実行キューに実行すべきオペレーションが 7 つ残っているため、8 つのスタックインスタンスが失敗しています。  

![\[StackSet オペレーションの合計失敗数は 8 になります。これは、失敗しきい値に達した後も 7 個のデプロイがキューに残っていたためです。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/concurrency-soft-failure-tolerance-5.png)

この例では、StackSets はスタックセットの操作を停止する前に 15 つのスタックインスタンス (7 つは成功、8 つは失敗) をデプロイしました。

## デプロイ速度に基づいて、厳密な耐障害性とソフト耐障害性のどちらかを選択します。
<a name="concurrency-mode-comparison"></a>

**[厳格な耐障害性]** モードと **[ソフト耐障害性]** モードのどちらを選択するかは、StackSet のデプロイの優先速度と許容されるデプロイ失敗数に左右されます。

次の表は、合計 1,000 個のスタックインスタンスをデプロイしようとして失敗した StackSet オペレーションを、各同時実行モードがどのように処理するかを示しています。各シナリオでは、**耐障害性**の値は 100 スタックインスタンスに設定され、**同時アカウントの最大数**の値は 250 スタックインスタンスに設定されています。

StackSets は実際にはスライディングウィンドウとしてアカウントをキューに入れていますが (「[各同時実行モードの仕組み](#concurrency-mode-example)」を参照)、この例では操作をバッチで示して各モードの速度を示しています。

### 厳密な耐障害性
<a name="concurrency-mode-comparison-strict"></a>

この例では、**厳密な耐障害性**モードを使用しているため、先行する各バッチで発生した障害の数と比較して、実際の同時実行性が低下します。各バッチには 20 個の失敗したインスタンスがあり、StackSet オペレーションが **[耐障害性]** の値の 100 に達するまで、次のバッチの実際の同時実行数は 20 ずつ低下します。

次の表では、最初のバッチの実際の同時実行数は 101 スタックインスタンスです。実際の同時実行数は 101 です。これは、**同時アカウントの最大数** (250) と**耐障害性** (100) \$11 のどちらか低い値であるためです。各バッチには 20 の失敗したスタックインスタンスのデプロイが含まれ、それ以降の各バッチの実際の同時実行数は 20 スタックインスタンスずつ減少します。


| **厳密な耐障害性** | **バッチ 1** | **バッチ 2** | **バッチ 3** | **バッチ 4** | **バッチ 5** | **バッチ 6** | 
| --- | --- | --- | --- | --- | --- | --- | 
| 実際の同時実行数 | 101 | 81 | 61 | 41 | 21 | - | 
| 失敗したインスタンス数 | 20 | 20 | 20 | 20 | 20 | - | 
| 成功したスタックインスタンス数 | 81 | 61 | 41 | 21 | 1 | - | 

**[厳格な耐障害性]** を使用したオペレーションでは、StackSet オペレーションが 100 個のスタックインスタンスの **[耐障害性]** の値に達するまでに、5 つのバッチで 305 個のスタックインスタンスのデプロイが完了しました。StackSet オペレーションは、失敗する前に 205 個のスタックインスタンスを正常にデプロイします。

### ソフト耐障害性
<a name="concurrency-mode-comparison-soft"></a>

**ソフト耐障害性**モードを使用したこの例では、障害が発生したインスタンスの数に関係なく、250 個のスタックインスタンスの**同時アカウントの最大数**の値で定義されている実際の同時実行数と同じ値が維持されます。StackSet オペレーションは、**[耐障害性]** の値である 100 個のインスタンスに達するまで、実際の同時実行数を維持します。

次の表では、最初のバッチの実際の同時実行数は 250 スタックインスタンスです。実際の同時実行数は 250 です。これは、**同時アカウントの最大数**の値が 250 に設定されており、**ソフト耐障害性**モードにより、StackSets は障害の数に関係なく、この値を実際の同時実行数として使用できるためです。この例では、各バッチに 50 件の障害が発生していますが、実際の同時実行性には影響しません。


| **ソフト耐障害性** | **バッチ 1** | **バッチ 2** | **バッチ 3** | **バッチ 4** | **バッチ 5** | **バッチ 6** | 
| --- | --- | --- | --- | --- | --- | --- | 
| 実際の同時実行数 | 250 | 250 | - | - | - | - | 
| 失敗したインスタンス数 | 50 | 50 | - | - | - | - | 
| 成功したスタックインスタンス数 | 200 | 200 | - | - | - | - | 

同じ**同時アカウントの最大数**の値と**耐障害性**の値を使用した**ソフト耐障害性**モードでの操作では、2 つのバッチで 500 件のスタックインスタンスのデプロイが完了しました。StackSet オペレーションは、失敗する前に 400 個のスタックインスタンスを正常にデプロイします。

## 同時実行モードの選択 (コンソール)
<a name="concurrency-mode-console"></a>

StackSet を作成または更新する際には、**[デプロイオプションの設定]** ページの **[同時実行モード]** で、**[厳格な耐障害性]** または **[ソフト耐障害性]** を選択します。

## 同時実行モードの選択 (AWS CLI)
<a name="concurrency-mode-cli"></a>

`ConcurrencyMode` パラメータと次の StackSets コマンドを使用できます。
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/delete-stack-instances.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/delete-stack-instances.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/detect-stack-set-drift.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/detect-stack-set-drift.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/import-stacks-to-stack-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/import-stacks-to-stack-set.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-instances.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-instances.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-set.html)

これらのコマンドには、`ConcurrencyMode` 設定を使用できる `--operation-preferences` という既存のパラメータがあります。`ConcurrencyMode` には次のいずれかの値を設定できます。
+ `STRICT_FAILURE_TOLERANCE`
+ `SOFT_FAILURE_TOLERANCE`

次の例では、`STRICT_FAILURE_TOLERANCE` `ConcurrencyMode` を使用し、`FailureToleranceCount` を 10、`MaxConcurrentCount` を 5 に設定したスタックインスタンスを作成します。

```
aws cloudformation create-stack-instances \
  --stack-set-name example-stackset \
  --accounts 123456789012 \
  --regions eu-west-1  \
  --operation-preferences ConcurrencyMode=STRICT_FAILURE_TOLERANCE,FailureToleranceCount=10,MaxConcurrentCount=5
```

**注記**  
StackSet の作成と更新の詳細な手順については、以下のトピックを参照してください。  
[StackSets を作成する (セルフマネージド許可)](stacksets-getting-started-create-self-managed.md)
[StackSets を作成する (サービスマネージド許可)](stacksets-orgs-associate-stackset-with-org.md)
[StackSets を更新する](stacksets-update.md)

# CloudFormation StackSets でのドリフト検出の実行
<a name="stacksets-drift"></a>

スタックとスタックに含まれるリソースを CloudFormation で管理している場合でも、ユーザーは CloudFormation の外部でそれらのリソースを変更できます。ユーザーは、リソースを作成した基盤となるサービスを使用してリソースを直接編集できます。StackSet でドリフト検出を実行すると、その StackSet に属するスタックインスタンスのいずれかが予想される構成と異なっているか、または*ドリフト*しているかを判断できます。

**Topics**
+ [CloudFormation が StackSet でドリフト検出を実行する方法](#stacksets-drift-how)
+ [StackSet のドリフトを検出する (コンソール)](#stacksets-drift-console-procedure)
+ [StackSet のドリフトを検出する (AWS CLI)](#stacksets-drift-cli-procedure)
+ [StackSet でのドリフト検出の停止](#stacksets-drift-stop)

## CloudFormation が StackSet でドリフト検出を実行する方法
<a name="stacksets-drift-how"></a>

CloudFormation が StackSet でドリフト検出を実行する場合、StackSet 内の各スタックインスタンスに関連付けられたスタックでドリフト検出が実行されます。これを行うために、CloudFormation は、スタック内の各リソースの現在の状態を、スタックのテンプレート、および指定された入力パラメータで定義されているリソースの予想される状態と比較します。リソースの現在の状態が予想される状態と異なる場合、そのリソースはドリフトしたものとみなされます。スタック内の 1 つ以上のリソースがドリフトしている場合、スタック自体がドリフトしたとみなされ、スタックが関連付けられているスタックインスタンスもドリフトしたとみなされます。StackSet 内の 1 つ以上のスタックインスタンスがドリフトした場合、StackSet 自体がドリフトしたとみなされます。

ドリフト検出では、管理されていない変更、つまり CloudFormation の外部にあるスタックに加えられた変更を識別します。StackSet レベルではなく、CloudFormation を介してスタックに直接行った変更は、ドリフトとはみなされません。例えば、StackSet のスタックインスタンスに関連付けられたスタックがあるとします。CloudFormation を使用してそのスタックを更新して別のテンプレートを使用した場合、そのスタックのテンプレートが StackSet に属する他のスタックのテンプレートとは異なるようになった場合でも、ドリフトとはみなされません。これは、スタックが CloudFormation で予想されるテンプレートとパラメータ構成を一致させるためです。

CloudFormation がスタックでドリフト検出を実行する方法の詳細については、[ドリフト検出を使用してスタックとリソースへのアンマネージド型設定変更を検出する](using-cfn-stack-drift.md) を参照してください。

CloudFormation では各スタックで個別にドリフト検出を実行するため、スタックがドリフトしているかどうかを判断する際に、オーバーライドされたパラメータ値が考慮されます。スタックインスタンスでのテンプレートパラメータのオーバーライドの詳細については、「[CloudFormation StackSet 内のスタックのパラメータ値を上書きする](stackinstances-override.md)」を参照してください。

スタックインスタンスに関連付けられた[スタックで直接](using-cfn-stack-drift.md)ドリフト検出を実行する場合、これらのドリフト結果は [**StackSets**] コンソールページからは利用できません。

## StackSet のドリフトを検出する (コンソール)
<a name="stacksets-drift-console-procedure"></a>

**StackSet のドリフトを検出するには**

1. [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) で CloudFormation コンソール を開きます。

1. **[StackSets]** ページで、ドリフト検出を実行する StackSet を選択します。

1. [**アクション**] メニューから、[**Detect drifts (ドリフトを検出)**] を選択します。

   CloudFormation により、選択された StackSet に対してドリフト検出が開始されたことを示す情報バーが表示されます。

1. オプション: ドリフト検出オペレーションの進行状況を監視するには:

   1. StackSet 名を選択して、**[Stackset の詳細]** ページを表示します。

   1. [**オペレーション**] タブを選択し、ドリフト検出オペレーションを選択してから、[**View drift details (ドリフトの詳細の表示)**] を選択します。

   CloudFormation に [**Operation details (オペレーションの詳細)**] ダイアログボックスが表示されます。

1. CloudFormation がドリフト検出オペレーションを完了するまで待ちます。ドリフト検出オペレーションが完了すると、CloudFormation によって、StackSet の **[ドリフトステータス]** と **[前回のドリフトチェック時刻]** が更新されます。これらのフィールドは、選択した StackSet の **[StackSet の詳細]** ページの **[概要]** タブにリストされます。

   StackSet に含まれるスタックインスタンスの数や、StackSet に含まれるリソースの数によっては、ドリフト検出オペレーションに時間がかかる場合があります。一度に実行できるドリフト検出オペレーションは、特定の StackSet で 1 つだけです。情報バーを閉じた後でも、CloudFormation によってドリフト検出オペレーションが継続されます。

1. StackSet 内のスタックインスタンスのドリフト検出結果を確認するには、**[スタックインスタンス]** タブを選択します。

   [**スタックの名前**] 列には、各スタックインスタンスに関連付けられたスタックの名前がリストされ、[**ドリフトステータス**] 列にはスタックのドリフトステータスがリストされます。スタックの 1 つ以上のリソースがドリフトした場合、スタックはドリフトしたと見なされます。

1. 特定のスタックインスタンスに関連付けられたスタックのドリフト検出結果を確認するには、次の手順を実行します。

   1. **[操作]** タブを選択します。

   1. 確認するドリフト検出結果のドリフト操作を選択します。分割パネルには、スタックインスタンスのステータスと選択した操作の理由が表示されます。ドリフト操作の場合、ステータス理由の列にはスタックインスタンスのドリフトステータスが表示されます。

   1. 確認するドリフト詳細のスタックインスタンスを選択し、**[リソースドリフトを表示]** を選択します。**「リソースドリフト」**ページの **[リソースドリフトステータス]** テーブルでは、各スタックリソースはそれぞれのドリフトのステータスと、リソースにドリフト検出が実行された最後の時間が一覧表示されます。各リソースの論理 ID と物理 ID は、それらを識別しやすくするために表示されます。

1. ドリフトステータスに基づいてリソースをソートするには、[**ドリフトステータス**] 列を使用します。

   変更されたリソースの詳細を表示する方法

   1. リソースを選択した状態で、**[ドリフト詳細の表示]** を選択します。

     CloudFormation には、その特定リソースのドリフト詳細ページが表示されます。このページには、リソースの違いが一覧表示されます。リソースの予想プロパティ値と現在のプロパティ値も一覧表示されます。
**注記**  
スタックが現在サインインしているリージョンとアカウントと異なるリージョンやアカウントに属している場合、**[ドリフトを検出]** ボタンは無効になり、詳細を表示できなくなります。

## StackSet のドリフトを検出する (AWS CLI)
<a name="stacksets-drift-cli-procedure"></a>

AWS CLI を使用してスタック全体のドリフトを検出するには、次の手順を使用します:

**StackSet のドリフトを検出するには**

1. StackSet 全体と関連するスタックインスタンスのドリフトを検出するには、[https://docs.aws.amazon.com/cli/latest/reference/cloudformation/detect-stack-set-drift.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/detect-stack-set-drift.html) コマンドを使用します。

   次の例では、StackSet `stack-set-drift-example` でドリフト検出を開始します。

   ```
   aws cloudformation detect-stack-set-drift \
       --stack-set-name stack-set-drift-example
   ```

   出力:

   ```
   {
       "OperationId": "c36e44aa-3a83-411a-b503-cb611example"
   }
   ```

1. StackSet ドリフト検出オペレーションは長時間実行されるオペレーションとなる可能性があるため、[https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html) コマンドを使用してドリフトオペレーションのステータスをモニタリングします。このコマンドは、**detect-stack-set-drift** コマンドによって返された StackSet オペレーション ID を受け取ります。

   次の例では、前の例のオペレーション ID を使用して、StackSet ドリフト検出オペレーションに関する情報を返します。この例では、オペレーションはまだ実行中です。この StackSet に関連付けられている 7 つのスタックインスタンスのうち、1 つのスタックインスタンスが既にドリフトしていて、2 つのインスタンスが同期しており、残り 4 つのスタックインスタンスのドリフト検出はまだ進行中であることがわかりました。1 つのインスタンスがドリフトしているため、StackSet 自体のドリフトステータスは `DRIFTED` になります。

   ```
   aws cloudformation describe-stack-set-operation \
       --stack-set-name stack-set-drift-example \
       --operation-id c36e44aa-3a83-411a-b503-cb611example
   ```

   出力:

   ```
   {
       "StackSetOperation": {
           "Status": "RUNNING",
           "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole",
           "OperationPreferences": {
               "RegionOrder": []
           },
           "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole",
           "StackSetDriftDetectionDetails": {
               "DriftedStackInstancesCount": 1,
               "TotalStackInstancesCount": 7,
               "LastDriftCheckTimestamp": "2019-12-04T20:34:28.543Z",
               "InSyncStackInstancesCount": 2,
               "InProgressStackInstancesCount": 4,
               "DriftStatus": "DRIFTED",
               "FailedStackInstancesCount": 0
           },
           "Action": "DETECT_DRIFT",
           "CreationTimestamp": "2019-12-04T20:33:13.673Z",
           "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22example",
           "OperationId": "c36e44aa-3a83-411a-b503-cb611example"
       }
   }
   ```

   後で同じコマンドを実行した、この例ではドリフト検出操作が完了した後に返される情報を示しています。この StackSet に関連付けられている合計 7 つのスタックインスタンスのうち 2 つがドリフトしているため、StackSet 自体のドリフトステータスは `DRIFTED` になっています。

   ```
   aws cloudformation describe-stack-set-operation \
       --stack-set-name stack-set-drift-example \
       --operation-id c36e44aa-3a83-411a-b503-cb611example
   ```

   出力:

   ```
   {
       "StackSetOperation": {
           "Status": "SUCCEEDED",
           "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole",
           "OperationPreferences": {
               "RegionOrder": []
           } 
           "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole",
           "EndTimestamp": "2019-12-04T20:37:32.829Z",
           "StackSetDriftDetectionDetails": {
               "DriftedStackInstancesCount": 2,
               "TotalStackInstancesCount": 7,
               "LastDriftCheckTimestamp": "2019-12-04T20:36:55.612Z",
               "InSyncStackInstancesCount": 5,
               "InProgressStackInstancesCount": 0,
               "DriftStatus": "DRIFTED",
               "FailedStackInstancesCount": 0
           },
           "Action": "DETECT_DRIFT",
           "CreationTimestamp": "2019-12-04T20:33:13.673Z",
           "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22example",
           "OperationId": "c36e44aa-3a83-411a-b503-cb611example"
       }
   }
   ```

1. StackSet ドリフト検出オペレーションが完了したら、**describe-stack-set**、**list-stack-instances**、**describe-stack-instance**、**list-stack-instance-resource-drifts** コマンドを使用して結果を確認します。

   [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set.html) コマンドには、**describe-stack-set-operation** コマンドで返されるのと同じ詳細なドリフト情報が含まれます。

   ```
   aws cloudformation describe-stack-set \
       --stack-set-name stack-set-drift-example
   ```

   出力:

   ```
   {
       "StackSet": {
           "Status": "ACTIVE",
           "Description": "Demonstration of drift detection on stack sets.",
           "Parameters": [],
           "Tags": [
               {
                   "Value": "Drift detection",
                   "Key": "Feature"
               }
           ], 
           "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole",
           "Capabilities": [],
           "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole",
           "StackSetDriftDetectionDetails": {
               "DriftedStackInstancesCount": 2,
               "TotalStackInstancesCount": 7,
               "LastDriftCheckTimestamp": "2019-12-04T20:36:55.612Z",
               "InProgressStackInstancesCount": 0,
               "DriftStatus": "DRIFTED",
               "DriftDetectionStatus": "COMPLETED",
               "InSyncStackInstancesCount": 5,
               "FailedStackInstancesCount": 0
           },
           "StackSetARN": "arn:aws:cloudformation:us-east-1:123456789012:stackset/stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22example",
           "TemplateBody": [details omitted],
           "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22ebexample",
           "StackSetName": "stack-set-drift-example"
       }
   }
   ```

   [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-instances.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-instances.html) コマンドを使用して、各スタックインスタンスのドリフトステータスなど、StackSet に関連付けられたスタックインスタンスに関する概要情報を返すことができます。

   この例では、ドリフトステータスフィルターを `DRIFTED` に設定した状態で例の StackSet に **list-stack-instances** を実行すると、2 つのスタックインスタンスのうち、どちらが `DRIFTED` のドリフトステータスになっているかを特定できるようになります。

   ```
   aws cloudformation list-stack-instances \
       --stack-set-name stack-set-drift-example \
       --filters Name=DRIFT_STATUS,Values=DRIFTED
   ```

   出力:

   ```
   {
   "Summaries": [
           {
   "StackId": "arn:aws:cloudformation:eu-west-1:123456789012:stack/StackSet-stack-set-drift-example-b0fb6083-60c0-4e39-af15-2f071e0db90c/0e4f0940-16d4-11ea-93d8-0641cexample",
               "Status": "CURRENT",
               "Account": "012345678910",
               "Region": "eu-west-1",
               "LastDriftCheckTimestamp": "2019-12-04T20:37:32.687Z",
               "DriftStatus": "DRIFTED",
               "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample",
               "LastOperationId": "c36e44aa-3a83-411a-b503-cb611example"
           },
           {
               "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/StackSet-stack-set-drift-example-b7fde68e-e541-44c2-b33d-ef2e2988071a/008e6030-16d4-11ea-8090-12f89example",
               "Status": "CURRENT",
               "Account": "123456789012",
               "Region": "us-east-1",
               "LastDriftCheckTimestamp": "2019-12-04T20:34:28.275Z",
               "DriftStatus": "DRIFTED",
               "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample",
               "LastOperationId": "c36e44aa-3a83-411a-b503-cb611example"
           },
           
           [additional stack instances omitted]
    
       ]
   }
   ```

   [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-instance.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-instance.html) コマンドでもこの情報は返されますが、以下の例のように 1 つのスタックインスタンスに対する情報です。

   ```
   aws cloudformation describe-stack-instance \
       --stack-set-name stack-set-drift-example \
       --stack-instance-account 012345678910 --stack-instance-region us-east-1
   ```

   出力:

   ```
   {
       "StackInstance": {
           "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/StackSet-stack-set-drift-example-b7fde68e-e541-44c2-b33d-ef2e2988071a/008e6030-16d4-11ea-8090-12f89example",
           "Status": "CURRENT",
           "Account": "123456789012",
           "Region": "us-east-1",
           "ParameterOverrides": [],
           "DriftStatus": "DRIFTED",
           "LastDriftCheckTimestamp": "2019-12-04T20:34:28.275Z",
           "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample",
           "LastOperationId": "c36e44aa-3a83-411a-b503-cb611example"
       }
   }
   ```

1. どのスタックインスタンスがドリフトしたかを特定したら、**list-stack-instances** コマンドまたは **describe-stack-instance** コマンドによって返されるスタックインスタンスに関する情報を使用して、[https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-instance-resource-drifts.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-instance-resource-drifts.html) コマンドを実行できます。このコマンドは、スタックでどのリソースが、特定のドリフト操作でドリフトしたかに関する詳細情報を返します。

   次の例では、`--stack-instance-resource-drift-statuses` パラメーターを使用して、以前のドリフト操作の例で変更または削除されたリソースのスタックドリフト情報を要求しています。リクエストは、2 つのプロパティに関する詳細とそれぞれの変更された値を含め、変更された 1 つのリソースに関する情報を返します。リソースは削除されていません。

   ```
   aws cloudformation list-stack-instance-resource-drifts \
       --stack-set-name my-stack-set-with-resource-drift \
       --stack-instance-account 123456789012 \
       --stack-instance-region us-east-1 \
       --operation-id c36e44aa-3a83-411a-b503-cb611example \
       --stack-instance-resource-drift-statuses MODIFIED DELETED
   ```

   出力:

   ```
   {
       "Summaries": [
           {
               "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/my-stack-set-with-resource-drift/489e5570-df85-11e7-a7d9-50example",
               "ResourceType": "AWS::SQS::Queue",
               "Timestamp": "2018-03-26T17:23:34.489Z",
               "PhysicalResourceId": "https://sqs.us-east-1.amazonaws.com/123456789012/my-stack-with-resource-drift-Queue-494PBHCO76H4",
               "StackResourceDriftStatus": "MODIFIED",
               "PropertyDifferences": [
                   {
                       "PropertyPath": "/DelaySeconds",
                       "ActualValue": "120",
                       "ExpectedValue": "20",
                       "DifferenceType": "NOT_EQUAL"
                   },
                   {
                       "PropertyPath": "/RedrivePolicy/maxReceiveCount",
                       "ActualValue": "12",
                       "ExpectedValue": "10",
                       "DifferenceType": "NOT_EQUAL"
                   }
               ],
               "LogicalResourceId": "Queue"
           }
       ]
   }
   ```

## StackSet でのドリフト検出の停止
<a name="stacksets-drift-stop"></a>

StackSet のドリフト検出は長時間実行されるオペレーションになる可能性があるため、StackSet で現在実行中のドリフト検出オペレーションを停止するのが望ましい場合があります。

**StackSet のドリフト検出を停止するには (コンソール)**

1. [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) で CloudFormation コンソール を開きます。

1. **[StackSets]** ページで、StackSet の名前を選択します。

   CloudFormation に選択した StackSet の **[StackSets の詳細]** ページが表示されます。

1. [**StackSets details (セットのスタックセットの詳細)**] ページで、[**オペレーション**] タブを選択し、ドリフト検出オペレーションを選択します。

1. [**Stop operation (オペレーションを停止)**] を選択します。

**StackSet のドリフト検出を停止するには (AWS CLI)**
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/stop-stack-set-operation.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/stop-stack-set-operation.html) コマンドを使用します。ドリフト検出 StackSet オペレーションの StackSet 名とオペレーション ID の両方を指定する必要があります。

  ```
  aws cloudformation stop-stack-set-operation \
      --stack-set-name stack-set-drift-example \
      --operation-id 624af370-311a-11e8-b6b7-500cexample
  ```

# スタックを CloudFormation StackSets にインポートする
<a name="stacksets-import"></a>

スタックのインポートオペレーションでは、既存のスタックを新規または既存の StackSets にインポートできるため、既存のスタックを 1 回のオペレーションで StackSet に移行できます。

セルフマネージド型スタックセットの場合、インポートオペレーションでは、管理者アカウントまたは異なるターゲットアカウントと AWS リージョン にあるスタックをインポートできます。サービス管理された StackSets の場合、インポートオペレーションでは、管理アカウントと同じ AWS Organizations の任意のスタックをインポートできます。

スタックを StackSets にインポートする際の考慮事項と制限事項は次のとおりです:
+ インポートオペレーションでは、インラインスタック ID を使用して最大 10 スタック、または Amazon S3 オブジェクトを使用して最大 200 スタック、インポートできます。
+  `NoEcho` プロパティはサポートされていません。`NoEcho` を含むスタックは、StackSet のインポートを介して新しい StackSets にインポートされません。
+ スタックは、1 つの StackSet にのみ属することができます。
+ スタックのインポートオペレーションでパラメータとしてタグを明示的に指定することで、StackSet にスタックタグを実装できます。
+ スタックのカスタムパラメータオーバーライドは、インポートオペレーション中には影響を受けません。
+ インポートされたスタックインスタンスのパラメータを **[StackSet の詳細を編集]** オプションを使用して更新することはできません。これには **[StackSet パラメータを上書き]** を使用する必要があります。パラメータの上書きに関する詳細については、「[スタックのパラメータを上書きする](stackinstances-override.md)」を参照してください。
+ StackSets クォータとスタックインスタンスは、スタックをインポートするときに適用されます。クォータの詳細については、「[CloudFormation クォータを理解する](cloudformation-limits.md)」を参照してください。

**Topics**
+ [CloudFormation StackSets のためのセルフマネージドスタックインポート](self-managed-import.md)
+ [CloudFormation StackSets のためのサービスマネージドスタックインポート](service-managed-import.md)
+ [CloudFormation StackSets へのスタックのインポートを元に戻す](revert-stackset-import.md)

# CloudFormation StackSets のためのセルフマネージドスタックインポート
<a name="self-managed-import"></a>

CloudFormation スタックのインポートオペレーションでは、既存のスタックを新規または既存の StackSets にインポートできるため、既存のスタックを 1 回のオペレーションで StackSet に移行できます。スタックインポートを使用することで、それらのリソースを削除して再作成することなく、ダウンタイムや停止を回避できます。スタックが StackSet にインポートされると、元のスタックは指定されたスタックセットのスタックインスタンスになります。

**セルフマネージドスタックのインポートに関する考慮事項**
+ スタックのインポートオペレーションには、StackSet を作成する管理者アカウントと、スタックを含むターゲットアカウントが必要です。
+ ターゲットアカウントには、スタック ID または ARN の入力で `GetTemplate` オペレーションを使用する権限が必要です。そのため、管理者アカウントには **AWSCloudFormationStackSetAdministrationRole** または **AWSCloudFormationStackSetsExectionRole** 許可を付与する必要があります。

**Topics**
+ [既存のスタックを新しい StackSet にインポートする (コンソール)](#import-stacks-to-stack-set)
+ [既存のスタックを既存の StackSet にインポートする (コンソール)](#import-stack-to-existing-stackset)
+ [スタックを StackSet にインポートする (AWS CLI)](#importing-stack-to-stackset.cli)

## 既存のスタックを新しい StackSet にインポートする (コンソール)
<a name="import-stacks-to-stack-set"></a>

開始する前に、インポートするスタックを特定します。

1. AWS マネジメントコンソール にサインインし、CloudFormation コンソール ([https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)) を開きます。

1. ナビゲーションペインから [**StackSets**] を選択します。

1. [**StackSets**] ページの上部で [**Create StackSet (StackSet の作成)**] を選択します。

1. **[テンプレートを選択する]** ページで、次のいずれかのオプションでテンプレートを指定し、**[次へ]** を選択します。
   + **Amazon S3 URL** を選択し、テキストボックスでテンプレートの URL を指定します。
   + **[Upload a template file]** (テンプレートファイルのアップロード) を選択し、テンプレートを参照します。
   + **[From stack ID]** (スタック ID から) を選択し、スタック ID を入力します。

1. **[StackSet の詳細を指定]** ページで、作成する StackSet の名前を入力し、**[次へ]** を選択します。

   (オプション) StackSet の説明を入力します。

1. **[スタックオプションの設定]** ページで、選択内容を確認し、**[次へ]** を選択します。

1. **[デプロイオプションの設定]** ページで、**[スタックをスタックセットにインポート]** を選択します。

1. インポートするスタックのスタック ID を **[Stacks to import]** (インポートするスタック) フィールドに入力します。例えば、`arn:aws:cloudformation:us-east-1:123456789012:stack/StackToImport/f449b250-b969-11e0-a185-5081d0136786`。

   (オプション) **[別のスタック ID の追加]** を追加するを選択し、インポートする別のスタックのスタックID を入力します。スタックのインポートオペレーションごとに最大 10 個のスタックを追加できます。

1. デプロイのオプションを確認し、**[次へ]** を選択します。

1. **[レビュー]** ページで、設定と StackSet のプロパティを確認します。スタックを StackSet にインポートする準備ができたら、**[送信]** を選択します。

**結果**: インポートされたスタックは、指定された StackSet のスタックインスタンスになりました。スタックインポートステータスの詳細については、「[StackSets ステータスコード](stacksets-concepts.md#stackset-status-codes)」を参照してください。

## 既存のスタックを既存の StackSet にインポートする (コンソール)
<a name="import-stack-to-existing-stackset"></a>

開始する前に、インポートするスタックを特定します。

1. AWS マネジメントコンソール にサインインし、CloudFormation コンソール ([https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)) を開きます。

1. ナビゲーションペインから [**StackSets**] を選択します。

1. **[StackSets]** ページで、スタックをインポートする StackSet を選択します。

1. StackSet を選択した状態で、**[アクション]** メニューから **[StackSet にスタックを追加]** を選択します。

1. **[デプロイオプションの設定]** ページで、**[スタックをスタックセットにインポート]** を選択し、インポートするスタックのスタック ID を **[インポートするスタック]** に入力します。例えば、`arn:aws:cloudformation:us-east-1:123456789012:stack/StackToImport/f449b250-b969-11e0-a185-5081d0136786`。

   (オプション) **[別のスタック ID の追加]** を追加するを選択し、インポートする別のスタックのスタックID を入力します。スタックのインポートオペレーションごとに最大 10 個のスタックを追加できます。

1. [**次へ**] を選択します。

1. **[Specify overrides]** (オーバーライドを指定) ページで、選択内容を確認し、**[次へ]** を選択します。

1. **[レビュー]** ページで、設定と StackSet のプロパティを確認します。StackSet を作成する準備ができたら、**[送信]** を選択します。

**結果**: インポートされたスタックは、指定された StackSet のスタックインスタンスになりました。スタックインポートステータスの詳細については、「[StackSets ステータスコード](stacksets-concepts.md#stackset-status-codes)」を参照してください。

## スタックを StackSet にインポートする (AWS CLI)
<a name="importing-stack-to-stackset.cli"></a>

**既存のスタックを新しい StackSet にインポートするには**  
次の `create-stack-set` コマンドは StackSet を作成し、指定されたスタックをインポートします。インポートするスタックは ARN によって識別されます。placeholder text を独自の情報に置き換えます。

```
aws cloudformation create-stack-set \
  --stack-set-name MyStackSet \
  --stack-id arn:aws:cloudformation:us-east-1:123456789012:stack/StackToImport/466df9e0-0dff-08e3-8e2f-5088487c4896 \
  --administration-role-arn arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole \
  --execution-role-name AWSCloudFormationStackSetExecutionRole
```

**既存のスタックを既存の StackSet にインポートするには**  
次の `import-stacks-to-stack-sets` コマンドは、指定されたスタックを *MyStackSet* StackSet にインポートします。インポートするスタックは ARN によって識別されます。placeholder text を独自の情報に置き換えます。

```
aws cloudformation import-stacks-to-stack-set \
  --stack-set MyStackSet \
  --stack-ids arn:aws:cloudformation:us-east-1:123456789012:stack/StackToImport/f449b250-b969-11e0-a185-5081d0136786
```

複数のスタックを指定するには、`--stack-ids` オプションの値に次の形式を使用します。

```
--stack-ids "arn_1" "arn_2"
```

**インポートしたスタックのクローンを他のリージョンやアカウントに作成するには**  
次の `create-stack-instances` コマンドは、StackSet にスタックインスタンスを追加します。placeholder text を独自の情報に置き換えます。

```
aws cloudformation create-stack-instances \
  --stack-set-name MyStackSet \
  --accounts '["account_ID_1","account_ID_2"]' \
  --regions '["region_1","region_2"]'
```

# CloudFormation StackSets のためのサービスマネージドスタックインポート
<a name="service-managed-import"></a>

CloudFormation スタックのインポートオペレーションでは、既存のスタックを新規または既存の StackSets にインポートできるため、既存のスタックを 1 回のオペレーションで StackSet に移行できます。StackSets はスタックの機能を拡張するため、1 回のオペレーションで複数のアカウントとリージョンにまたがるスタックを作成、更新、削除できます。

**サービスマネージドスタックのインポートに関する考慮事項**
+ スタックのインポートオペレーションには、StackSets で信頼アクセスを有効にするなど、関連付けられた AWS Organizations を管理できる管理アカウントまたは委任された管理アカウントが必要です。
+ ターゲットアカウントは、管理アカウントまたは委任された管理者アカウントによって管理される AWS Organizations のメンバーである必要があります。
+ ターゲットスタックは、ターゲット OU の 1 つに存在します。
+ ターゲットアカウントは AWS Organizations のメンバーである必要があります。
+ AWS Organizations アクセスは、組織の `ACTIVATED` 状態である必要があります。
+ インポートされるスタックは、管理アカウントではなく、メンバーアカウントのいずれかに存在する必要があります。

**Topics**
+ [サービスマネージド型のスタックを新しい StackSet にインポートする (コンソール)](#import-service-managed-stack-to-new-stackset)
+ [サービスマネージド型のスタックを作成して、既存の StackSet にインポートする (コンソール)](#import-service-managed-stack-to-existing-stackset)
+ [サービスマネージド型のスタックを既存の StackSet にインポートする (コンソール)](#import-service-managed-stack-to-existing-stackset-console)
+ [サービスマネージド型のスタックを StackSet にインポートする (AWS CLI)](#import-service-managed-stack-to-stackset.cli)

## サービスマネージド型のスタックを新しい StackSet にインポートする (コンソール)
<a name="import-service-managed-stack-to-new-stackset"></a>

AWS マネジメントコンソール を使用して、スタックを新しい StackSet にインポートする

新しいスタックを StackSet にインポートするには、インポートするリソースを含むスタックを特定します。

1. AWS マネジメントコンソール にサインインし、CloudFormation コンソール ([https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)) を開きます。

1. ナビゲーションペインから [**StackSets**] を選択します。

1. [**StackSets**] ページの上部で [**Create StackSet (StackSet の作成)**] を選択します。

1. **[テンプレートを選択]** ページで、次のようにします。

   1. **[StackSet アクセス許可モデル]** で、**[サービス管理のアクセス許可]** (を選択します。

   1. **前提条件 - テンプレートの準備** で、**[テンプレートの準備完了]** を選択し、次のいずれかのオプションを使用してテンプレートを選択します。
      + **[Amazon S3 URL]** で、**[Amazon S3 URL]** フィールドに Amazon S3 URL を入力します。
      + **[テンプレートファイルのアップロード]** で、ローカルコンピュータの CloudFormation テンプレートを選択します。

   設定を受け入れて、**[Next]** (次へ) を選択してください。

1. **[StackSet の詳細を指定]** ページで、以下を実行します。

   1. **[StackSet 名]** ボックスに StackSet 名を入力します。

   1. (オプション) **[StackSet description]** (StackSet の説明) セクションに説明を入力します。

   **[スタックオプションの設定]** ページで、選択内容を確認し、**[次へ]** を選択します。

1. [**デプロイオプションの設定**] ページで、以下を実行します。

   1. **[StackSet にスタックを追加]** で、**[スタックをスタックセットにインポート]** を選択します。

   1. **[Stacks to import]** (インポートするスタック) で、スタックのインポート方法を選択します。

      1. **[Stack ID]** (スタック ID) には、スタック ID を入力します。

      1. **[スタック URL]** で、Amazon S3 URL を入力します。

1. **[組織単位を関連付ける]** で、次を実行します:

   1. ルート OU を使用するには、**[組織に関連付ける]** を選択します。

   1. **[組織単位 (OU) に関連付ける]** を選択して、インポートするスタックの親 OU ID を入力します。例えば、`Stack 1` と `Stack 2` が `OU1` 未満で、`Stack 3` が `OU2` 未満の場合は、`OU1` と `OU2` を入力します。

   設定を受け入れて、**[Next]** (次へ) を選択してください。

1. **[Review]** (確認) ページで、設定を確認し、**[Submit]** (送信) を選択します。

## サービスマネージド型のスタックを作成して、既存の StackSet にインポートする (コンソール)
<a name="import-service-managed-stack-to-existing-stackset"></a>

既存のスタックを新しい StackSet にインポートするには、インポートするリソースを含むスタックを特定します。

**StackSet を作成してスタックをインポートするには**

1. AWS マネジメントコンソール にサインインし、CloudFormation コンソール ([https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)) を開きます。

1. ナビゲーションペインから [**StackSets**] を選択します。

1. [**StackSets**] ページの上部で [**Create StackSet (StackSet の作成)**] を選択します。

1. **[テンプレートを選択]** ページで、次のようにします。

   1. **[StackSet アクセス許可モデル]** で、**[サービス管理のアクセス許可]** (を選択します。

   1. **前提条件 - テンプレートの準備** で、**[テンプレートの準備完了]** を選択し、次のいずれかのオプションを使用してテンプレートを選択します。
      + **[Amazon S3 URL]** で、**[Amazon S3 URL]** フィールドに Amazon S3 URL を入力します。
      + **[テンプレートファイルのアップロード]** で、ローカルコンピュータの CloudFormation テンプレートを選択します。

   設定を受け入れて、**[Next]** (次へ) を選択してください。

1. **[StackSet の詳細を指定]** ページで、以下を実行します。

   1. **[StackSet 名]** ボックスに StackSet 名を入力します。

   1. (オプション) **[StackSet description]** (StackSet の説明) セクションに説明を入力します。

   **[スタックオプションの設定]** ページで、選択内容を確認し、**[次へ]** を選択します。

1. [**デプロイオプションの設定**] ページで、以下を実行します。

   1. **[Add stacks to stack set]** (スタックセットにスタックを追加) で、**[Deploy new stacks]** (新しいスタックのデプロイ) を選択します。

1. 次の情報を **[組織単位を関連付ける]** セクションに追加します。

   1. ルート OU を使用するには、**[組織に関連付ける]** を選択します。

   1. **[組織単位 (OU) に関連付ける]** を選択して、インポートするスタックの親 OU ID を入力します。例えば、`Stack 1` と `Stack 2` が `OU1` 未満で、`Stack 3` が `OU2` 未満の場合は、`OU1` と `OU2` を入力します。

1. **[Specify regions]** (リージョンの指定) と **[Deployment options]** (デプロイオプション) で、選択内容を確認します。

   設定を受け入れて、**[Next]** (次へ) を選択してください。

1. **[Review]** (確認) ページで、設定を確認し、**[Submit]** (送信) を選択します。

## サービスマネージド型のスタックを既存の StackSet にインポートする (コンソール)
<a name="import-service-managed-stack-to-existing-stackset-console"></a>

StackSet を選択し、インポートするスタックを特定します。

**スタックを既存の StackSet にインポートするには**

1. AWS マネジメントコンソール にサインインし、CloudFormation コンソール ([https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)) を開きます。

1. ナビゲーションペインから [**StackSets**] を選択します。

1. スタックをインポートする StackSet を選択し、**[アクション]** ドロップダウンから **[StackSet にスタックを追加]** を選択します。

1. [**デプロイオプションの設定**] ページで、以下を実行します。

   1. **[StackSet にスタックを追加]** で、**[スタックをスタックセットにインポート]** を選択します。

   1. **[インポートするスタック]** で、次の操作を行います。

      1. **[Stack ID]** (スタック ID) には、スタック ID を入力します。

      1. **[スタック URL]** で、Amazon S3 URL を入力します。

   1. **[組織単位を関連付ける]** で、次を実行します:

      1. ルート OU を使用するには、**[組織に関連付ける]** を選択します。

      1. **[組織単位 (OU) に関連付ける]** を選択して、インポートするスタックの親 OU ID を入力します。例えば、`Stack 1` と `Stack 2` が `OU1` 未満で、`Stack 3` が `OU2` 未満の場合は、`OU1` と `OU2` を入力します。

      設定を受け入れて、**[Next]** (次へ) を選択してください。

1. **[Specify overrides]** (上書きの指定) ページを確認し、**[Next]** (次へ) を選択します。

1. **[Review]** (確認) ページを確認して見直し、**[Submit]** (送信) を選択します。

## サービスマネージド型のスタックを StackSet にインポートする (AWS CLI)
<a name="import-service-managed-stack-to-stackset.cli"></a>

StackSet が作成されたら、インポートするスタックのスタック ID を渡すことでスタックをインポートできます。マッピング先の OU ID リストを渡すこともできます。

CloudFormation は、これらの OU 内のユーザー提供のスタックをインポートし、それらの OU を StackSet のデプロイターゲットとして使用します。入力に示されたスタック ID は、内部的に OU ID リスト入力の最も近い OU にマッピングされます。スタックが入力リスト内の既存の OU ID に属していない場合、AWS CLI は `StackNotFoundException` エラーを返します。

`import-stacks-to-stack-set` オペレーションは、OU ID 入力のスタックのスタックインスタンスを作成します。次の AWS CLI の例では、`import-stacks-to-stack-set` オペレーションを使用して、スタックを StackSet にインポートします。
+ `import-stacks-to-stack-sets` オペレーションを使用するには、スタックセットにインポートする `stack-ids` または `stack-ids-url` を指定します。

  ```
  aws cloudformation import-stacks-to-stack-set \
    --stack-set-name ServiceMangedStackSet \
    --stack-ids "arn:123456789012:us-east-1:Stack1" \
    --organizational-unit-ids ou-examplerootid111-exampleouid111
  ```

  ```
  aws cloudformation import-stacks-to-stack-set \
    --stack-set-name ServiceMangedStackSet \
    --stack-ids-url https://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/file-name.json \
    --organizational-unit-ids ou-examplerootid111-exampleouid111
  ```

**注記**  
`import-stacks-to-stack-sets` オペレーションでは、インポートされるスタックをその特定の OU に関連付けることができるように、少なくとも 1 つの組織単位 ID (OU ID) を指定する必要があります。このオペレーションでは、関連する OU 内の他のメンバーアカウントのスタックインスタンスは作成されません。関連する OU のメンバーアカウントを更新するには、`create-stack-instances` または `update-stack-instances` を使用します。

`create-stack-set` は、直接アップロードまたは Amazon S3 のいずれかから、ユーザー提供のテンプレートを使用して、OU の下のすべてのアカウントのスタック インスタンスを作成します。次の AWS CLI の例では、`create-stack-set` オペレーションを使用して、スタックを新しい StackSet にインポートします。
+ `create-stack-set` オペレーションを使用するには、StackSet 名を指定し、新しく作成した StackSet にスタックをインポートします。

  ```
  aws cloudformation create-stack-set \
    --template-url https://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/file-name.json \
    --permission-model SERVICE_MANAGED \
    --auto-deployment Enabled=true
  ```

# CloudFormation StackSets へのスタックのインポートを元に戻す
<a name="revert-stackset-import"></a>

スタックインスタンスに不要な変更がある場合は、スタックインスタンスのインポートを元に戻すことができます。

スタックインスタンスのインポートを元に戻すと、CloudFormation は StackSet からスタックインスタンスを削除しますが、スタックのリソースは保持します。

スタックのインポートオペレーションを元に戻すには、次の手順を完了します。

1. スタックインスタンスが削除された後に保持するリソースごとに `Retain` の `DeletionPolicy` 属性を指定します。詳細については、「[インポートオペレーションを元に戻す](resource-import-revert.md)」を参照してください。

1. StackSet からスタックインスタンスを削除します。詳細については、「[CloudFormation StackSets からスタックを削除する](stackinstances-delete.md)」を参照してください。

1. StackSet を削除します。詳細については、「[CloudFormation StackSets を削除する](stacksets-delete.md)」を参照してください。

# CloudFormation StackSets を使用するためのベストプラクティス
<a name="stacksets-bestpractices"></a>

このセクションでは、StackSet テンプレートの定義、StackSet へのスタックの作成または追加、または StackSet の更新を実行するためのベストプラクティスを説明します。

CloudFormation を初めて使用する場合は、[CloudFormation ベストプラクティス](best-practices.md) トピックで CloudFormation をより効果的かつ安全に使用するのに役立つ他のレコメンデーションを確認してください。

**Topics**
+ [テンプレートの定義](#w2aac15c41b9)
+ [StackSet にスタックを作成または追加する](#w2aac15c41c11)
+ [StackSet でスタックを更新する](#w2aac15c41c13)

## テンプレートの定義
<a name="w2aac15c41b9"></a>
+ 複数のリージョン内の、複数のアカウント内で標準化したいテンプレートを定義します。
+ テンプレートを作成するときに、グローバルリソース (IAM ロールや Amazon S3 バケットなど) を同一アカウントの 1 つ以上のリージョンで作成する場合は、名前の競合が起きないよう注意してください。
+ StackSet は単一のテンプレートとパラメータのセットを持ちます。StackSet に関連付けられたすべてのアカウントで同じスタックが作成されます。テンプレートを作成するときは、制御と標準化のバランスが取れるよう、十分に細かくしてください。
+ テンプレートは Amazon S3 バケットに保存することをお勧めします。

## StackSet にスタックを作成または追加する
<a name="w2aac15c41c11"></a>
+ 多数のスタックインスタンスを StackSet に追加する前に、スタックインスタンスを初期の StackSet に追加することが機能することを確認してください。
+ ユースケースで機能するデプロイ (ロールアウト) オプションを選択します。
  + デプロイをより控えめにするには、[**Maximum Concurrent Accounts (同時アカウントの最大数)**] を 1 に、[**Failure Tolerance (耐障害性)**] を 0 に設定してください。影響が最も小さいリージョンが [**Region Order (リージョンオーダー)**] リストの先頭になるように設定します。1 つのリージョンから開始します。
  + デプロイを高速にする場合、**最大アカウントの同時数**と**耐障害性**の値を増やします。
+ StackSets のオペレーションは、関係するスタックインスタンスの数に依存し、莫大な時間がかかることがあります。

## StackSet でスタックを更新する
<a name="w2aac15c41c13"></a>
+ デフォルトでは、StackSet を更新すると、すべてのスタックインスタンスが更新されます。2 つのリージョンにそれぞれ 20 個のアカウントがある場合、40 個のスタックインスタンスを持ち、StackSet を更新するとすべて更新されます。

  多数のスタックインスタンスを含む StackSets の場合、テンプレートの更新バージョンをテストするには、すべてのスタックインスタンスを更新する前に、いくつかのテストアカウントでスタックインスタンスを選択的に更新することをお勧めします。
+ StackSet 内の個々のスタックの更新をよりきめ細かく制御するには、複数の StackSets を作成することを計画してください。
+ 多数のスタックを持つ StackSet を更新するには、長い時間がかかることがあります。このリリースでは、一度に 1 つのオペレーションのみが StackSet に許可されます。StackSet で他のオペレーションを実行できなくなることがないように更新を計画してください。

# CloudFormation StackSets サンプルテンプレート
<a name="stacksets-sampletemplates"></a>

このセクションには、エンタープライズで CloudFormation StackSets を使用する手助けとなる、いくつかの CloudFormation テンプレートへのリンクが含まれています。このセクションに示すテンプレートは [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) または [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html) と共に、その中のルールも有効にします。

**重要**  
AWS Config から Amazon S3 バケットへのアクセスを許可する場合のセキュリティのベストプラクティスとして、バケットポリシーで `AWS:SourceAccount` 条件を使用してアクセスを制限することを強くお勧めします。新しいテンプレートは、`AWS:SourceAccount` を含むよう更新されました。既存のバケットポリシーがこのセキュリティのベストプラクティスに従わない場合は、この保護を含めるようにバケットポリシーを編集することを強くお勧めします。これにより、AWS Config は想定されるユーザーにのみアクセス権が付与されます。


| 説明 | S3 リンク | 
| --- | --- | 
| AWS CloudTrail の有効化 | [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSCloudtrail.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSCloudtrail.yml) | 
| AWS Config の有効化 | [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSConfig.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSConfig.yml) | 
| 中央ログで AWS Config を有効にする | [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSConfigForOrganizations.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSConfigForOrganizations.yml) | 
| AWS 組織、または特定の AWS アカウント全体で Amazon Data Lifecycle Manager デフォルトポリシーを有効にする |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/stacksets-sampletemplates.html) [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/ConfigRuleEncryptedVolumes.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/ConfigRuleEncryptedVolumes.yml) | 
| CloudTrail が有効になっているかどうかを判断するために AWS Config ルールを設定する | [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/ConfigRuleCloudtrailEnabled.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/ConfigRuleCloudtrailEnabled.yml) | 
| ルート MFA が有効になっているか判断するために AWS Config を設定する | [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/ConfigRuleRootAccountMFAEnabled.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/ConfigRuleRootAccountMFAEnabled.yml) | 
| EIP が添付されているか判断するために AWS Config を設定する | [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/ConfigRuleEipAttached.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/ConfigRuleEipAttached.yml) | 
| EBS ボリュームが暗号化されているか判断するために AWS Config を設定する | [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/ConfigRuleEncryptedVolumes.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/ConfigRuleEncryptedVolumes.yml) | 

# CloudFormation StackSets のトラブルシューティング
<a name="stacksets-troubleshooting"></a>

このトピックでは、 StackSets の一般的な問題と推奨される解決方法について説明します。

**Topics**
+ [スタックオペレーション失敗の一般的な原因](#common-reasons-for-stack-operation-failure)
+ [失敗したスタック作成または更新オペレーションを再試行する](#retrying-failed-stack-creation-or-update-operations)
+ [スタックインスタンスの削除に失敗する場合](#stack-instance-delete-fails)
+ [スタックのインポートオペレーションが失敗する](#stack-import-fails)
+ [StackSets オペレーションのスタックインスタンスの失敗回数](#stack-instance-failure-count-for-stackset-operations)

## スタックオペレーション失敗の一般的な原因
<a name="common-reasons-for-stack-operation-failure"></a>

**問題:** スタックオペレーション失敗。スタックインスタンスのステータスは `OUTDATED` です。

**原因:** スタックオペレーションが失敗する一般的な原因は複数あります。
+ テンプレートで指定されているリソースを作成するターゲットアカウントのアクセス権限が不十分。
+ CloudFormation テンプレートでエラーが発生する場合があります。CloudFormation のテンプレートを検証し、StackSet を作成する前にエラーを修正します。
+ テンプレートで、グローバルリソースを作成しようとしています。S3 バケットのように一意である必要がありますが、このリソースは一意ではありません。
+ 指定されたターゲットアカウント番号は存在しません。ウィザードの [**Set deployment options (デプロイオプションの設定)**] ページで指定したターゲットアカウント番号を確認します。
+ この管理者アカウントには、ターゲットアカウントとの信頼関係はありません。
+ テンプレートで指定されているリソースの最大数が既にターゲットアカウントに存在しています。たとえば、ターゲットアカウントで許可されている IAM ロールの制限に達していますが、テンプレートを使用して、さらに IAM ロールを作成できます。
+ StackSet で許可されているスタックの最大数に達しました。StackSet あたりのスタックの最大数については、「[CloudFormation クォータを理解する](cloudformation-limits.md)」を参照してください。

**ソリューション:** StackSet を作成する前にターゲットアカウントおよび管理者アカウントで必要とされるアクセス許可の詳細については、「[管理者アカウントのすべてのユーザーに、すべてのターゲットアカウントのスタックを管理するための許可を付与します。](stacksets-prereqs-self-managed.md#stacksets-prereqs-accountsetup)」を参照してください。

## 失敗したスタック作成または更新オペレーションを再試行する
<a name="retrying-failed-stack-creation-or-update-operations"></a>

**問題:** スタック作成またはスタック更新の失敗。スタックインスタンスのステータスは `OUTDATED` です。スタックの作成または更新に失敗した場合にトラブルシューティングするには、CloudFormation コンソールを開いてスタックのイベントを表示します。ステータスは、`DELETED` (作成オペレーションに失敗した場合)、または `FAILED` (更新オペレーションに失敗した場合) と表示されます。スタックイベントを参照し、[**状況の理由**] 列を検索します。[**状況の理由**] の値は、スタックオペレーションが失敗した理由を表します。

スタック作成失敗の根本的な原因を修正したら、スタック作成を再試行するために次の手順を行います。

**ソリューション:** スタックオペレーションを再試行するために、次のステップを行います。

1. コンソールで、オペレーションが失敗したスタックを含む StackSet を選択します。

1. [**アクション**] メニューで [**Edit StackSet details (StackSet の詳細を編集)**] を選択して、スタックの作成または更新を再試行します。

1. **[テンプレートの指定]** ページで、同一の CloudFormation テンプレートを使用するために、デフォルトオプション **[現在のテンプレートの使用]** をそのまま使用します。テンプレートを変更せざるを得なかったことでスタックオペレーションに失敗したため、修正後のテンプレートをアップロードする場合は、[**テンプレートを Amazon S3 にアップロード**]、[**参照**] の順に選択して、アップデート後のテンプレートを選択します。修正後のテンプレートのアップロードが完了したら、[**次へ**] を選択します。

1. **[スタックの詳細を指定]** ページで、テンプレート固有のパラメータを変更していない場合は、**[次へ]** を選択します。

1. [**Set deployment options (デプロイオプションの設定)**] ページで、必要に応じて [**Maximum concurrent accounts (同時アカウントの最大数)**] および [**Failure tolerance (耐障害性)**] のデフォルトを変更します。これらの設定の詳細については、「[StackSet オペレーションのオプション](stacksets-concepts.md#stackset-ops-options)」をご参照ください。

1. [**確認**] ページで選択内容を確認し、チェックボックスをオンにして必要な IAM 機能を確認します。[**Submit**] を選択してください。

1. スタックが正常に更新されたら、スタックの作成を妨げている根本的な問題が解決されるまで、この手順を繰り返します。

## スタックインスタンスの削除に失敗する場合
<a name="stack-instance-delete-fails"></a>

**問題:** スタックの削除に失敗した。

**原因:** 削除保護が有効になっているスタックでは、スタックを削除できない。

**解決策:** スタックの削除保護が有効になっているかどうかを確認する。有効になっている場合は、削除保護を無効にし、スタックインスタンスの実行を再度行います。

## スタックのインポートオペレーションが失敗する
<a name="stack-import-fails"></a>

**問題:** スタックのインポートオペレーションで、既存のスタックを新規または既存の StackSets にインポートできません。スタックインスタンスは `INOPERABLE` ステータスです。

**解決策:** 次のタスクを完了して、スタックのインポートオペレーションを元に戻します。

1. **[StackSets からスタックを削除]** オプションを使用し、設定中に **[RetainStacks]** を有効にしてから、続行して StackSet からスタックインスタンスを削除します。詳細については、「[CloudFormation StackSets からスタックを削除する](stackinstances-delete.md)」を参照してください。

1. `INOPERABLE` スタックインスタンスを削除するために Stackset のスタックインスタンスが更新されていることがわかります。

1. インポート失敗エラーに従ってスタックインスタンスを修正し、スタックインポートオペレーションを再試行します。

## StackSets オペレーションのスタックインスタンスの失敗回数
<a name="stack-instance-failure-count-for-stackset-operations"></a>

スタックインスタンスの失敗回数は、スタックインスタンスのプロビジョニングまたは更新に失敗した場合に警告を発します。これらのスタックインスタンスは、次のいずれかの理由でデプロイされませんでした。
+ 類似した設定を持つ既存のリソース
+ AWS Identity and Access Management (IAM) ロールなどの依存関係の欠落
+ その他の相反要因

最大同時実行数でデプロイする場合、最大同時実行数は最大で失敗許容回数より 1 つ多くなります。例えば、失敗許容回数が 9 である場合、最大同時実行数は 10 を超えることはできません。これにより、一部のスタックインスタンスが更新に失敗した場合でも、オペレーションは `SUCCEEDED` を返します。新しいスタックインスタンスの失敗回数により、失敗許容回数がすべての失敗を許容するように設定されているため、オペレーションが条件付きでのみ成功したかどうかを判断できます。

AWS マネジメントコンソール、AWS SDK、または AWS CLI を使用して失敗回数を取得し、スタックインスタンスをフィルタリングして、再デプロイが必要なインスタンスを判断できます。

### コンソールを使用する
<a name="stack-instance-failure-count-for-stackset-operations-console-examples"></a>

**失敗したスタックインスタンスの数を表示するには:**

1. [CloudFormation コンソール](https://console.aws.amazon.com/cloudformation)を開き、**[StackSets]** を選択します。

1. StackSet を選択し、**[Operations]** (オペレーション) タブを選択します。

1. **[Status]** (ステータス) 列でステータスを選択すると、ステータスの詳細が表示されます。特定のオペレーションで失敗したスタックインスタンスの数は、ステータスの詳細で確認できます。

**オペレーションのスタックインスタンスのステータス、リージョン、アカウントを表示するには:**

1. ステータスの詳細で、失敗したスタックインスタンスの回数を選択します。例: **[Stack instances: `<number of failed stack instances>`]** (スタックインスタンス: )。

1. パネルヘッダーを選択してサイドパネルを拡張します。サイドパネルの結果は、選択したオペレーションが完了した後のスタックインスタンスのステータスです。

**オペレーションの現在のスタックインスタンスの詳細を表示するには:**

1. **[Stack Instances]** (スタックインスタンス) タブを選択します。

1. **[Last operation ID]** (最終オペレーション ID) でフィルタリングします。結果には、インスタンスを変更した最後のオペレーションからの現在のステータスとステータス理由が表示されます。このフィルターを **[AWS アカウント]**、**[AWS リージョン]**、**[詳細ステータス]**、**[ドリフトステータス]** と組み合わせて使用すると、検索結果をさらに絞り込むことができます。

### AWS CLI を使用する場合
<a name="stack-instance-failure-count-for-stackset-operations-cli-examples"></a>

失敗したスタックインスタンスの数を取得するには、`describe-stack-set-operation` または `list-stack-set-operations` を呼び出して、`StatusDetails` を参照してください。

```
aws cloudformation describe-stack-set-operation --stack-set-name ss1 \
    --operation-id 5550e62f-c822-4331-88fa-21c1d7bafc60
```

```
{
    "StackSetOperation": {
        "OperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60",
        "StackSetId": "ss1:9101ca57-49fc-4a61-a5a6-4c97b8adb08f",
        "Action": "CREATE",
        "Status": "SUCCEEDED",
        "OperationPreferences": {
            "RegionOrder": [],
            "FailureToleranceCount": 10,
            "MaxConcurrentCount": 10
        },
        "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole",
        "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole",
        "CreationTimestamp": "2022-10-26T17:18:53.947000+00:00",
        "EndTimestamp": "2022-10-26T17:19:35.304000+00:00",
        "StatusDetails": {
            "FailedStackInstancesCount": 3
        }
    }
}
```

```
aws cloudformation list-stack-set-operations --stack-set-name ss1
```

```
{
    "Summaries": [
        {
            "OperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60",
            "Action": "CREATE",
            "Status": "SUCCEEDED",
            "CreationTimestamp": "2022-10-26T17:18:53.947000+00:00",
            "EndTimestamp": "2022-10-26T17:19:35.304000+00:00",
            "StatusDetails": {
                "FailedStackInstancesCount": 3
            },
            "OperationPreferences": {
                "RegionOrder": [],
                "FailureToleranceCount": 10,
                "MaxConcurrentCount": 10
            }
        }
    ]
}
```

特定のオペレーションの履歴概要を把握するには、`list-stack-set-operation-results` を使用して、オペレーションが完了した後の各スタックインスタンスのステータスとステータスの理由を表示します。`Status` と `StatusReason` を見つけるには、次の例を参照してください。

```
aws cloudformation list-stack-set-operation-results --stack-set-name ss1 \
  --operation-id 5550e62f-c822-4331-88fa-21c1d7bafc60 --filters Name=OPERATION_RESULT_STATUS,Values=FAILED
```

```
{
    "Summaries": [
        {
            "Account": "123456789012",
            "Region": "us-west-2",
            "Status": "FAILED",
            "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.",
            "AccountGateResult": {
                "Status": "SKIPPED",
                "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'."
            },
            "OrganizationalUnitId": ""
        },
        {
            "Account": "123456789012",
            "Region": "us-west-1",
            "Status": "FAILED",
            "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.",
            "AccountGateResult": {
                "Status": "SKIPPED",
                "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'."
            },
            "OrganizationalUnitId": ""
        },
        {
            "Account": "123456789012",
            "Region": "us-east-1",
            "Status": "FAILED",
            "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.",
            "AccountGateResult": {
                "Status": "SKIPPED",
                "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'."
            },
            "OrganizationalUnitId": ""
        }
    ]
}
```

`list-stack-instances` を `DETAILED_STATUS` フィルターおよび `LAST_OPERATION_ID` フィルターと一緒に使用すると、スタックインスタンスをデプロイしようとした最後のオペレーションで失敗したスタックインスタンスのリストを取得できます。`DETAILED_STATUS` と `LAST_OPERATION_ID` を含む例の `--filters` フラグを参照してください。

```
aws cloudformation list-stack-instances --stack-set-name ss1 \
  --filters Name=DETAILED_STATUS,Values=FAILED Name=LAST_OPERATION_ID,Values=5550e62f-c822-4331-88fa-21c1d7bafc60
```

```
{
    "Summaries": [
        {
            "StackSetId": "ss1:9101ca57-49fc-4a61-a5a6-4c97b8adb08f",
            "Region": "us-east-1",
            "Account": "123456789012",
            "Status": "OUTDATED",
            "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.",
            "StackInstanceStatus": {
                "DetailedStatus": "FAILED"
            },
            "OrganizationalUnitId": "",
            "DriftStatus": "NOT_CHECKED",
            "LastOperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60"
        },
        {
            "StackSetId": "ss1:9101ca57-49fc-4a61-a5a6-4c97b8adb08f",
            "Region": "us-west-1",
            "Account": "123456789012",
            "Status": "OUTDATED",
            "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.",
            "StackInstanceStatus": {
                "DetailedStatus": "FAILED"
            },
            "OrganizationalUnitId": "",
            "DriftStatus": "NOT_CHECKED",
            "LastOperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60"
        },
        {
            "StackSetId": "ss1:9101ca57-49fc-4a61-a5a6-4c97b8adb08f",
            "Region": "us-west-2",
            "Account": "123456789012",
            "Status": "OUTDATED",
            "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.",
            "StackInstanceStatus": {
                "DetailedStatus": "FAILED"
            },
            "OrganizationalUnitId": "",
            "DriftStatus": "NOT_CHECKED",
            "LastOperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60"
        }
    ]
}
```

スタックインスタンスを変更する最後のオペレーション ID を見つけるには、`list-stack-instances` または `describe-stack-instance` を使用して `LastOperationId` を取得します。

```
aws cloudformation describe-stack-instance --stack-set-name ss1 \
  --stack-instance-account 123456789012 --stack-instance-region us-east-2
```

```
{
    "StackInstance": {
        "StackSetId": "ss1:9101ca57-49fc-4a61-a5a6-4c97b8adb08f",
        "Region": "us-west-2",
        "Account": "123456789012",
        "ParameterOverrides": [],
        "Status": "OUTDATED",
        "StackInstanceStatus": {
            "DetailedStatus": "FAILED"
        },
        "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.",
        "OrganizationalUnitId": "",
        "DriftStatus": "NOT_CHECKED",
        "LastOperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60"
    }
}
```