如何更新因手动删除的资源导致失败的 CloudFormation 堆栈?

1 分钟阅读
0

我手动删除了由我的一个 AWS CloudFormation 堆栈创建的资源,现在我的堆栈无法更新。

简短描述

如果删除由 CloudFormation 堆栈创建的资源,您的堆栈将无法更新,并且会收到一条错误消息。

请根据资源类型选择以下解决方法之一:

  • 使用唯一名称更新资源
  • 使用唯一 ID 更新资源

解决方法

使用唯一名称更新资源

如果删除的资源支持唯一名称,则可以通过手动创建资源来更新堆栈。但是,新资源必须与删除的资源具有相同名称。例如,当更改资源名称时,您会影响 CloudFormation 处理资源的方式。这是因为 AWS Identity and Access Management(IAM)角色按名称进行跟踪。如果意外删除了 IAM 角色,则可以使用同一个名称手动重新创建该角色。

要使用唯一名称更新 IAM 角色或任何其他资源,请完成以下步骤:

  1. 打开 AWS CloudFormation 控制台
  2. 选择堆栈,然后选择资源视图。
  3. 物理 ID 列中,找到要替换为新 IAM 角色的 IAM 角色的物理 ID。
    **注意:**物理 ID 是资源的名称。
  4. 创建新 IAM 角色,然后为新角色提供在步骤 3 中找到的同一个物理 ID。
  5. 更新堆栈

**注意:**有关更多信息,请参阅修改堆栈模板

使用唯一 ID 更新资源

您无法使用唯一 ID 手动重新创建资源,如路由表。而是必须从 CloudFormation 模板中删除资源以及对该资源的所有引用。

**注意:**以下解决方法也适用于不支持唯一名称或唯一 ID 的资源。例如,在托管区中设置的记录。

要允许 CloudFormation 使用唯一 ID 重新创建路由表或任何其他资源,请完成以下步骤:

  1. 在 CloudFormation 模板中,删除路由表及其所有引用。
  2. 更新堆栈
    **注意:**CloudFormation 会尝试删除路由表。由于资源已被删除,因此 CloudFormation 会将删除视为成功操作。
  3. 将路由表以及所需的任何其他资源或引用添加回 CloudFormation 模板。
  4. 再次更新堆栈。
    **注意:**CloudFormation 会重新创建已删除的资源。

相关信息

AWS CloudFormation 疑难解答

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