Синхронный лямбда-вызов — что происходит, когда он регулируется?

#amazon-web-services #aws-lambda

#amazon-web-services #aws-lambda

Вопрос:

У меня есть 2 функции lambda, запущенные на платформе. Lambda A синхронно вызывает Lambda B, чтобы использовать его ответ для дальнейшей обработки. Это хорошо работало бы в обычной ситуации, но что произойдет, если будет соблюден предел одновременного выполнения лямбда? Вот что я могу прочитать из документов AWS:

 Clients such as the AWS CLI and the AWS SDK retry on client timeouts, throttling errors (429), and other errors that aren't caused by a bad request (500 series). For a full list of invocation errors, see Invoke.
  

Но я не уверен, как часто / сколько раз они будут повторять попытку. Нужно ли мне добавлять логику к лямбда-А, чтобы повторить попытку с определенным интервалом, когда он получит ответ 429? Если у кого-нибудь есть понимание этой проблемы, пожалуйста, помогите мне.

Комментарии:

1. Это также удваивает стоимость выполнения лямбда-кода, поскольку вы платите одной лямбде за ожидание другой. Я по возможности избегаю вызова лямбд в других лямбдах. Я предпочитаю создавать лямбда-конвейеры вокруг очередей SQS, чтобы избежать этой и других проблем.

2. @DanielFarrell Спасибо за ваш совет, но на данный момент это совершенно неизбежная ситуация, поэтому я хочу знать подробное поведение повтора при синхронных вызовах функций.

3. Политика повторных попыток для каждого AWS SDK должна быть задокументирована. Например, boto3 находится на boto3.amazonaws.com/v1/documentation/api/latest/guide /. … Кроме того, вы должны иметь возможность эмулировать регулирование, установив максимальный параллелизм для вашей лямбда-функции, и для его завершения намеренно требуется много времени, при этом вы можете запускать дополнительные вызовы для тестирования.

4. Спасибо, @jarmod! Это то, что я искал.

Ответ №1:

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

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

Служба AWS Step Functions позволяет вам создать конечный автомат, который в вашем случае позволил бы вам построить рабочий процесс, в котором выходные данные Lambda A затем передаются в Lambda B, со встроенной логикой для обработки попыток и сбоев.

Для получения дополнительной информации об этом подходе ознакомьтесь с документацией по созданию бессерверного рабочего процесса.