【问题标题】:Lambda creates duplicate records in S3Lambda 在 S3 中创建重复记录
【发布时间】:2019-05-17 17:44:56
【问题描述】:

我有由 SQS 触发的 Lambda 函数。它对收到的 JSON 对象进行一些验证,并将其写入 S3 存储桶。一切似乎都工作正常,除了在启用版本控制的情况下查看存储桶中对象的所有版本时,似乎时不时地节省了两倍。它是同一个对象,内容相同,保存时间相同,但版本 ID 不同。有什么想法吗?

【问题讨论】:

  • 您的 SQS 队列类型设置为 FIFO 还是标准?
  • 标准。因为它触发了 Lambda,所以我的理解不能是 FIFO。
  • @Ivars 有时您可以通过手动调用该函数来复制它,这一点非常重要,正如您在下面提到的那样——排除了 SQS。每次在 S3 中创建对象时,响应中都会提供新对象的版本 ID。作为故障排除的起点...记录该值。

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


【解决方案1】:

AWS SQS 标准队列保证每个项目将至少交付一次,但不保证重复交付。

因此,在某些情况下,SQS 可能会在使用标准队列时多次传递相同的有效负载。这就是您在 S3 存储桶中看到重复版本的原因。

AWS SQS Queue Types page 对此及其行为方式进行了一些很好的描述。

来自Standard Queues的那个页面:

至少一次传递:一条消息至少传递一次,但有时会传递多个消息副本。

【讨论】:

  • 我不这么认为。这也是我的第一个想法,但是当我使用触发 Lambda 而不是 SQS 的测试事件运行测试时,也会发生同样的事情,
  • @Ivars 如果没有更多信息,我们真的无能为力。
  • 您是否在邮件处理完毕后通过MessageHandle 删除邮件?日志是否显示任何可能导致函数运行两次的故障(例如超时)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 2023-02-07
  • 2018-06-10
  • 2013-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多