AWS Lambda: 下载后删除S3文件

4
我有一个Lambda函数,它将文件写入S3并返回该文件的已签名URL。在我的Angular应用程序中,接收此值后立即下载来自S3的文件。下载完成后,我想要从S3中删除文件。
我知道可以从Angular应用程序触发删除操作,但我真的不想让删除操作依赖于客户端,以便我知道它实际上发生了。有什么最好的方法来处理这个问题?
我认为,在返回URL之后15-30秒内删除文件可能非常安全,但我不确定使用Lambda触发这个操作的最佳方法。
我考虑使用setInterval,但这似乎很混乱,因为我需要让Lambda运行比它需要运行更长的时间。
有没有更简洁的选项,而且不会过于复杂?
我已经设置了S3存储桶的到期时间,但可以设置的最短间隔是1天。这比我想要保留项目的时间长得多。

我认为在Lambda中没有一个好的方法来做到这一点,例如下载文件需要比15-30秒更长的时间。为什么对你来说不能保留文件1天?作为解决方法,您可以拥有一个服务,它将删除早于1小时的文件,或者如果需要,您可以将这样的代码合并到您的Lambda中。 - Vsevolod Goloviznin
或者您可以利用CloudTrail来检测并处理相关的GetObject API调用。这里有一个例子:http://docs.aws.amazon.com/lambda/latest/dg/with-cloudtrail-example.html - jarmod
@VsevolodGoloviznin 文件内容非常敏感。我持有数据的时间越短,承受的风险就越小。我将查看使用服务删除一小时前所有文件的可能性。这是一个好主意。 - Doug
@jarmod CloudTrail看起来也是另一个不错的选择,我也会考虑这个选项。谢谢! - Doug
我对云跟踪的一个担忧是事件何时触发 - 是在文件下载时还是在请求获取文件时,因此值得检查它发生的时间! - Vsevolod Goloviznin
显示剩余2条评论
1个回答

1

最佳方法是使用S3事件,可以在下载后直接触发Lambda。如果需要额外的延迟,您还可以将S3事件先发送到SQS队列(具有延迟x时间的消息传递设置),然后让SQS队列触发一个新的lambda函数进行移除操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接