首页 > 解决方案 > 在批量执行 AWS Kinesis 之前设置超时延迟

问题描述

我正在使用 AWS Kinesis(使用无服务器框架配置)并且我正在使用1batchSize

processEvents:
    handler: ...
    events:
      - stream:
          type: kinesis
          batchSize: 1
          arn:
            Fn::GetAtt: [KinesisStream, Arn]

有没有办法设置 20 秒的超时,例如,在读取下一批之前?

我想在每个 lambda 执行之前有一个时间延迟,基本上从流中提取一条记录。

谢谢!

标签: aws-lambdaserverless-frameworkamazon-kinesis

解决方案


您的 Lambda 由 Kinesis 同步调用,只有在 Lambda 返回成功时才会继续执行下一个事件。

这些情况让您有机会自己在 Lambda 代码中编写延迟。

await new Promise(done => setTimeout(done, 20000))
processMyEvent(event)

1在运行下一个事件之前,必须先完成此 Lambda的批量大小。

请注意,额外的 Lambda 运行时间会产生成本。

您也可以换个方向,执行您的实际代码,然后延迟关闭您的 Lambda。如果您的处理在运行时间上有所不同,您甚至可以使用上下文对象来查看 Lambda 已经运行了多长时间。

最后,我建议更改您的架构。除了产生的额外成本外,您还人为地减慢了平台速度。


推荐阅读