【问题标题】:CloudFormation: Deleting an entire nested stackCloudFormation:删除整个嵌套堆栈
【发布时间】:2020-10-15 04:57:30
【问题描述】:

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

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 会足够聪明地删除已删除的堆栈,但事实并非如此。删除的堆栈仍然存在,我不知道如何摆脱它。我读到的所有内容都说您永远不应该手动删除嵌套堆栈。

【问题讨论】:

  • 你能把资源从Services移回ResourcePrep吗?
  • 我可以,但关键是我不再需要ResourcePrep 堆栈了。我想摆脱它。
  • 是的,但首先您可以尝试让您的堆栈处于可管理状态。然后就可以正常删除修改了。

标签: amazon-web-services amazon-cloudformation


【解决方案1】:

你有几个选择,没有一个像你希望的那样特别优雅。

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

【讨论】:

    猜你喜欢
    • 2017-11-25
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2019-09-01
    • 2020-09-17
    • 2018-06-15
    相关资源
    最近更新 更多