在创建启用了版本控制的S3 Bucket时,如何使用CloudFormation启用生命周期选项来删除"对象删除标记"当没有"非当前"剩下的物品。
请参阅使用ExpiredObjectDeleteMarker的Examples of Lifecycle Configuration文档中的示例8 :
<LifecycleConfiguration>
<Rule>
...
<Expiration>
<ExpiredObjectDeleteMarker>true</ExpiredObjectDeleteMarker>
</Expiration>
<NoncurrentVersionExpiration>
<NoncurrentDays>30</NoncurrentDays>
</NoncurrentVersionExpiration>
</Rule>
</LifecycleConfiguration>
通过在
ExpiredObjectDeleteMarker
操作中将Expiration
元素设置为true,可以指示Amazon S3删除过期的对象删除标记。 Amazon S3将在对象过期后48小时内删除过期的对象删除标记。
这可以通过UI实现,但我无法通过CloudFormation找到对此支持的引用:Amazon S3 Lifecycle Rule
答案 0 :(得分:3)
在编写CloudFormation时,语法没有选项。他们没有使用原始的S3 LifecycleConfiguration
,而是将这些属性重命名为CloudFormation,并忘记了这个特定的(和其他几个)。
提出这个问题的更好的地方是CloudFormation forums,在AWS工作的人可以通过实施缺少的规则来实际注意并解决问题。
在论坛中询问的另一个缺失规则(AbortIncompleteMultipartUpload
)的示例:https://forums.aws.amazon.com/thread.jspa?messageID=746212
作为一种解决方法,一种可能的解决方案是使用可以使用Lambda函数实现的CloudFormation自定义资源。该过程在http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources-lambda.html
中描述答案 1 :(得分:1)
AWS根据对github问题的投票对CloudFormation路线图进行优先排序。投票添加ExpiredObjectDeleteMarker
支持here
答案 2 :(得分:0)
我已将我的解决方案发布为GitHub gist here。
基本上,此CloudFormation模板使用Boto创建一个用Python编写的Lambda函数,并将其名称传递给设置/取消设置ExpiredObjectDeleteMarker
。铲斗生命周期的其余部分由 NOT 控制。