当前位置: 首页 > 知识库问答 >
问题:

AWS lambda函数对具有相同时间戳的同一事件多次触发

钮善
2023-03-14

我将AWS S3触发器配置为带有PUT操作的lambda函数。

每2分钟上载100KB大小的.txt文件。

有时S3会以相同的事件和时间触发lambda两次。

触发器1:

启动请求D:f32a3353-bd53-48fd-aa49-c09ee9c82a3e 2019-07-30T22:47:05.122Z

触发器2:

启动请求D:f32a3353-bd53-48fd-aa49-c09ee9c82a3e 2019-07-30T22:47:05.98Z

我怎样才能避免这种情况呢?

共有2个答案

施梓
2023-03-14

可能是调用Lambda函数的问题,请参阅https://docs.aws.amazon.com/Lambda/latest/dg/retries-on-errors.html

因此,它将是无害的(代码不会运行两次)

公良向阳
2023-03-14

让我引用文件:

偶尔,即使没有发生错误,您的函数也可能多次接收到相同的事件。

另一个:

当发生错误时,您的函数可能会被多次调用。重试行为因错误类型、客户端、事件源和调用类型而异。例如,如果异步调用一个函数而它返回一个错误,则Lambda最多再执行该函数两次。

参考:https://docs.aws.amazon.com/lambda/latest/dg/api_invoke.html

lambda必须是幂等的才能处理此行为,请参阅以下链接的详细信息:

https://aws.amazon.com/premiumsupport/knowledge-center/lambda-function-idempotent/

https://cloudonaut.io/your-lambda-function-might-execute-twide-deal-with-it/

 类似资料:
  • 在某些场景中,Apache Flink似乎无法很好地处理具有相同时间戳的两个事件。 根据文档,水印t表示任何新事件的时间戳都将严格大于t。除非您完全放弃两个事件具有相同时间戳的可能性,否则您将无法安全地发出t的水印。强制使用不同的时间戳还将系统每秒可处理的事件数限制为1000。 这真的是Apache Flink中的一个问题还是有解决方法? 对于那些希望使用具体示例的人,我的用例是为事件时间顺序流构

  • 我的Python Azure函数配置文件()定义了一个Blob存储触发器。 当Azure功能唤醒时(即,Live Metrics中显示的服务器在一段睡眠时间后变为在线),它将处理所有现有Blob,而不管哪些Blob已经生成触发事件。 我注意到< code > azure-web jobs-hosts/blob receipts 文件夹中填充了< code>sandboxhost637nnn文件夹。

  • 我有一个 Blob 存储容器,其中配置了事件网格触发器(Blob 已创建)。我正在通过数据工厂加载此 blob 存储文件,很多时候,许多文件可能会在一次尝试中出现在此 blob 中。也许我们可以举一个20个文件的例子。 好消息是我的事件网格触发器启动了,函数app被调用。然而,我发现有时对于同一个文件,事件网格触发器被触发了不止一次。 在这20个文件中,很少有文件非常大,比如300 MB,但其他文

  • 我已经在Terraform中设置了以下内容。所以有两条事件规则,上午8点开始\u事件,下午6点停止\u事件。 每个事件都将一个操作传递给lambda 这很有效 我面临的问题是,我无法让Terraform将start\u事件与lambda函数相关联。我进入AWS控制台,可以手动将CloudWatch start\u事件触发器添加到lambda函数中。 如果我有start_event资源 它会抱怨语句

  • 问题内容: 有没有一种方法可以使存根方法在后续调用中返回不同的对象?我想这样做是为了测试来自的不确定响应。即,不管方法的返回顺序如何进行测试,结果都保持恒定。 我要测试的代码看起来像这样。 问题答案: 你可以使用方法来做到这一点(与链接时): 或使用等效的静态doAnswer方法:

  • 问题内容: 我有一个按名称列出的客户表:在SQL中,其中有3列:, 此表中有重复的条目,但 时间戳记 不同。 例如 我想从数据库中消除此问题,并保持第一时间/日期可用。 谢谢。 问题答案: 这有效,请尝试: 在子查询中,它确定哪个记录是每个的第一个记录,然后删除所有其他记录以作重复。我还添加了该子句,该子句返回受该语句影响的行。 您也可以通过使用排名功能来做到这一点: 看看哪一个查询开销较小并使用