在清空或删除 S3 存储桶之前复制所有对象

问题描述

有没有办法在存储桶被实际删除(例如,它是一个堆栈的一部分)或清空以复制其对象之前触发 lambda?也许可以使用其他东西来代替 lambdas?

解决方法

删除具有非空存储桶的 CloudFormation (CNF) 堆栈将失败,因为非空存储桶无法删除,除非您将其 DeletionPolicy 设置为 {{1} }.保留将删除堆栈,但在您的帐户中保留存储桶。如果没有 retain,您必须先删除存储桶中的所有对象,然后才能删除存储桶。

无论哪种方式,您都必须通过自定义 lambda 函数自己删除对象。 CFN 和 S3 中都没有开箱即用的机制来删除存储桶时删除对象。但是由于这是您必须自己开发的东西,因此您可以在实际删除这些对象之前对它们执行任何操作,例如复制到冰川

有几种方法可以实现这一点。但最常见的方法可能是通过自定义资源,类似于 AWS 博客中给出的方法:

此博客中提供的资源实际上响应 CFN 中的 retain 事件并删除存储桶中的对象

Delete

因此,在执行删除操作之前,您必须修改此自定义资源以复制对象。