【问题标题】:How to trigger Lambda only one time for multipart upload S3 triggers?如何为分段上传 S3 触发器仅触发一次 Lambda?
【发布时间】:2023-03-18 06:01:01
【问题描述】:

我有一个 AWS Lambda 函数:

  1. 对S3 ObjectCreated 触发器作出反应
  2. ssh 进入 ec2 实例并
  3. 运行python脚本

然后,此 python 脚本将运行 EMR 来处理所有这些刚刚创建的 S3 零件文件。 (是的,文件必须联合处理。)

但是,部分文件(file_part_0000、file_part_0001、file_part_0002 等)被创建为分段上传。

Lambda Event: {..., "eventName": "ObjectCreated:CompleteMultipartUpload", ...}

据我了解,此触发器将强制 Lambda 使用 ssh 并运行 python 脚本的次数与零件文件的次数一样多。我只希望 Lambda SSH 并运行脚本一次。

有没有办法让 Lambda 为每个“系列”分段上传触发一次?

【问题讨论】:

  • ObjectCreated:CompleteMultipartUpload 事件在 S3 分段上传的完成创建对象时发生。

标签: amazon-web-services amazon-s3 aws-lambda


【解决方案1】:

如Configuring Amazon S3 Event Notifications中所述

您将不会收到来自失败操作的事件通知。

事件调用s3:ObjectCreated:CompleteMultipartUpload是有原因的,只有当您的分段上传完全时,该事件才会触发。

另一方面,也许您应该触发 S3 事件以向 SQS 发送信息。所以你可以让你的python程序可以看SQS队列和处理文件。使用 SQS,您无需进行无密码设置或将私钥存储在 lambda 中即可对服务器进行 ssh。

【讨论】:

  • 您和@jarmod 提到的完全上传是真的。但是,我不确定这是否解决了我的问题。问题是,当CompleteMultipartUpload 事件确实发生时,Lambda 会运行数百次(即每个零件文件运行一次)!我希望它对每个“系列”或“组”部分文件运行一次。我希望它只为file* 运行,而不是为file_part0001、file_part0002、file_part0003 等运行。
  • 就您在 SQS 上的观点而言,SQS 不会也为所有零件文件创建队列吗?再说一次,这不是我想要的……
猜你喜欢
  • 2021-10-10
  • 1970-01-01
  • 2020-02-09
  • 2022-01-03
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
相关资源
最近更新 更多