概要
やりたいこと
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 アカウントからスタックも削除される。
コメント