跳至内容

如何删除卡滞在 DELETE_FAILED 状态的 CloudFormation 堆栈?

1 分钟阅读
0

我想删除 AWS CloudFormation 堆栈,但是此堆栈卡滞在 DELETE_FAILED 状态。

简短描述

您的堆栈可能由于以下原因之一而卡滞在 DELETE_FAILED 状态:

  • 堆栈资源包含依赖对象或其他无法删除的依赖项。
  • 您使用的服务角色无效,或者您无法代入 AWS Identity and Access Management (IAM) 角色。
  • 自定义资源在默认响应超时内无法稳定。

解决方法

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

删除具有无法删除依赖项的堆栈

进行带外更改时可能会发生依赖项问题。例如,您的堆栈有一个安全组,该安全组连接到不属于您的堆栈的弹性网络接口。您无法删除堆栈,因为您无法删除安全组。要删除堆栈但保留具有依赖项的资源,请使用 CloudFormation 控制台强制删除堆栈。或者,运行以下 AWS CLI 命令。

要删除卡滞在 DELETE_FAILED 状态的堆栈并保留未删除的资源,请运行以下 delete-stack 命令:

aws cloudformation delete-stack --stack-name my-stack --retain-resources myresource1 myresource2

**注意:**将 my-stack 替换为您的堆栈名称,将 myresource1myresource2 替换为未删除的资源的 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."

要解决此问题,请完成以下步骤:

  1. 打开 CloudFormation 控制台
  2. 选择要删除的堆栈。
  3. Stack info(堆栈信息)选项卡中,记下堆栈的 IAM 角色的名称。
  4. 创建与上一步中的 IAM 角色同名的 IAM 角色。**重要事项:**创建 IAM 角色时,请验证该角色是否具有删除堆栈中资源的权限
  5. 使用 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 支持的自定义资源?

相关信息

DeleteStack