Amazon web services S3通知创建多个事件

Amazon web services S3通知创建多个事件,amazon-web-services,amazon-s3,aws-lambda,Amazon Web Services,Amazon S3,Aws Lambda,我们一直在使用AWS S3通知在文件到达S3时触发lambda函数,这个模型工作得相当好,直到我们注意到一些文件被多次处理,在我们的数据存储中生成重复。 我们注意到大约0.05%的文件发生了这种情况 我知道可以通过执行upsert来防止这种情况,但我们关心的是运行不必要的lambda函数的潜在成本,因为这会影响我们的成本 我搜索过谷歌等,但只发现了类似的问题。我们没有超时问题,因为文件已被完全处理。我们的文件非常小,最大的文件不到400k。我们没有两次收到相同的事件,因为事件具有不同的请求ID,

我们一直在使用AWS S3通知在文件到达S3时触发lambda函数,这个模型工作得相当好,直到我们注意到一些文件被多次处理,在我们的数据存储中生成重复。 我们注意到大约0.05%的文件发生了这种情况

我知道可以通过执行upsert来防止这种情况,但我们关心的是运行不必要的lambda函数的潜在成本,因为这会影响我们的成本


我搜索过谷歌等,但只发现了类似的问题。我们没有超时问题,因为文件已被完全处理。我们的文件非常小,最大的文件不到400k。我们没有两次收到相同的事件,因为事件具有不同的请求ID,即使它们在同一个文件上运行。

在花了相当多的时间查看S3、SNS和Lambda文档之后,我发现了一个关于特定于S3通知的注释,内容如下:

如果应用程序需要特定的语义(例如, 确保没有遗漏任何事件,或操作只运行一次), 我们建议您在以下情况下考虑错过和重复的事件: 设计应用程序


实际上,这意味着S3通知对我们来说是一个错误的解决方案,但考虑到我在这个问题上投入的研究时间,我想我会在这里为那些可能忽略了上面链接的页面的人做贡献。

两个问题:如果调查结果有用,你是否向AWS支持部门提出了这个问题?您是否100%确定导致多个事件的对象没有被多次上载?这将适合不同请求ID的症状。有趣的0.05%统计数据,谢谢分享。在这种情况下,任何重复处理的额外成本似乎都很低,因此可能值得与不使用S3触发器和Lambda构建的编排的额外成本进行比较,以确定这是否有意义。@jarm我们没有向AWS提出,正如挖掘所示,我们对此解决方案的用例/设计是错误的。我们确信这些文件只写了一次,因为我们正在对这些文件进行版本控制,我们的日志表明这些文件只创建了一次,我们预计在一年内生成数十亿个文件,该lambda是多阶段过程的一部分,其中第一个文件被拆分为20多个文件,在过程结束时,每个文件由不同的lambda处理,然后加载到数据库中进行近实时分析和报告,复制正在进行中。您绝对确定这些事件是具有相同负载的完美复制吗?特别是
响应元素
定序器
?该服务不能保证完美的1:1,但您报告的比率似乎比我预期的要高,而且我的环境中没有记录的重复实例。就个人而言,我喜欢使用S3>SNS>Lambda,即使在不严格需要SNS的情况下,因为这样我就可以订阅SNS主题的SQS队列,并在该队列中并行捕获事件,以进行单独分析。
responseElements['x-amz-request-id']
与中的
请求ID
列相关,对于与任何单个对象键对应的所有事件,
sequencer
的词法比较提供了S3认为这些事件发生的顺序。这些事件在数据库中创建了一个具有完全相同值的新行。在我们的POC中,它工作得完美无缺,我们在运行它2个月后才注意到这一点。我们针对这些写入的日志表明,它们只发生过一次,并且一些重复的事件在通知中具有不同的时间戳。我们发现同一事件和文件的不同sns请求ID相隔一分钟。我没有检查s3日志,但现在将尝试。可以使用redis实现分布式锁吗?使用S3对象键作为锁。确保密钥只处理一次。