0

这是我的 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

我设置BatchSize1.

我所做的 1 个假设是,单个 Lambda 容器生成由其特定的STARTEND requestId确定。如果有 5 个这样的STARTEND requestId,则意味着生成了 5 个唯一容器。

现在这是否意味着在STARTEND requestId中,会准确处理消息,并且对于下一条消息,即使前一个容器具有执行更多请求的内存和时间,也会1使用新的 START 和 END 生成一个新容器?requestId

4

1 回答 1

1

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

然而,同一个容器可以在完成后被另一个请求再次调用。AWS Lambda 中的容器可以重复使用。它们一次不会用于多个请求,但它们可以用于许多顺序请求。

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

单个 Lambda 容器可以运行数小时/数天/数月等,如果它的利用率很高,或者如果您已预置并发。它最多只有 15 分钟(或更少,具体取决于配置)来处理单个请求。


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

于 2021-09-01T20:56:41.273 回答