Событие Lambda — SQS: Размер пакета, количество нерестящихся и завершенных контейнеров

#amazon-web-services #aws-lambda #amazon-sqs #aws-lambda-containers

Вопрос:

Вот моя лямбда-функция:

 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 предположение, которое я делаю, состоит в том, что нерест одного лямбда-контейнера определяется его конкретным НАЧАЛОМ и КОНЦОМ requestId . Если есть 5 таких НАЧАЛЬНЫХ и КОНЕЧНЫХ requestId , это означает, что было создано 5 уникальных контейнеров.

Теперь означает ли это, что в НАЧАЛЕ и в КОНЦЕ requestId обрабатывается именно 1 сообщение, и для следующего сообщения создается новый контейнер с новым НАЧАЛОМ и КОНЦОМ requestId , ДАЖЕ если у предыдущего контейнера было достаточно памяти и времени для выполнения большего количества запросов?

Ответ №1:

Поскольку вы указали размер пакета 1, то запрос будет содержать одно сообщение SQS. Таким образом, «между НАЧАЛЬНЫМ и КОНЕЧНЫМ запросом» будет журналом для одного сообщения, обрабатываемого Лямбда.

Однако тот же контейнер может быть вызван снова с другим запросом после его завершения. Контейнеры в AWS Lambda можно использовать повторно. Они не используются для более чем одного запроса одновременно, но их можно использовать для многих последовательных запросов.

Ограничение по времени для функции AWS Lambda-это время, необходимое для обработки одного запроса. Поэтому, если контейнер используется повторно, ограничение по времени начинается с каждого запроса.

Один лямбда-контейнер может работать в течение нескольких часов/дней/месяцев и т. Д., Если он сильно загружен или если у вас предусмотрен параллелизм. У него просто есть максимум 15 минут (или меньше, в зависимости от конфигурации) для обработки одного запроса.


Это официально задокументировано здесь, в разделе «Жизненный цикл среды выполнения Lambda».