首页 > 解决方案 > CloudFormation:删除整个嵌套堆栈

问题描述

我有一个 CloudFormation 堆栈,它由 3 个嵌套堆栈组成:

Resources:
  ParamsSetup:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: a-params.yaml          
  ResourcePrep:
     Type: AWS::CloudFormation::Stack
     Properties:
       TemplateURL: b-prep.yaml
  Services:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: c-service.yaml

我意识到ResourcePrep嵌套堆栈是不必要的,所以我将该堆栈中唯一重要的资源移到Services堆栈中,并从我的主模板中删除了堆栈:

Resources:
  ParamsSetup:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: a-params.yaml     
  Services:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: c-service.yaml

现在我有一个问题。CloudFormation 更新失败,因为 中的资源Services已经属于ResourcePrep,但ResourcePrep不应再存在。

我曾期望 CloudFormation 足够聪明,可以删除已删除的堆栈,但事实并非如此。删除的堆栈仍然存在,我不知道如何摆脱它。我读过的所有内容都说您永远不应该手动删除嵌套堆栈。

标签: amazon-web-servicesamazon-cloudformation

解决方案


您在这里有几个选择,没有一个像您希望的那样特别优雅。

  1. 删除堆栈并留下您想要注释掉(或删除)的资源,以便进行 cloudformation 更新/重建。成功更新并删除堆栈后,读取您想要/取消注释的资源。
  2. 如果需要持久化资源,请在资源上添加删除保留参数,运行更新,然后删除整个堆栈。更新完成后重新添加/重新关联现有资源与您选择的堆栈。
  3. 在您选择的堆栈中创建一个具有不同名称的相同资源并删除奇数堆栈。

推荐阅读