Lambda - SQS 事件:批量大小、容器产生和终止的数量

Lambda - SQS Event: Batch Size, number of container spawning and termination

这是我的 Lambda 函数:

LambdaFunction:
  Type: AWS::Serverless::Function
  Properties:
    Description: Lambda Function that is spawned via an SQSEvent
    FunctionName: LambdaFunctionName
    Handler: 'com.amazon.krakenscreenruleengineservicelambda.handler.RulesSubscriptionConsumerHandler::handleRequest'
    Runtime: java8
    Events:
      SubscriptionEvent:
        Type: SQS
        Properties:
          Queue:
            Fn::GetAtt: [SubscriptionQueue, Arn]
          BatchSize: 1
    Timeout: 890
    MemorySize: 1024

我已将 BatchSize 设置为 1

1 我所做的假设是,单个 Lambda 容器的生成取决于它特定的 STARTEND requestId.如果有 5 个这样的 STARTEND requestId,则意味着生成了 5 个独特的容器。

现在这是否意味着在 STARTEND requestId 中,恰好 1 消息被处理对于下一条消息,会生成一个带有新开始和结束的新容器 requestId 即使之前的容器有足够的内存和时间来执行更多请求?

由于您指定的批量大小为 1,因此请求将包含单个 SQS 消息。因此,“在 START 和 END requestId 之间”将是 Lambda 正在处理的单个消息的日志。

但是,同一个容器可以在完成后用另一个请求再次调用。 Containers in AWS Lambda can be reused。它们一次不会用于多个请求,但它们可用于许多顺序请求。

AWS Lambda 函数的时间限制是处理单个请求所需的时间。因此,如果容器被重复使用,则时间限制从每个请求开始。

单个 Lambda 容器可以 运行 用于 hours/days/months,等等,如果它的利用率很高,或者如果您配置了并发。它最多只有 15 分钟(或更短时间,具体取决于配置)来处理单个请求。


这在“Lambda 执行环境生命周期”部分下有正式记录here