问题描述
有没有办法在存储桶被实际删除(例如,它是一个堆栈的一部分)或清空以复制其对象之前触发 lambda?也许可以使用其他东西来代替 lambdas?
解决方法
删除具有非空存储桶的 CloudFormation (CNF) 堆栈将失败,因为非空存储桶无法删除,除非您将其 DeletionPolicy 设置为 {{1} }.保留将删除堆栈,但在您的帐户中保留存储桶。如果没有 retain
,您必须先删除存储桶中的所有对象,然后才能删除存储桶。
无论哪种方式,您都必须通过自定义 lambda 函数自己删除对象。 CFN 和 S3 中都没有开箱即用的机制来删除存储桶时删除对象。但是由于这是您必须自己开发的东西,因此您可以在实际删除这些对象之前对它们执行任何操作,例如复制到冰川。
有几种方法可以实现这一点。但最常见的方法可能是通过自定义资源,类似于 AWS 博客中给出的方法:
此博客中提供的资源实际上响应 CFN 中的 retain
事件并删除存储桶中的对象:
Delete
因此,在执行删除操作之前,您必须修改此自定义资源以复制对象。