如何解决 CloudFormation 中的“Last applied policy cannot be deleted”(无法删除上次应用的策略)错误?

1 分钟阅读
0

我想解决 AWS CloudFormation 中的“Last applied policy cannot be deleted”(无法删除上次应用的策略)错误。

简短描述

当您尝试删除 CloudFormation 堆栈或策略资源,例如 AWS::SQS::QueuePolicyAWS::S3::BucketPolicyAWS::SNS::TopicPolicy 时,您可能会收到以下错误:

“无法删除上次应用的策略。在删除上次应用的策略之前,请删除应用于此资源的其他策略。”

如果您对同一资源应用一个策略后又应用一个策略,则第二个策略将成为上次应用的策略。当您尝试删除第二个策略时,CloudFormation 将不允许您删除该策略。

根据以下场景对此错误进行故障排除:

  • 堆栈和策略资源处于 DELETE_FAILED 状态。
  • 当存在其他堆栈部署的其他策略资源时,该策略资源将被删除。

解决方法

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

堆栈和策略资源处于 DELETE_FAILED 状态

如果您尝试删除堆栈但策略资源未删除,请尝试再次删除该堆栈并跳过该资源。要解决堆栈和策略处于 DELETE_FAILED 状态的问题,请执行以下操作之一:

  • 打开 CloudFormation 控制台,然后选择 Delete stack(删除堆栈)。在 You may retain resources that are failing to delete(您可以保留无法删除的资源)弹出窗口中,在 Resources to retain(要保留的资源)下选择策略资源。
  • 运行以下 AWS CLI 命令:
    aws cloudformation delete-stack --stack-name example-stack-name --retain-resources example-policy-resource-id
    **注意:**请将 example-stack-name 替换为无法删除的堆栈。将 example-policy-resource-id 替换为无法删除的策略资源的 ID。

当您完成上述操作之一并尝试再次删除堆栈时,您选择保留的资源将不会被删除。堆栈的状态将更改为 DELETE_COMPLETE

**注意:**为防止不必要的费用,请在删除堆栈时手动删除保留的资源。如果您应用了策略的资源被删除,则无需手动删除这些资源。当删除目标资源时,策略资源将被删除。

有关详细信息,请参阅如何删除卡在 DELETE_FAILED 状态的 AWS CloudFormation 堆栈?

删除应用于同一个资源的不同堆栈中的策略资源

如果您将来自不同堆栈的多个策略应用于同一个资源,则必须删除应用的第一个策略。

例如,您在 example-stack-A 中创建 ExamplePolicyA 并将该策略应用于 exampleQueue1。然后,您使用不同的权限在 example-stack-B 中创建 ExamplePolicyB 并将该策略应用于 exampleQueue1。当您尝试删除 ExamplePolicyB 时,您会收到以下错误:

“无法删除上次应用的策略。在删除上次应用的策略之前,请删除应用于此资源的其他策略。”

要删除 ExamplePolicyB,必须先删除 ExamplePolicyA

**注意:**最佳做法是在创建新策略之前删除以前的策略。

AWS 官方
AWS 官方已更新 1 年前