是否有一种方法可以在实际删除桶之前触发lambda(例如,使用它是其中一部分的堆栈)或清空以复制其对象?也许可以用别的东西代替lambda ?
删除非空桶的CloudFormation (CNF)堆栈将失败,因为非空桶无法删除,除非将其DeletionPolicy设置为retain
。保留将删除堆栈,但在您的帐户中保留桶。如果没有retain
,您必须首先删除bucket中的所有对象,然后才能删除bucket。
无论哪种方式,都必须通过自定义lambda函数自己删除对象. 在删除bucket时,CFN和S3中都没有现成的机制来删除对象。但由于这是你必须自己开发的东西,你可以在实际删除它们之前对这些对象做任何你想做的事情,例如复制到冰川.
有几种方法可以实现这一点。但可能最常见的方式是通过自定义资源,与AWS博客中给出的类似:
- 如何在AWS CloudFormation中使用Amazon S3桶的自定义资源?
本博客中给出的资源实际上响应CFN中的Delete
事件,删除对象在桶中:
b_operator.Bucket(str(the_bucket)).objects.all().delete()
所以你需要修改此自定义资源用于在执行删除操作之前复制对象。