Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 仅在收集了固定数量的数据后执行AWS Lambda(具有多个数据)_Amazon Web Services_Aws Lambda_Amazon Sqs_Aws Step Functions - Fatal编程技术网

Amazon web services 仅在收集了固定数量的数据后执行AWS Lambda(具有多个数据)

Amazon web services 仅在收集了固定数量的数据后执行AWS Lambda(具有多个数据),amazon-web-services,aws-lambda,amazon-sqs,aws-step-functions,Amazon Web Services,Aws Lambda,Amazon Sqs,Aws Step Functions,我希望仅在收集了固定数量的数据之后,才使用多个数据执行lambda函数。固定量将是,例如,只考虑特定数量的消息,或者在特定的时间范围内发送的消息。 我想用SQS来解决这个问题,我在SQS上写消息,并用轮询来检查SQS状态。但是我不喜欢这个解决方案,因为我希望在匹配条件时立即触发lambda(例如:从发送第一条消息开始经过的时间,或者固定数量的消息) 理想情况是发送收集的所有消息,例如,在第一条消息到达后1分钟 要明确的是: 第一条消息到达队列 从现在开始启动计时器(例如1分钟) 计时器结束,它将

我希望仅在收集了固定数量的数据之后,才使用多个数据执行lambda函数。固定量将是,例如,只考虑特定数量的消息,或者在特定的时间范围内发送的消息。 我想用SQS来解决这个问题,我在SQS上写消息,并用轮询来检查SQS状态。但是我不喜欢这个解决方案,因为我希望在匹配条件时立即触发lambda(例如:从发送第一条消息开始经过的时间,或者固定数量的消息)

理想情况是发送收集的所有消息,例如,在第一条消息到达后1分钟

要明确的是:

  • 第一条消息到达队列
  • 从现在开始启动计时器(例如1分钟)
  • 计时器结束,它将触发lambda,并收集到所有消息
  • 此外,我希望基于不同的ID并行处理不同的队列

    有没有一种优雅的方式可以做到这一点


    我已经有了一个与顺序lambda一起工作的系统,它可以处理每一条消息的所有过程

    您可以通过几种方式来实现这一点。我会这样做:

  • 让队列成为lambda函数的事件源
  • lambda函数可以:触发状态机或不执行任何操作。如果当前没有触发状态机,它将触发状态机(这意味着我们在1分钟的范围内) 状态机具有以下步骤:

  • 1分钟等待
  • 它正在处理吗

  • 不幸的是,在AWS Lambda上执行这项任务并不容易(我们有一个类似的用例)

    SQS或Kinesis数据流作为触发器可能会有所帮助,但有几个限制:

    • AWS Lambda将以非常高的频率拉动SQS。您必须向lambda添加一个并发限制,以使其由多个项目触发。最大批量只有10个

    • 每个碎片的速度为每秒一次,无法更改

    在不同的调用之间聚合记录不是一个好主意,因为您永远不知道下一次调用是否会在不同的容器上启动,这样它们就会丢失

    Kinesis Firehose很有帮助,因为您可以配置发送新批次的最大批次大小和最大时间范围。您可以将其配置为写入S3存储桶,并将lambda配置为由新创建的文件触发


    确保如果您使用Kinesis数据流作为Kinesis消防软管的源,则来自数据流每个碎片的数据将在消防软管中单独成批处理(AWS中未记录此情况)。

    使用状态机不会有任何帮助,因为他要求聚合这段时间内收到的更多记录。正如我在回答中提到的,使用SQS存在一些问题。