Javascript nodejs为什么我会出错;任务在6.01秒后超时”;当调用我的lambda函数时?

Javascript nodejs为什么我会出错;任务在6.01秒后超时”;当调用我的lambda函数时?,javascript,node.js,amazon-web-services,aws-lambda,Javascript,Node.js,Amazon Web Services,Aws Lambda,使用serverless invoke local-f myFunction-d3在本地测试时,我的代码运行良好。一旦我使用node.js 8.10 runtime将其部署到lambda,并尝试使用launch.js运行它,我在aws控制台上收到一个错误“任务在6.01秒后超时”,我已将超时更改为2分钟,这是很长的时间 这是我得到的答复: { StatusCode: 200, FunctionError: 'Unhandled', LogResult: 'U1RBUlQgUmVxd

使用
serverless invoke local-f myFunction-d3
在本地测试时,我的代码运行良好。一旦我使用node.js 8.10 runtime将其部署到lambda,并尝试使用
launch.js运行它,我在aws控制台上收到一个错误“任务在6.01秒后超时”,我已将超时更改为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
该文件定义了一个函数,用于调用my lambda函数来为页面数量刮取数据

"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
这是我的lambda函数,它登录到站点并从页面打印出一组数据

"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)}`))
);
};

您的Lambda可能正在等待与Internet的连接,该连接通常设置为在约30秒内过期。由于这小于5秒的函数超时,您将看到关于任务超时的错误。您可以通过增加Lambda运行的时间来确认这一点,并查看它是否最终返回网络错误

如果尚未为Lambda启用Internet访问,则需要通过网关为VPC启用Internet访问


您是否为lambda vpc启用了internet访问?对此一无所知!我会试一试,然后再报告,谢谢:)我按照教程进行了学习,现在有了一个VPC,它有多个子网、正确的权限和一个NAT网关,但我仍然得到了相同的设置error@imlearningcode您是否增加了函数超时以查看是否可以找到潜在错误?我的函数超时为2分钟,但我收到了此错误“任务在6.01秒后超时”@imlearningcode,这意味着在部署的版本中它实际上没有设置为2分钟-当您看到它在约6秒后超时时,通常意味着它被设置为5秒超时。