nodejs Почему при вызове моей лямбда-функции я получаю сообщение об ошибке «Время ожидания задачи истекло через 6,01 секунды»? - PullRequest
0 голосов
/ 16 мая 2019

Мой код работает нормально при локальном тестировании с serverless invoke local -f myFunction -d 3 После того, как я развернул его в lambda с помощью run.js 8.10 и пытаюсь запустить его с launch.js Я получаю сообщение об ошибке «Задание истекло через 6,01 секунды». Консоль aws Я изменил время ожидания на 2 минуты, что достаточно

Это ответ, который я получаю:

{ StatusCode: 200,
  FunctionError: 'Unhandled',
  LogResult:
   'U1RBUlQgUmVxdWVzdElkOiBlY2I0OWVjMC05NTFjLTQ2NTAtOTI3ZS01NDdkMzIzM2QyODUgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiBlY2I0OWVjMC05NTFjLTQ2NTAtOTI3ZS01NDdkMzIzM2QyODUKUkVQT1JUIFJlcXVlc3RJZDogZWNiNDllYzAtOTUxYy00NjUwLTkyN2UtNTQ3ZDMyMzNkMjg1CUR1cmF0aW9uOiA2MDA2LjI0IG1zCUJpbGxlZCBEdXJhdGlvbjogNjAwMCBtcyAJTWVtb3J5IFNpemU6IDEwMjQgTUIJTWF4IE1lbW9yeSBVc2VkOiAxMDUgTUIJCjIwMTktMDUtMTZUMTQ6MTE6MTMuOTk0WiBlY2I0OWVjMC05NTFjLTQ2NTAtOTI3ZS01NDdkMzIzM2QyODUgVGFzayB0aW1lZCBvdXQgYWZ0IgNi4wMSBzZWNvbmRzCgo=',
  ExecutedVersion: '$LATEST',
  Payload:
   '{"errorMessage":"2019-05-16T14:11:13.994Z ecb49ec0-951c-4650-927e-547d3233d285 Task timed out after 6.01 seconds"}' }

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

"use strict";
const AWS = require("aws-sdk")

var pages = [1]

function deployScraper(page) {
    const lambda = new AWS.Lambda({
      region: "eu-west-2"
    });

    const params = {
      FunctionName: "serverless-dev-myFunction",
      InvocationType: "RequestResponse",
      LogType: "Tail",
      Payload: JSON.stringify(page)
    };

    return lambda.invoke(params, function(error, data) {
      if (error) {
        console.error(JSON.stringify(error));
        return new Error(`Error scraping: ${JSON.stringify(error)}`);
      } else if (data) {
        console.log(data);
        return JSON.stringify(data);
      }
    });
  }

  function swarm(arr) {
    arr.forEach(page => {
      deployScraper(page);
    });
  }

  swarm(pages);

handler.js Это моя лямбда-функция, она входит на сайт и распечатывает массив данных со страницы

"use strict";
const {login, getDataArray, saveToDB} = require("./utils"); 
const username = 'my_username';
const password = 'my_password';

module.exports.myFunction = (page, context, callback) => {
  // 1. login to site
  login(username, password)
  // 2. scrape data from page
  .then( ()  => getDataArray(page))
  // 3. upload data to DB
  .then(data => saveToDB(data))
.catch(error =>
  callback(new Error(`Error scraping ${page}: ${JSON.stringify(error)}`))
);
};

1 Ответ

0 голосов
/ 16 мая 2019

Ваш Lambda, вероятно, ожидает подключения к Интернету, срок действия которого обычно истекает через ~ 30 секунд.Если время ожидания вашей функции меньше 5 с, вы видите ошибку об истечении времени ожидания задачи.Вы можете подтвердить это, увеличив количество времени, которое вы даете Lambda-серверу поработать, и посмотрите, вернется ли он в конечном итоге с сетевой ошибкой.

Если вы не включили доступ в Интернет для своей Lambda, вам нужно сделать это для:VPC через шлюз.

https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...