Сетевая ошибка при работе лямбда-функции с безголовым браузером

#node.js #amazon-web-services #lambda #amazon-dynamodb #serverless

#node.js #amazon-веб-сервисы #лямбда #amazon-dynamodb #без сервера

Вопрос:

Я пытаюсь протестировать функцию на AWS Lambda. Функция открывает безголовую версию Chromium через Puppeteer. Браузер открывается chrome-aws-lambda , чтобы избежать загрузки всего браузера. Я развертываю свой Lambda через бессерверный и взаимодействую с таблицей DynamoDB для других целей, если это помогает.

Следующая функция проверяет наличие рекламы в видео YouTube:

 async function checkAdsPresence(page, adSelector) {
  await delay(10000);
  try {
    const module = await page.evaluate((adSelector) => {
      const adModule = document.querySelector(adSelector);
      const adType = adModule.children.length;
      const presence = adType > 0;
      return presence
    }, adClass);
    return module
  } catch (err) {
    return "No ad module"
  }
}
 

Эта функция вызывается повторно и ожидает 10 секунд, как вы можете видеть из функции задержки, которая определяется следующим образом.

 function delay(time) {
    return new Promise(function (resolve) {
        setTimeout(resolve, time);
    });
}
 

Но после вызова функции несколько раз, примерно 4 (так 40 секунд в видео), на панели Lambda отображается следующая ошибка.

Calling the invoke API action failed with this message: Network Error

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

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

1. Ваша лямбда-функция находится внутри VPC?

2. @Андре. IDK нет, я развернул свою лямбду через Serverless, я отредактирую, чтобы добавить некоторую информацию

3. @Андре. IDK в моем случае находится в VPC, какое-то предположение?

4. @DouglasOliveira проверьте группу безопасности, связанную с лямбдой, затем таблицы маршрутизации

5. Спасибо @Andre. IDK Я изменил реализацию кода, я думаю, что проблема связана с объемом данных, которые обрабатывала моя лямбда, затем я разделил выполнение на более ограниченные части, вызывая одну и ту же лямбду несколько раз, но с меньшим количеством данных, так что все получилось.