Лучшее решение для повторения лямбда-функции AWS, когда истекло время ожидания - PullRequest
0 голосов
/ 02 февраля 2019

У меня серьезный вопрос, и мне нужна ваша помощь.Я не могу найти какое-либо решение в Интернете, потратив много времени.

Я создал бота для получения данных, что является действительно тяжелой задачей, потому что мне нужно настроить скребок, а затем он извлекает данные из веб-страницы черезмного шагов (вход в систему, выход из системы, щелчок, кнопка отправки, ...), и после получения этого результата он будет публиковать в API для создания отчета.

Я использую событие Cloudwatch, чтобы запустить мою лямбда-функциюопределенное время каждый день.

Проблема в том, что я установил свою лямбда-функцию в ее максимальных настройках (3 ГБ ОЗУ и 15-минутный тайм-аут, метрики в январе 2019 г.), но иногда моя лямбда-функция не выполнялась при выполнении (может быть, задачи очистки занимают слишком много шагов, или, возможно, веб-страница, которую я пытался очистить, не стабильна), и она редко дает сбой, я думаю, всего 5%.

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

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Это идеальный пример для StepFunction, который можно запланировать с помощью CloudWatch Event вместо лямбды.

StepFunction может вызывать вашу лямбду и обрабатывать логику повторения при сбое с настраиваемой экспоненциальнойОткат при необходимости.

Вот пример StepFunction

{
  "Comment": "Call lambda with retry",
  "StartAt": "Scraper",
  "States": {
    "Scraper": {
      "Type": "Task",
      "Resource": "<LAMBDA_ARN>",
      "Retry": [
        {
          "ErrorEquals": [
            "States.ALL"
          ],
          "IntervalSeconds": 20,
          "MaxAttempts": 5,
          "BackoffRate": 2
        }
      ],
      "End": true
    }
  }
}
0 голосов
/ 02 февраля 2019

Ваша лямбда уже повторена, потому что триггер от события облачного наблюдения является асинхронным.(см. документы ниже) Я бы настроил DLQ для вашей лямбды, а затем обработал бы оттуда.

Из документов ( aws источники лямбда-событий )

Обработка ошибок для данного источника события зависит от того, как вызывается Lambda.Amazon CloudWatch Events вызывает вашу функцию Lambda асинхронно.Для получения дополнительной информации о том, как ошибки повторяются, см. AWS Lambda Retry Behavior.

And: ( aws поведение lambda retry )

Асинхронный вызов - асинхронные события помещаются в очередь передиспользуется для вызова лямбда-функции.Если AWS Lambda не может полностью обработать событие, он автоматически дважды повторяет вызов с задержками между повторными попытками.Если вы указали очередь недоставленных сообщений для своей функции, то сбойное событие отправляется в указанную очередь Amazon SQS или раздел Amazon SNS.Если вы не укажете очередь недоставленных сообщений (DLQ), которая не требуется и является настройкой по умолчанию, то событие будет отброшено.Дополнительную информацию смотрите в разделе Лямбда-функции AWS Очереди недоставленных букв.

...