我在我的CloudFormation模板中有S3存储桶作为资源。 将DeletionPolicy
设置为Retain
。 这按预期工作时,删除堆栈,它确实保留桶。 但是,当我尝试再次创build堆栈时,创build失败,而尝试再次创build相同的桶,错误消息抱怨它已经存在。
我需要添加到我的CloudFormation模板,使其不尝试重新创build已经存在的资源?
我的模板相关片段如下:
"Resources": { "SomeS3Bucket" : { "Type" : "AWS::S3::Bucket", "DeletionPolicy" : "Retain", "Properties": { "BucketName": "SomeS3Bucket" } }
一种方法是将input参数添加到CloudFormation模板以指示应该使用现有的存储桶。
仅当参数指示需要时才使用模板中的Condition子句来创build存储桶。
CloudFormation使用带有“aws:”前缀的标签来跟踪哪些资源与堆栈中的哪些条目相关联 – 在决定添加/删除/更新之前,用于比较模板的“实时”状态。
作为用户,您不能添加,编辑或删除此类标签。
所以,如果你现有的资源没有这些标签,或者没有这些标签的正确值,那么他们不被认为是新堆栈的一部分,我没有看到改变这种情况的方法。
我也试图自动化,因为它似乎不能用Cloudformation模板完成。 我正在考虑的过程是:
temp-$originalbucketname
$originalbucketname
删除所有的内容 temp-$originalbucketname
这是一个非常复杂的过程,根据桶的大小,很容易需要几个小时,因为大部分步骤都是O(n)和键数。
您可能会认为Cloudformation是AWS自动化的基础层,但我认为这只是一个(非常有限)的怪物,它们将拜占庭API集成在一起,用于他们的所有服务。