AWS Organizations 経由の CloudFormation StackSets のスタックを削除する

2021年4月29日

概要

やりたいこと

Organizations 経由(サービスマネージド型)で OU に作成した CloudFormation Stack を削除したい。

OU に対して CloudFormation Stack の作成は下記を参照。

スタックリソースの削除方法

削除する方法は2つある。

  • StackSet の stack instance を削除(手動)
  • OU から AWS アカウントが外れた時に削除(自動)

StackSet の stack instance を削除(手動)

StackSet から stack instance を削除する際、「–no-retain-stacks」 を指定するとスタックインスタンスも一緒に削除してくれる。

aws cloudformation delete-stack-instances \
 --profile organizations-test-lac \
--stack-set-name switch-role-organizations \
--deployment-targets OrganizationalUnitIds="ou-xxxx-xxxxxxxx" \
--regions '["ap-northeast-1"]' \
--no-retain-stacks

逆に、 –retain-stacks を指定すると、スタックリソースは保持したままとなる。

aws cloudformation delete-stack-instances \
 --profile organizations-test-lac \
--stack-set-name switch-role-organizations \
--deployment-targets OrganizationalUnitIds="ou-xxxx-xxxxxxxx" \
--regions '["ap-northeast-1"]' \
--retain-stacks

OU から AWS アカウントが外れた時に削除(自動)

OU に AWS アカウントを追加した際、自動で設定を適用するかどうかは StackSeet の auto-deployment の RetainStacksOnAccountRemoval で指定する。

auto-deployment の RetainStacksOnAccountRemoval を false に指定すれば、 OU からを離れた際にスタックを自動で削除してくれる。

aws cloudformation update-stack-set \
--profile organizations-test-lac \
--stack-set-name switch-role-organizations \
--template-body file://switch_role.yaml \
--parameters ParameterKey=SecurityAccountId,ParameterValue=111122223333 \
--capabilities CAPABILITY_NAMED_IAM \
--auto-deployment Enabled=true,RetainStacksOnAccountRemoval=false

逆に、true に設定した場合、OU から AWS アカウントが外れてもスタックは保持されたままとなる。

aws cloudformation update-stack-set \
--profile organizations-test-lac \
--stack-set-name switch-role-organizations \
--template-body file://switch_role.yaml \
--parameters ParameterKey=SecurityAccountId,ParameterValue=111122223333 \
--capabilities CAPABILITY_NAMED_IAM \
--auto-deployment Enabled=true,RetainStacksOnAccountRemoval=true

CloudFormation StackSets

StackSet の stack instance を削除

対象 AWS アカウントの stack instance を削除し、明示的にスタックを削除する。

aws cloudformation delete-stack-instances \
--profile organizations-test-lac \
--stack-set-name switch-role-organizations \
--deployment-targets OrganizationalUnitIds="ou-xxxx-xxxxxxxx" \
--regions '["ap-northeast-1"]' \
--no-retain-stacks

使い分けとしては、以下2つの場合はこちらを使う感じ。

  • OU から外さないが設定を消したい
  • 一部のリージョンのみ設定を消したい

OU から AWS アカウントが外れた時に削除

StackSet 作成。RetainStacksOnAccountRemoval は false としておく。

aws update-stack-set \
--profile organizations-test-lac cloudformation \
--stack-set-name switch-role-organizations \
--template-body file://switch_role.yaml \
--parameters ParameterKey=SecurityAccountId,ParameterValue=111122223333 \
--capabilities CAPABILITY_NAMED_IAM \
--auto-deployment Enabled=true,RetainStacksOnAccountRemoval=false

GUI で確認すると、以下のようになる。

Organizations コンソール より、AWS アカウントを OU から移動させると、対象の AWS アカウントの stack instance の削除が自動で開始される。

結果、対象 AWS アカウントからスタックも削除される。

参考

StackSets の概念

スタックセットからのスタックインスタンスの削除