使用 API 网关顺序调用 1 个 AWS Lambda

Invoking 1 AWS Lambda with API Gateway sequentially

我知道有一个标题相同的问题,但我的问题有点不同:我有一个 Lambda API - saveInputAPI() 将值保存到指定字段中。用户可以使用不同的参数调用此 API,例如:

saveInput({"adressType",1}); //adressType is a DB field.

saveInput({"name","test"})  //name is a DB field.

当然,这在 AWS 上托管,所以我也在使用 API 网关。但问题是有时会发生这样的错误:

如你所见。 API 19号先被调用,最后完成的很晚

 (10:10:16:828) -> (10:10:18:060) 

虽然APINo.18调用的晚了但是完成的早了...

 (10:10:17:611) -> (10:10:17:861)

这导致我的项目出现了很多问题。有时,2 API 之间的延迟长达 10 秒。前面的项目独立运行,因此用户不知道后面发生了什么。他们认为他们已经将 addressType 设置为 1,但实际上,addressType 仍然是 2。由于这个项目很大,我无法改变这种 [using only 1 API to update DB value] 的设计。有什么办法可以解决这个问题吗??真的很感激任何想法。谢谢

Amazon Lambda 在设计上是异步的。这意味着试图使其同步和可预测是一种浪费。

如果您关心的是避免“旧”数据(在调度意义上)覆盖“新”数据,那么您可以考虑为每个数据加上时间戳,然后应用约束,例如“如果您想覆盖目标数据,那么您的与目标数据的时间戳相比,源时间戳必须在未来

如果最后更新的时间戳比源事件时间戳更新,则无法跳过对数据库的更新,我们需要解耦 Api 网关和 Lambda。

  • Api 网关写入 SQS FIFO Queue
  • Lambda 使用 SQS 并处理请求。

这将确保首先处理较旧的事件。