【问题标题】:nodejs Why am I getting an error "Task timed out after 6.01 seconds" when invoking my lambda function?nodejs 为什么在调用我的 lambda 函数时出现错误“任务在 6.01 秒后超时”?
【发布时间】:2019-10-03 20:43:26
【问题描述】:

我的代码在使用 serverless invoke local -f myFunction -d 3 进行本地测试时工作正常一旦我使用 node.js 8.10 运行时将其部署到 lambda 并尝试使用 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 这个文件定义了一个函数来调用我的 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 vpc 启用了互联网访问权限?

标签: javascript node.js amazon-web-services aws-lambda


【解决方案1】:

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

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

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

【讨论】:

  • 对此一无所知!我会试一试并报告,谢谢:)
  • 我按照教程进行操作,现在设置了具有多个子网、正确权限和 NAT 网关的 VPC,但我仍然遇到相同的错误
  • @imlearningcode 增加函数超时时间看看能不能找到底层错误?
  • 我的函数超时时间为 2 分钟,但我收到此错误“任务在 6.01 秒后超时”
  • @imlearningcode 这意味着在部署的版本中它并没有真正设置为 2 分钟 - 当您看到它在大约 6 秒后超时时,通常意味着它被设置为 5 秒超时。
猜你喜欢
  • 2019-01-28
  • 2017-12-09
  • 2021-11-26
  • 2018-05-15
  • 2018-08-08
  • 2022-07-20
  • 2020-11-06
  • 2020-11-18
  • 2018-02-15
相关资源
最近更新 更多