OU指定・自動デプロイ無効で展開しているStackSetにアカウント追加してみた

OU指定・自動デプロイ無効で展開しているStackSetにアカウント追加してみた
2022.08.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、おんづか(@onzuka_muscle)です!

AWS CloudFormation StackSetsでOrganizational unit(以降OU)を指定してスタックを展開するの便利ですよね。

自動デプロイを無効にしている場合、後からOUにアカウントを追加してそのアカウントにスタックを展開したいときはどのような手順が必要になるか、本ブログでご紹介します。

なおアクセス許可形式はサービス管理型(service-managed)になります。

(一応、self-managedでもOU指定の展開はできますが一手間かかるのでオススメしません。)

サービス管理型(service-managed)ってなに?という方は先にこちらをご覧ください。

マネジメントコンソールからやってみた

以下、検証の前提です。

  • スタックの展開先はバージニアリージョンのみ
  • テンプレート・パラメータは変更しません
  • 作成されるリソースはS3バケット一個

StackSetの作成部分についてはこちらのブログをご参考ください。本ブログでは省略します。

作成済みのStackSetです。

Organizationsのメニュー画面より対象OUに新たにアカウントを追加します。

その後、スタックを追加していきます。

StackSet作成時と同じOU・リージョンの指定をしてスタック作成を開始します。

作成を開始した直後です。

ターゲットアカウントBが表示されました。

もともとスタックインスタンスが存在したターゲットアカウントAもステータスがCURRENTからOUTDATEDに変わります。

少し待つとオペレーションが正常終了しました。

もともとスタックインスタンスが存在したターゲットアカウントAについてはNo updates are to be performed.と表示され更新がなかったことが分かります。

ターゲットアカウントBから確認したところ、正常にスタックが展開されS3バケットが作成されていました。

AWS CLIからやってみた

AWS CLIからもやってみます。

全く同じ流れのため図やキャプチャは省略します。

create-stack-instances

コマンドのサンプル

aws cloudformation create-stack-instances \
  --regions us-east-1 \
  --stack-set-name {STACK_SET_NAME} \
  --deployment-targets OrganizationalUnitIds={OU_ID}

補足

個別にアカウントを指定して展開できるか?

これまで紹介した手順の場合、OU内に新しく追加されたアカウントが複数あったらその全てにスタックインスタンス作成のオペレーションが走ります。

では個別にアカウントを指定して「このアカウントにはスタックインスタンスを作成する。このアカウントには作成しない。」といったことができるのでしょうか?

こちらのアップデートで可能になりました。

一例として、下記のよう設定することでアカウントを個別にして展開できます。

以上です!