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

概要

やりたいこと

Organizations 経由で OU にデプロイした CloudFormation スタックを削除したい。

下記を題材とする。

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

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

  • OU から外れたタイミングで自動削除
  • スタックインスタンス削除時にスタックを削除

OU から外れたタイミングで自動削除

StackSet 作成時に、その StackSet に含まれるアカウントに対して自動で設定を適用するかどうかを選べるパラメータ auto-deployment が存在する。

auto-deployment の RetainStacksOnAccountRemoval パラメータを false に指定しておけば OU を離れた際にスタックを自動で削除してくれる。

--auto-deployment Enabled=true,RetainStacksOnAccountRemoval=false

スタックインスタンス削除時にスタックも削除

–no-retain-stacks を指定し、スタックインスタンスを削除すると、そのインスタンスの関連づいているスタックリソースも削除してくれる。

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

CloudFormation StackSets

OU から外れたタイミングで自動削除

RetainStacksOnAccountRemoval を false とする。

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

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

この状態で OU を移動させると、この OU を指定して作成されたスタックインスタンスの削除が始まる。

対象アカウントのスタックインスタンスも削除されている。

スタックインスタンス削除時にスタックも削除

–no-retain-stacks パラメータを指定する。

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

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

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

参考

StackSets の概念

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