有没有办法在存储桶被实际删除(例如,带有它所属的堆栈)或清空以复制其对象之前触发 lambda?也许可以使用其他东西来代替 lambda?
最佳答案
删除具有非空存储桶的 CloudFormation (CNF) 堆栈将会失败,因为非空存储桶无法删除,除非您设置其 DeletionPolicy来保留
。保留将删除堆栈,但会保留帐户中的存储桶。如果没有 retain
,您必须先删除存储桶中的所有对象,然后才能删除存储桶。
无论哪种方式,您都必须通过自定义 lambda 函数自行删除对象。 CFN 和 S3 中都没有开箱即用的机制来在删除存储桶时删除对象。但由于这是您必须自己开发的东西,因此您可以在实际删除这些对象之前对它们执行任何您想要的操作,例如复制到冰川。
实现这一目标的方法很少。但最常见的方式可能是通过自定义资源,类似于 AWS 博客中给出的方式:
本博客中给出的资源实际上响应 CFN 中的 Delete
事件并删除存储桶中的对象:
b_operator.Bucket(str(the_bucket)).objects.all().delete()
因此,在执行删除操作之前,您必须修改此自定义资源以复制对象。
关于amazon-web-services - 在清空或删除 S3 存储桶之前复制所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65910174/