AWS SQS中缺失S3事件

3
我有一个 AWS Lambda 函数,应该由 Simple Queue Service SQS 中的消息触发。当新的json文件被写入我的s3存储桶或者现有的json文件被覆盖时,该SQS应该会收到通知。两种情况下的事件类型都是s3:ObjectCreated,我在我的 SQS 中看到了这两种情况的通知。 但问题是,经常有一个新文件在s3中(或者更新了现有文件),但在 sqs 中没有相应的消息!因此许多文件丢失了,Lambda 不知道应该处理这些文件。在 Lambda 中,我将接收到的整个 SQS payload 的内容打印到日志文件中,然后尝试使用类似 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文件生成s3:objectCreated事件?有办法解决吗?还是采用某种变通方法?

你正在使用s3:ObjectCreated:*事件,对吗? - Michael - sqlbot
正确的,s3:ObjectCreated:* - lugger1
3个回答

2
根据AWS文档:
如果在同一时间对单个非版本化对象进行两次写操作,则可能仅会发送单个事件通知。如果您想确保每次成功写入都会发送事件通知,可以在存储桶上启用版本控制。使用版本控制,每次成功写入都将创建对象的新版本,并且还会发送事件通知。
此外,为什么不直接从S3触发Lambda呢?
参考链接:https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html

0

有两种可能:

  1. 一些事件可能会延迟或根本不会发送“Amazon S3事件通知通常在几秒钟内传递事件,但有时可能需要一分钟或更长时间。在极少数情况下,事件可能会丢失。”,尽管这非常罕见。

  2. 您可能犯了一些错误,当处理此消息时 lambda 要么未打印您期望的内容 / 您未正确搜索日志。

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


是的,我看到过“在非常罕见的情况下,事件可能会丢失”并感到很有趣。在我的情况下,大约有5%的文件被错过了!这太多了。如何确保在SQS上所有记录都被摄取?我在AWS上找不到任何与sqs相关的日志,可以显示已被摄取到sqs中的内容。只是一个想法 - 如果我创建2(或3)个具有相同s3相关信息的sqs,是否有可能在第一个sqs中错过的消息会出现在第二个或第三个sqs中? - lugger1
5%确实很多。请检查SQS监控选项卡。 您的意思是S3将向多个队列发送事件吗? 这似乎不是一个好的解决方案 - 如果您确定有5%的事件未被发送,请联系AWS支持。 - Ronyis
所以,如果存在S3事件日志,我可能会查找它们,以查看这些丢失文件是否生成了s3:ObjectCreated事件。或者这是那些“非常罕见的情况”之一,即“可能会丢失事件”-在这种情况下,我不知道该怎么做。 - lugger1
是的,这对我来说一点也不“罕见”。 我正在通过S3同步上传文件,一次同步超过8个文件就会触发这个问题。 - undefined

0

请确保您已将所有创建对象事件标记为触发器。

我曾遇到一个问题,即文件大小超过8MB的文件被上传为多部分上传,这些上传被单独列为PUT触发器之外的另一个触发器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接