【问题标题】:Is it possible to re-create AWS resources using CloudFormation?是否可以使用 CloudFormation 重新创建 AWS 资源?
【发布时间】:2017-03-01 13:13:42
【问题描述】:

假设 AWS 堆栈是使用 CloudFormation 创建的。 现在,其中一项资源在外部 CloudFormation 进行了修改。

1) 是否可以让 CloudFormation 专门创建这些资源?根据我的理解,我们不能这样做,因为 CloudFormation 无法识别差异,因此不会创建修改后的资源。我的观察正确吗?

2) 另外,如果在 CloudFormation 之外进行了修改,我必须使用哪些选项将堆栈恢复到其原始状态?

【问题讨论】:

  • @helloV,你为什么要添加 amazon-ec2 作为标签...我的问题适用于所有 AWS 资源——不仅仅是 EC2?

标签: amazon-web-services amazon-cloudformation


【解决方案1】:

这是一种您可以在不删除整个堆栈的情况下使用的可能技巧。

  1. 从模板中删除被意外删除的特定资源。
  2. 现在更新堆栈,使您的堆栈和帐户中的资源同步。
  3. 将模板恢复到步骤 1 之前的状态并再次更新,这将创建意外删除的资源。

【讨论】:

    【解决方案2】:

    首先,请注意,根据AWS CloudFormation Best Practices,明确不鼓励在 CloudFormation 之外修改由 CloudFormation 创建的资源:

    通过 AWS CloudFormation 管理所有堆栈资源

    启动堆栈后,使用 AWS CloudFormation console、API 或 AWS CLI 更新堆栈中的资源。不要在 AWS CloudFormation 之外更改堆栈资源。这样做会导致堆栈模板与堆栈资源的当前状态不匹配,如果您更新或删除堆栈,可能会导致错误。

    但是,如果您意外修改了 CloudFormation 管理的资源并需要恢复,除了简单地完全删除和重新创建堆栈(这可能不是一个可接受的选项)之外,您可能还有一些有限的选择:

    1. CloudFormation 无法自动根据外部修改资源的当前状态更新其内部状态。

      但是,根据确切的资源类型,在某些情况下,您可以手动之后通过应用与资源当前状态匹配的堆栈更新来更新 CloudFormation。

    2. 同样,CloudFormation 不可能自动将外部修改的资源恢复到其原始未修改的 CloudFormation 状态。

      但是,根据具体的资源类型,在某些情况下,您可以:

      • 通过手动将资源更新回其原始状态来恢复资源;
      • 通过应用堆栈更新来更新资源,将 CloudFormation 堆栈和托管资源都带到一个全新的状态,该状态将再次同步。

    【讨论】:

      【解决方案3】:

      很遗憾,您的两个问题的答案都是NO。

      1. 如果在堆栈创建状态为 COMPLETE 后修改堆栈中的资源,CF 将无能为力,因为它不会跟踪对资源的修改
      2. 除了删除当前堆栈并创建一个新堆栈之外别无选择

      【讨论】:

      • 我想使用Conditions 可能是最后的手段。但它可能会使我的 CFN 模板变得非常庞大!
      • @GreenDroid,你可以试试Stack Update,但它不能按照你想要的方式工作。
      • 像魅力一样工作!
      猜你喜欢
      • 2017-09-02
      • 2017-04-24
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 2021-06-23
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      相关资源
      最近更新 更多