OU指定でStackSetsを適用している際に、Stackを削除せずにAWSアカウントを別OUに移動する方法

2023.04.10

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

「StackSetsで展開したStackに影響を与えずにOU移動させる」

OU指定で展開しているStackSetsを適用されているアカウントを別のOUに移動してみました。

やりたいこと

OU指定でStackSetsを展開しています。 特定アカウントを別のOUに移動させたいです。

前提

StackSetsの設定は「自動デプロイ:有効」かつ「アカウント削除の動作:削除」とします。

この設定の場合、指定していないOUに移動すると、Stackは削除されてしまいます。

しかし、OU移動で展開したStackを削除したり、StackSetsの再登録はしたくありません。

結論

移動前にStackSetsに移動先のOU IDを追加、(必要であれば)移動後に移動元のOU IDを削除

手順は以下です。

やってみた

実際にStackを削除せずに、AWSアカウントを別OUに移動します。

  1. StackSetにStackを追加して、新しいOU IDを追加する
  2. 新しいOUにアカウントを移動する
  3. StackSetsからStackを削除して、古いOU IDを削除する
  • 移動元OU: hoge
  • 移動先OU: fuga
  • 移動するアカウント名: stacksets-test

移動元OUには、StackSetsが適用されている状態です。

移動するアカウントのCloudFormationは、以下のようにStackSetsで適用されたStackがあります。

Stack Setsのデプロイ設定は、以下です。

パラメータ 設定値
自動デプロイ 有効化
アカウント削除時にスタックを保持 スタックを削除

1. StackSetにStackを追加して、新しいOU IDを追加する

以下のコマンドでStackSetsの適用対象になっているOU IDを確認します。(GUIで確認できなさそうだっため、CLIで)

$ aws cloudformation describe-stack-set --stack-set-name stacksets-test --query StackSet.OrganizationalUnitIds
[
    "ou-1111-XXXXXX" # hoge OUのOU ID
]

移動先OU fugaのOU IDを登録します。

Stack Setsを選択して、「StackSetにスタックを追加」します。

fuga OUのOU IDを登録して、設定を完了します。

再度コマンドで対象のOU IDを確認すると、fuga OUのOU IDが追加されています。

aws cloudformation describe-stack-set --stack-set-name <StackSet名> --query StackSet.OrganizationalUnitIds
[
    "ou-1111-XXXXXX", # hoge OUのOU ID
    "ou-1111-YYYYYY" # 追加 fuga OUのOU ID
]

2. 新しいOUにアカウントを移動する

実際にアカウントを移動させてみましょう。

対象アカウントのCloudFormationを見てみます。 変更はなく想定通りの動作です。

3. StackSetsからStackを削除して、古いOU IDを削除する

古いOU ID(hoge)を削除します。

コマンドを実行して、OU hogeのOU IDが消えていることを確認します。

aws cloudformation describe-stack-set --stack-set-name <StackSet名> --query StackSet.OrganizationalUnitIds
[
    "ou-1111-YYYYYY" # fuga OUのOU ID
]

おわりに

OU指定でStackSetsを適用している際に、Stackを削除せずにAWSアカウントを別OUに移動する方法でした。

移動前にStackSetsに移動先のOU IDを追加、(必要であれば)移動後に移動元のOU IDを削除」の操作を行うことで、StackSetsの設定で「アカウント削除の動作:削除」の場合にも、Stackを削除せずに移動できます。

以上、AWS事業本部の佐藤(@chari7311)でした。