AWS CDK経由で作成したAWS CloudFormationスタックが削除できない時は、CDKブートストラップのスタックを先に削除したかどうか確認しよう
AWS CDK経由で作成したAWS CloudFormationスタックが削除できない
おのやんです。
みなさん、AWS CDK(以下、CDK)経由で作成したAWS CloudFormation(以下、CFn)スタックが削除できない状態に陥ったことはありますか?私はあります。
具体的なエラーメッセージは以下の通りです。こちらは、AWSの生成AIサービスに機能を実際に構築して体験できるgenerative-ai-use-cases-jp(以下、GenU)というリポジトリのデプロイ分を削除しようとした際のものです。
Resource account (xxxxxxxxxxxx) doesn't match account (yyyyyyyyyyyy) parsed from ARN: arn:aws:cloudformation:us-east-1:zzzzzzzzzzzz:stack/CDKToolkit/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
このままだと、CFnスタックの強制削除も効きません。そもそも削除を開始できない状態となります。こちらを解決してCFnスタック削除まで実施した時のやり方を、本記事ではまとめます。
原因
原因は、 CDKToolkitのCFnスタックを先に削除してから、対象のCFnスタックを削除したため です。
CDKToolkitのCFnスタックでは、CDKブートストラップを実施した際に作成されるAWSリソースが管理されています。これらのリソースは、CDK経由でデプロイされたCFnスタックから参照されています。そのため、先にCDKTookkitのCFnスタックを削除してしまうと、CDK経由でデプロイされたCFnスタックからの参照先がなくなるため、CFnスタック削除に失敗します。
解決方法
ですので、解決方法は「 もう1回CDKToolkitのCFnスタックを作成する(= もう1回CDKブートストラップを実施する) 」です。
手っ取り早いのは、AWSアカウント内でCloudshellを起動し、そこからCDKを操作するやり方です。Cloudshellを開いて、以下を実行します。CloudshellにはあらかじめCDKがインストールされているので、このコマンドをそのまま実行すればOKです
cdk bootstrap aws://123456789012/us-east-1
CFnコンソールを見てみると、こんな感じでCDKToolkitが作成されています。これが本来の状態となりますので、この状態で、削除対象のCFnスタックを削除します。
削除自体を開始できました。無事、スタックの削除もできました。
CDKブートストラップのCFnスタックは最後に消そう
CDK関係のCFnスタックは、CDKToolkitのCFnスタックに依存しています。そのため、環境内のCFnスタックを全部削除するなどの際は、CDKブートストラップのCFnスタックを最後に消すようにしましょう。では!