【问题标题】:Lambda S3 Put function not triggering for larger filesLambda S3 Put 函数不会为较大的文件触发
【发布时间】:2017-03-16 04:26:08
【问题描述】:

我目前正在探索将电子邮件的附件与 .eml 文件本身分开存储。我有一个 SES 规则集,可将入站电子邮件传送到存储桶。当存储桶检索电子邮件时,S3 Put Lambda 函数解析原始电子邮件(MIME 格式),base64 对附件缓冲区进行解码,并对每个附件和原始 .eml 文件执行 putObject 到新存储桶。

我的问题是,对于附件超过 ~3-4 MB 的电子邮件,此 Lambda 函数不会触发。邮件被接收并存储在初始存储桶中,但在接收时不会触发该函数。此外,该事件不会出现在 CloudWatch 中。但是,当使用硬编码的 S3 Put 有效负载手动测试它时,以及手动将 .eml 文件上传到分配的存储桶时,该功能工作得非常好。

你知道为什么会有这个限制吗?也许这是存储桶的权限问题,或者可能是分配的 Lambda 角色的问题?手动测试时,我发现这绝不是超时或超过最大内存使用的问题。

【问题讨论】:

  • Is it possible for S3 notifications to SQS to fail? 的可能重复项。表面上并不完全相同——但可能的根本原因是相同的,所以目前,我要说这不是完全重复的。我更愿意看到一些共识,而不是随便乱扔我的金锤。
  • @Michael-sqlbot 我不会将此问题标记为重复问题,因为我从没想过有人在搜索此问题时会找到其他问题。遇到此问题时,其他问题的标题太模糊,以至于无法找到。
  • 感谢@MarkB。我怀疑你是对的。

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


【解决方案1】:

几乎可以肯定,较大的文件是通过 S3 分段上传而不是常规的 Put 操作上传的。您需要将您的 Lambda 订阅配置为也收到分段上传的通知。貌似该函数目前只订阅s3:ObjectCreated:Put事件,需要在配置中添加s3:ObjectCreated:CompleteMultipartUpload

【讨论】:

  • 你是一个救生员 - 2 年后!这几天绞尽脑汁。谢谢!!
  • 伙计,这不应该这么难......谢谢你的提示!浪费了很多时间......自我说明:GIYF
  • 太棒了。对我帮助很大。
  • 谢谢。我有同样的预感,但没有采取行动,想如果它会触发两次会怎样。
【解决方案2】:

我遇到了同样的问题。如果您上传到 S3 的文件的 Etag 以连字符后跟数字结尾,则表示该文件是使用 Multipart 上传的。订阅 CompleteMultipartUpload 事件解决了这个问题。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题。尽管将 s3:ObjectCreated:CompleteMultipartUpload 作为事件通知,但触发器还是失败了。

    我后来意识到问题出在 lambda 的超时期限上。这也可能是一个潜在问题。

    【讨论】:

      【解决方案4】:

      按照AWS Docs监听所有对象创建的事件你可以监听s3:ObjectCreated:*

      【讨论】:

        猜你喜欢
        • 2021-08-27
        • 2021-10-10
        • 2017-02-21
        • 2020-05-16
        • 1970-01-01
        • 1970-01-01
        • 2021-12-07
        • 2021-06-24
        相关资源
        最近更新 更多