我打算将现有的图像处理逻辑迁移到AWS lambda。 Lambda缩略图生成器比我之前的代码更好,所以我想使用lamdba重新处理现有存储桶中的所有文件。
Lambda似乎只是事件驱动,这意味着我的lamdba函数只能通过PUT事件调用。由于文件已经在存储桶中,因此不会触发任何事件。
我考虑过创建一个新存储桶并将文件从现有存储桶移动到新存储桶。这将触发新的PUT事件,但我的存储桶有2MM文件,因此我拒绝将此黑客视为可行选项。
答案 0 :(得分:1)
即使您要处理S3文件,也不一定要使用S3作为事件源。例如,您可以创建一个接受custom event的函数,可能使用S3存储桶和图像文件名作为键,然后调用AWS SDK来检索实际的图像数据以进行处理。然后,您可以从控制台或命令行调用此函数,并使用您要处理的存储桶和文件名,这样您就可以了。
答案 1 :(得分:0)
您可以随时使用Algorithmia之类的服务来创建调整文件大小的函数,例如:
http://blog.algorithmia.com/amazon-s3-image-processing-pipeline-python/
希望它有所帮助! (示例是在python中,但您可以使用其他语言)
答案 2 :(得分:0)
您可以将SQS队列添加为Lambda的事件源/触发,在Lambda中进行一些细微更改以正确处理与S3事件相对的SQS事件,然后使用本地脚本循环遍历S3存储桶中的所有对象(分页给出2MM文件),并将它们作为消息添加到SQS中。然后,完成后,只需删除SQS事件源和队列即可。
编写脚本列出并查找然后调用lambda函数并不能解决问题,但是脚本确实很短。尽管此方法确实需要设置队列,但是由于lambda并发限制,您将无法直接调用处理2MM文件。
示例:
list_objects_v2
分页send_message_batch
建议: 根据存储在存储桶中的新文件的吞吐量,您可能仍要切换到S3-> SQS-> Lambda处理,而不是直接S3-> Lambda调用。例如,如果通信量很大,那么您可能会达到Lambda并发限制,或者发生错误并且想要保留消息(可以通过为Lambda配置DLQ来解决)。