是否可以使用CloudFormation重新创建AWS资源?

时间:2016-10-19 18:36:46

标签: amazon-web-services amazon-cloudformation

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

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

2)此外,如果在CloudFormation外部进行修改,我还有哪些选项可以将堆栈恢复到原始状态?

3 个答案:

答案 0 :(得分:2)

不幸的是,您的问题的答案是

  1. 如果在堆栈创建状态为COMPLETE后修改堆栈中的资源,则CF无法执行任何操作,因为它无法跟踪对资源的修改
  2. 除了删除当前堆栈并创建新堆栈
  3. 之外别无选择

答案 1 :(得分:1)

首先,请注意根据AWS CloudFormation Best Practices明确禁止在CloudFormation之外修改CloudFormation创建的资源

  

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

     

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

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

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

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

  2. 同样,CloudFormation无法自动将外部修改后的资源还原为其原始未修改的CloudFormation状态。

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

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

答案 2 :(得分:0)

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

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