メニュー
AWS CloudFormation
ユーザーガイド (API Version 2010-05-15)

StackSets の概念

StackSets を使用する場合は、スタックセットスタックインスタンススタックを使用します。

管理者アカウントおよびターゲットアカウント

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

スタックセット

スタックセットでは、1 つの AWS CloudFormation テンプレートを使用して、複数のリージョンの AWS アカウントにスタックを作成できます。各スタックに含まれるリソースはすべて、スタックセットの AWS CloudFormation テンプレートで定義されます。スタックセットを作成する際、使用するテンプレートに加え、そのテンプレートで必要なパラメータや機能を指定します。

スタックセットを定義したら、指定したターゲットアカウントやリージョンのスタックを作成、更新、削除できるようになります。スタックを作成、更新、削除する際、オペレーション設定 (オペレーションを実行するリージョンの順序、スタックオペレーションを停止する障害耐性、スタックでオペレーションを同時に実行するアカウント数など) を指定することもできます。

スタックセットはリージョンのリソースです。1 つのリージョンにスタックを作成した場合、他のリージョンでそのスタックを表示または変更することはできません。

スタックインスタンス

スタックインスタンスは、リージョン内のターゲットアカウントのスタックへの参照です。スタックインスタンスは、スタックがなくても存在することができます。たとえば、何らかの理由によりスタックが作成されていない場合は、スタック作成の失敗理由がスタックインスタンスに表示されます。スタックインスタンスに関連付けられるスタックセットは、1 つのみです。

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

複数のアカウントおよびリージョンのスタックインスタンスやスタックを作成、更新、削除するための判断材料として、1 つのスタックセットを確保できます。

スタックセットオペレーション

スタックセットでは、以下の操作を実行できます。

スタックセットの作成

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

スタックセットの更新

スタックセットを更新したら、スタックセットのスタックに変更内容をプッシュします。スタックセットは、以下のいずれかの方法で更新できます。テンプレートをアップデートすると必ずすべてのスタックに反映されます。スタックセットの一部スタックのテンプレートを選択してアップデートすることはできません。その他のスタックもアップデートされます。

  • テンプレートの既存の設定を変更するか (例: 特定のサービスのパラメータ設定の更新)、新しいリソースを追加します (例: 新しい Amazon EC2 インスタンスの追加)。

  • テンプレートを別のテンプレートに置き換えます。

  • 既存のリージョンまたは追加リージョンの既存または追加のターゲットアカウントにスタックを追加します。

スタックの削除

スタックを削除する場合は、指定したリージョン内の指定したターゲットアカウントから、スタックおよび関連付けられているリソースを削除します。スタックは次の方法で削除できます。

  • 一部のターゲットアカウントからスタックを削除し、実行中の他のターゲットアカウントの他のスタックはそのままにしておきます。

  • 一部のリージョンからスタックを削除し、実行中の他のリージョンのスタックはそのままにしておきます。

  • スタックセットからスタックを削除しても保存されるため、[Retain Stacks] オプションを選択して、引き続き、個別にスタックセットを実行できます。保持されているスタックは、スタックセット外の AWS CloudFormation で管理されています。

  • スタックセット全体を削除する準備段階として、スタックセット内のすべてのスタックを削除します。

スタックセットの削除

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

スタックセットオペレーションのオプション

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

同時アカウントの最大数

この設定は、ワークフローの作成、更新、削除に利用できるだけでなく、一度にオペレーションが実行されるターゲットアカウントの最大数または割合 (%) を指定することができます。数または割合 (%) が少ない場合は、オペレーションが、一度に少数のターゲットアカウントで実行されていることを表します。オペレーションは、[Deployment order] ボックスで指定した順序で実行されます。たとえば、スタックを 2 つのリージョンの 10 のターゲットアカウントにデプロイした場合、[Maximum concurrent accounts] を [50] と [By percentage] に設定すると、スタックは、最初のリージョンの 5 つのアカウント、次に、最初のリージョンの次の 5 つのアカウントにデプロイされた後、次のリージョンに移動し、最初の 5 つのターゲットアカウントへのデプロイが開始されます。

[By percentage] を選択して、指定された割合 (%) が指定したアカウントの整数にならない場合は、AWS CloudFormation によって丸められます。たとえば、スタックを 10 のターゲットアカウントにデプロイし、[Maximum concurrent accounts] を [25] と [By percentage] に設定した場合は、同時にデプロイされるスタック数は、AWS CloudFormation によって 2.5 (設定できません) から 2 に丸められます。

この設定では、オペレーションの最大値を指定できます。大規模なデプロイの場合、特定の状況下では、同時に処理される実際のアカウント数はサービスのスロットリングのために低くなる可能性があります。

障害耐性

この設定は、ワークフローの作成、更新、削除に利用できるだけでなく、スタックオペレーション失敗を許容する最大数または割合 (%) を指定することができます。この値を超えると、オペレーションは AWS CloudFormation によって自動的に停止されます。数値または割合 (%) が少ない場合は、オペレーションで実行されているスタックが少数であることを意味しますが、失敗したオペレーションのトラブルシューティングをすばやく開始することができます。たとえば、10 のスタックを 3 つのリージョン内の 10 のターゲットアカウントにデプロイした場合、[Failure tolerance] を [20] と [By percentage] に設定すると、オペレーションを続行するために、最大 2 つのスタックのアップデートがリージョン内で失敗することがあります。同リージョンの 3 番目のスタックで失敗した場合、AWS CloudFormation はオペレーションを停止します。最初のリージョンでスタックを更新できなかった場合、更新オペレーションはそのリージョンで続行され、その後、次のリージョンに移行します。2 番目のスタックを 2 番目のリージョンで更新できない場合、障害耐性は 20% に達し、同リージョンの 3 番目のスタックが失敗した場合、AWS CloudFormation は更新オペレーションを停止し、次のリージョンに移行することもありません。

[By percentage] を選択して、指定された割合 (%) が、各リージョン内のスタックの整数にならない場合は、AWS CloudFormation によって丸められます。たとえば、スタックを 3 つのリージョンの 10 のターゲットアカウントにデプロイし、[Failure tolerance] を [25] と [By percentage] に設定した場合、リージョンあたりの障害耐性 2.5 (設定できません) は、AWS CloudFormation によって 2 に丸められます。

スタックの保持

この設定は、スタックワークフローの削除に利用することができるだけでなく、スタックセットから削除されても、スタックやリソースを引き続き実行することができます。スタックを保持すると、スタックは個別のアカウントとリージョンにそのまま残ります。スタックはスタックセットから関連付けが解除されますが、スタックとそのリソースは保存されます。スタックの削除オペレーションが完了したら、作成されたターゲットアカウント (管理者アカウントではありません) を使用して、AWS CloudFormation で保持されているスタックを管理します。スタックを永続的に保持している場合は、スタックセットからスタックの関連付けを解除することはできません。そのため、スタックは、そのスタックセットはもちろん、新しいスタックセットに追加することはできません。

Tags

スタックセットの作成オペレーションおよび更新オペレーション時にタグを追加するには、キーと値のペアを指定します。請求額とコストの配分を行うためにスタックセットリソースのソートおよびフィルタリングを行う場合は、タグが便利です。AWS でのタグの使用方法に関する詳細については、『AWS Billing and Cost Management ユーザーガイド』の「コスト配分タグの使用」を参照してください。キーと値のペアを指定したら、[+] を選択してタグを保存します。今後使用しないタグを削除するには、赤い [X] をタグの右側に選択します。

スタックセットに適用するタグは、すべてのスタック、およびスタックで作成されるリソースに適用されます。タグは、スタック専用レベルで AWS CloudFormation に追加できますが、このようなタグは、StackSets で表示されない場合があります。

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

スタックセットおよびスタックインスタンスのステータスコード

AWS CloudFormation StackSets は、スタックセットオペレーションおよびスタックインスタンスのステータスコードを生成します。

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

スタックセットオペレーションのステータス 説明

RUNNING

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

SUCCEEDED

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

FAILED

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

STOPPING

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

STOPPED

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

スタックセット内のスタックインスタンスのステータスコードを次のテーブルに示します。

スタックインスタンスの状態 説明

CURRENT

スタックは、スタックセットと同様、最新の状態です。

OUTDATED

スタックは、以下のいずれかの理由により、スタックセットと同じ最新状態になっていません。

  • 関連付けられたスタックの CreateStackSet オペレーションまたは UpdateStackSet オペレーションが失敗した

  • スタックが作成または更新される前に、失敗または停止した CreateStackSet オペレーションまたは UpdateStackSet オペレーションの一部である

INOPERABLE

DeleteStackInstances オペレーションが失敗し、不安定な状態で放置されているこの状態のスタックは、今後の UpdateStackSet オペレーションから除外されます。必要に応じて、RetainStackstrue に設定して DeleteStackInstances オペレーションを実行し、スタックインスタンスを削除します。その後、手動でスタックを削除します。