节点能够使http请求节点js aws lambda

问题描述 投票:0回答:1

我正在尝试编写一个lambda函数,它将对我的服务的端点进行3次http调用,在我的pod的ec2实例中运行,aws lambda将由我配置的cron触发,我还添加了VPC配置aws lambda时的网络设置。

我使用node.js 8.10编写我的lambda处理函数,这是我的lambda处理函数的代码

'use strict';

var http = require('http');

exports.handler = async (event) => {
  http.get('url1', function(res) {
    console.log("Got response: " + res.statusCode);

  }).on('error', function(e) {
    console.log("Got error: " + e.message);

  });
  http.get('url2', function(res) {
    console.log("Got response: " + res.statusCode);

  }).on('error', function(e) {
    console.log("Got error: " + e.message);

  });
  http.get('url3', function(res) {
    console.log("Got response: " + res.statusCode);

  }).on('error', function(e) {
    console.log("Got error: " + e.message);

  });

  console.log('end request to');
}

我也尝试过这个

'use strict';

var http = require('http');

exports.handler = async (event,context) => {
  http.get('url1', function(res) {
    console.log("Got response: " + res.statusCode);
    context.succeed();
  }).on('error', function(e) {
    console.log("Got error: " + e.message);
   context.done(null, 'FAILURE');
  });
  http.get('url2', function(res) {
    console.log("Got response: " + res.statusCode);
    context.succeed();
  }).on('error', function(e) {
    console.log("Got error: " + e.message);
   context.done(null, 'FAILURE');
  });
  http.get('url3', function(res) {
    console.log("Got response: " + res.statusCode);
    context.succeed();
  }).on('error', function(e) {
    console.log("Got error: " + e.message);
   context.done(null, 'FAILURE');
  });

  console.log('end request to');
}

但在这两种情况下我得到了这个:

START RequestId: 0fa5225f-a54f-11e8-85a9-83174efb4714 Version: $LATEST
2018-08-21T14:32:41.855Z    0fa5225f-a54f-11e8-85a9-83174efb4714    end request to
END RequestId: 0fa5225f-a54f-11e8-85a9-83174efb4714
REPORT RequestId: 0fa5225f-a54f-11e8-85a9-83174efb4714

我提到了this的答案

它有什么理由不起作用吗?

node.js amazon-web-services aws-lambda
1个回答
3
投票

利用(更新的)async/await功能,并减少样板,您可以提出如下要求:

const get = async (requestUrl) => {
    return new Promise((resolve, reject) => {
        http.get(requestUrl, function(res) {
            console.log("Got response: " + res.statusCode);
            resolve(res);
        }).on('error', function(e) {
            console.log("Got error: " + e.message);
            reject(e);
        });
    });
}

在lambda文件中定义该函数,然后可以在处理函数中调用它,如下所示:

const response1 = await get('url1');

然后你的lambda应该正常运行。

有关在AWS Lambda中使用async函数的更多信息,请参阅this blog post,从他们将Node.js 8.10运行时引入AWS Lambda时(从而允许使用async/await功能)。

© www.soinside.com 2019 - 2024. All rights reserved.