AWS SQS中缺少s3事件

时间:2019-04-15 16:09:44

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

我有一个AWS Lambda函数,应该由来自简单队列服务SQS的消息触发。当将新的json文件写入我的s3存储桶中或将s3存储桶中的现有json文件覆盖时,此SQS应该会收到通知。两种情况的事件类型都是s3:ObjectCreated,我看到两种情况的通知都是我的SQS。 现在的问题是,s3中经常有一个新文件(或s3中有更新的现有文件),但是sqs中没有相应的消息!丢失了太多文件,Lambda不知道应该处理这些文件。在Lambda中,我将接收到的SQS有效负载的全部内容打印到日志文件中,然后尝试使用aws --profile aaa logs filter-log-events --log-group-name /aws/lambda/name --start-time 1554357600000 --end-time 1554396561982 --filter-pattern "missing_file_name_pattern"之类的东西来找到那些丢失的文件,但找不到任何东西,这意味着不会为s3:objectCreated事件生成这个丢失的文件。是否有一些条件可以防止s3:objectCreated事件用于新的或更新的s3文件?有办法解决吗?还是某种解决方法?

3 个答案:

答案 0 :(得分:1)

根据AWS文档:

如果同时对一个非版本对象进行两次写入,则可能仅发送一个事件通知。如果要确保每次成功写入都会发送事件通知,则可以在存储桶上启用版本控制。使用版本控制,每次成功写入都会创建对象的新版本,并且还会发送事件通知。

https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html

还有,为什么不直接从S3触发lambda?

答案 1 :(得分:0)

两种可能性:

  1. Some events may be delayed or not sent at all“ Amazon S3事件通知通常在几秒钟内交付事件,但有时可能需要一分钟或更长时间。在极少数情况下,事件可能会丢失。” ,虽然很少见。

  2. 您有一些错误,并且lambda在处理此消息时未打印出预期的内容/您未正确搜索日志。

您还应该确保在SQS上所有记录均已成功提取和处理。

答案 2 :(得分:0)

确保已选中所有创建对象事件作为触发器。

我遇到了一个问题,即> 8MB的文件被作为多部分上传进行上传,并作为另一个触发器与PUT触发器分开列出。