AWS CloudFormation スタックを削除したいのですが、スタックが DELETE_FAILED ステータスから移行しません。
簡単な説明
スタックは、次の要因で DELETE_FAILED ステータスから移行できない可能性があります。
- スタックリソースには、依存オブジェクトまたは削除できないその他の依存関係が存在する場合。
- 使用するサービスロールが無効であるか、AWS Identity and Access Management (IAM) ロールを引き受けられない場合。
- カスタムリソースは、デフォルトの応答タイムアウト以内に安定化できなかった場合。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
削除できない依存関係を含むスタックを削除する
依存関係の問題は、帯域外の変更を行う際に発生する可能性があります。たとえば、スタックにセキュリティグループが含まれており、グループはそのスタックには属していない Elastic ネットワークインターフェイスにアタッチされている場合が該当します。この場合、セキュリティグループを削除できないため、スタックを削除できません。スタックを削除しても、依存関係を含むリソースを維持するには、CloudFormation コンソールを使用してスタックを強制削除するか、次の AWS CLI コマンドを実行します。
DELETE_FAILED ステータスに留まっているスタックを削除し、削除されなかったリソースを維持するには、次の delete-stack コマンドを実行します。
aws cloudformation delete-stack --stack-name my-stack --retain-resources myresource1 myresource2
注: my-stack をスタック名に、myresource1 および myresource2 を削除されなかったリソースの ID に置き換えてください。
CloudFormation によりスタックが削除されますが、保持していたリソースは削除されません。スタックのステータスは DELETE_COMPLETE に変わります。
注: 保持されたリソースに対する請求を防ぐには、スタックを削除した後に、保持されたリソースを手動で削除します。
削除できない依存関係を含むスタックを強制削除するには、次の delete-stack コマンドを実行します。
aws cloudformation delete-stack --stack-name my-stack --deletion-mode FORCE_DELETE_STACK
注: my-stack を該当するスタックの名前に置き換えてください。
無効なロールを含むスタックを削除する
現在は存在しないサービスロールを含むスタックを削除しようとした場合、次のエラーが発生します。
"An error occurred (ValidationError) when calling the DeleteStack operation: Role is invalid or cannot be assumed."
この問題を解決するには、次の手順を実行します。
- CloudFormation コンソールを開きます。
- 削除するスタックを選択します。
- [スタック情報] タブに表示される、スタックの IAM ロール名を書き留めます。
- 前のステップの IAM ロールと同じ名前で IAM ロールを作成します。重要: IAM ロールの作成時には、スタック内のリソースを削除するための権限が含まれることを確認してください。
- CloudFormation コンソールを使用してスタックを削除します。
削除したロールの権限を覚えていない場合、同じ権限を含む新しいロールを作成してスタックを削除することはできません。新しいロールを取得し、そのロールで次の delete-stack コマンドを実行するとスタックを削除できます。
aws cloudformation delete-stack --stack-name my-stack --role-arn new_role
注: my-stack をスタック名に、new_role を新規ロールの Amazon リソース名 (ARN) に置き換えてください。
安定化できなかったカスタムリソースのスタックを削除する
問題のトラブルシューティング方法については、「CloudFormation で DELETE_FAILED ステータスまたは DELETE_IN_PROGRESS ステータスのままになっている Lambda-backed カスタムリソースを削除する方法を教えてください」を参照してください。
関連情報
DeleteStack