Lambda S3 Put函数不会触发较大的文件

时间:2016-11-02 18:17:52

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

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

我的问题是,这个Lambda函数不会触发附件超过3-4 MB的电子邮件。收到电子邮件并将其存储在初始存储桶中,但该功能在收到时不会触发。此外,该事件未出现在CloudWatch中。但是,当使用硬编码的S3 Put有效负载手动测试时,以及手动将.eml文件上载到指定的存储桶时,该功能可以正常工作。

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

3 个答案:

答案 0 :(得分:16)

较大的文件几乎肯定是通过S3 Multipart Upload而不是常规Put操作上传的。您需要配置Lambda订阅,以便收到有关分段上传的通知。听起来该功能目前仅订阅s3:ObjectCreated:Put个事件,您需要在配置中添加s3:ObjectCreated:CompleteMultipartUpload

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

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