如何在cloudformation堆栈更新期间删除资源而不删除它

Ram*_*eza 3 amazon-web-services aws-cloudformation

我有一个cloudformation模板,它创建一个S3存储桶作为cloudformation堆栈的一部分.在我的模板的新版本上,我计划将我的应用程序从S3迁移到EFS.

有没有办法从模板中删除S3存储桶资源,而不删除它?理想情况下,我希望我的老用户在升级后可以使用s3存储桶,但是对于新用户来说根本没有它.看起来DeletionPolicies在这里可能有所帮助,但是它上面的文档说它只适用于堆栈删除,而不适用于升级.

Ind*_*ity 10

详细说明user3470009的答案.

主,广告的目的DeletionPolicy是保持一个资源时堆栈被删除.这几乎提到作为一种事后AWS文档DeletionPolicy,它从堆栈资源拆卸过程中也发挥作用:

请注意,此功能也适用于堆栈更新操作,这些操作会导致从堆栈中删除资源.例如,如果从堆栈模板中删除资源,然后使用模板更新堆栈.

因此,在不删除实际资源的情况下从堆栈中删除资源的工作流程是:

  1. 添加"DeletionPolicy" : "Retain"到CF模板中的资源声明
  2. 通过保存UI或aws cloudformation在CLI或您使用的任何其他工具上运行来应用更改
  3. 在UI中检查您的资源是否具有正确的更改.关于CF何时不更新元数据有一些问题.请参阅上面的文档链接
  4. 从模板中删除资源
  5. 应用更改.观察事件日志,看它说DELETE_SKIPPED:

2018-10-15T15:32:32.956Z HostedZone DELETE_SKIPPED

  • https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/refactor-stacks.html (2认同)

小智 6

将 DeletionPolicy 设置为“Retain”将导致存储桶本身在删除资源的堆栈更新后保留。

  • 我认为 DeletionPolicy 在您删除 *stack* 时应用,而不是在您从现有堆栈模板中删除资源时应用?根据:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html (2认同)

Mat*_*ser -4

当您从模板中删除资源并从此模板更新堆栈时,这些资源将被删除。没有办法避免这种情况。

由于您的现有用户将继续使用 S3 存储桶,因此我建议在您的模板中保留该存储桶。当桶完全从产品中取出后,将其取出。

如果需要,您可以对模板进行版本控制(旧与新)。

如果您确实需要从模板中删除存储桶,则可以利用漏洞。当CloudFormation删除存储桶时,该存储桶必须为空。如果它不为空,则应保留该存储桶并将其从堆栈中删除。您可以尝试一下,看看它是否适合您。如果它在测试中有效,那么您可以尝试在生产中使用它。

  • 这是不准确的;您可以在资源上使用 DeletionPolicy 属性来防止 cloudformation 删除资源。 (9认同)