是否可以保证交付AWS S3事件通知?

Mik*_*gan 5 amazon-s3 amazon-web-services aws-lambda

我将AWS S3事件通知连接到AWS Lambda处理管道。

我找不到有关S3事件通知保证的文档。我可以确定所有S3事件都会触发lambda进程吗?秩序与我无关,只是我的lambda最终被解雇了。

如果没有这样的保证,该如何处理?

Luc*_*iks 11

2020 年更新

这些事件现在至少发生一次:https : //docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html

该页面的相关引用:

Amazon S3 事件通知设计为至少传送一次。通常,事件通知会在几秒钟内发送,但有时可能需要一分钟或更长时间。

原答案

原则上是的。但是,Lambda 具有 99.9% 的 SLA,S3 也具有 99.9% 的正常运行时间 SLA。因此,理论上可能会错过某些事件,但仅限于服务中断时。当 Lambda 函数失败时,它会自动重试最多 3 次。

我使用 S3 作为 Lambda 的“队列”并且从未错过任何消息(数以百万计)。

我认为你无能为力来处理这个问题。使用“无服务器”基础设施的一部分意味着您也失去了一些控制权(但是,我认为 AWS 可以比我自己和一些专用服务器做得更好)。

  • 我认为您的意思是“原则上不,但实际上是”。“保证”是对某事的正式保证或承诺。在实践中,您可能永远不会真正遇到问题,因为提供商会尽一切合理努力确保事情按预期发生,但这并不能保证。 (4认同)
  • 很难说。如果它们丢失了,您可能也看不到弹出的错误,因为没有触发任何内容。但我们仍然运行这些管道(距离我的回答大约 3.5 年),已经处理了数十亿次 lambda 执行,并且从未遇到过可能与此相关的问题。 (2认同)

You*_*uan 5

非常有趣的是,AWS仅通过文档而不是产品将语义从最多一次升级为至少一次。

2020 年之前,此链接如下所示:

Amazon S3 事件通知通常会在几秒钟内传送事件,但有时可能需要一分钟或更长时间。在极少数情况下,事件可能会丢失。如果您的应用程序需要特定的语义(例如,确保不会丢失任何事件,或者操作仅运行一次),我们建议您在设计应用程序时考虑丢失和重复的事件。您可以使用 LIST 对象 API 或 Amazon S3 库存报告审核错过的事件。LIST 对象 API 和 Amazon S3 库存报告受最终一致性的影响,可能不会反映最近添加或删除的对象。

2020年改为至少一次,如下:

Amazon S3 事件通知设计为至少传送一次。通常,事件通知会在几秒钟内传送,但有时可能需要一分钟或更长时间。

根据此PR,2021 年 11 月,它再次降级为仅一次

默认情况下,Amazon S3 事件通知仅传送一次。大多数时候,事件通知会在几秒钟内发送。但是,有时可能需要一分钟或更长时间才能送达。

2021年12月,我们指出AWS做了向后不兼容的更改,AWS解释说这是文档更改的事件,尽管我不相信。于是AWS很快就把文档改回如下:

Amazon S3 事件通知设计为至少传送一次。通常,事件通知会在几秒钟内发送,但有时可能需要一分钟或更长时间

但AWS支持也告诉我们,它被设计为至少一次,但不保证任何事情。

因此,这不仅令人困惑,而且具有误导性。