我有一个cloudformation模板,可以创建一个S3存储桶作为cloudformation堆栈的一部分。在我的模板的新版本上,我计划将我的应用程序从S3迁移到EFS。
有没有办法从模板中删除S3存储桶资源,而不删除它?理想情况下,我希望我的老用户在升级后可以使用s3存储桶,但是对于新用户来说根本没有它。看起来DeletionPolicies在这里可能有所帮助,但是它上面的文档说它只适用于堆栈删除,而不适用于升级。
答案 0 :(得分:5)
将详细说明user3470009的答案。
DeletionPolicy
中的main, advertised purpose用于在删除堆栈时保留资源。在DeletionPolicy
的{{3}}中,几乎有人提到它在从堆栈中删除资源时也起作用:
请注意,此功能还适用于以下堆栈更新操作: 导致资源从堆栈中删除。例如,如果您 从堆栈模板中删除资源,然后更新堆栈 模板。
因此从堆栈中删除资源而不删除实际资源的工作流程是:
"DeletionPolicy" : "Retain"
aws cloudformation
或使用其他任何工具来应用更改DELETE_SKIPPED
:
2018-10-15T15:32:32.956Z HostedZone DELETE_SKIPPED
答案 1 :(得分:2)
从模板中删除资源并从此模板更新堆栈时,资源将被删除。没有办法避免这种情况。
由于您现有的用户将继续使用S3存储桶,因此我建议您在模板中保留存储桶。从产品中取出铲斗后将其取下。
如果需要,您可以对模板进行版本控制(旧版与新版)。
如果您绝对需要从模板中删除存储桶,则可能会使用漏洞。当CloudFormation删除存储桶时,存储桶必须为空。如果它不为空,则应保留存储桶并将其从堆栈中移除。你可以试验一下,看看它是否适合你。如果它在测试中有效,那么您可以尝试在生产中使用它。
答案 2 :(得分:1)
我遇到了这个问题,需要稍作改动。我需要将存储桶提取到另一个堆栈,并且不能在移动中将其删除。这种方法效果很好:
我还在上面测试了Houser的响应,并确认如果存储桶中包含文件,则不会将其删除。在执行此操作时,它会尝试删除存储桶3次,直到它完成(并每次报告错误)。迁移到新堆栈不会引发任何错误。
答案 3 :(得分:0)
设置"删除"的删除策略在删除资源的堆栈更新之后,将导致存储桶本身保留。