AWS lambda错误使节点https请求

时间:2017-12-21 14:38:48

标签: javascript node.js aws-lambda superagent

我已经编写了一个AWS lambda,它向触发重置密码电子邮件的端点发出https请求。当我在本地运行我的lambda时,所有运行都按预期运行,我在收件箱中收到电子邮件,但是,当我上传我的节点代码并在AWS控制台中运行lambda时,我在发布请求时收到以下错误:

Error: getaddrinfo ENOTFOUND myfakedomain.com myfakedomain.com:443

我的lambda中发出https请求的函数(使用superagent节点模块)如下所示:

function resetPassword(intentRequest, callback) {
    const emailAddress = intentRequest.currentIntent.slots.EmailAddress;
    console.log(`emailAddress is: ${emailAddress}`);
        request
        .post('https://myfakedomain.com:443/passwordreset', emailAddress)
        .set({ 'Content-Type': 'text/plain' })
        .end((resp) => {
          console.log('response was: ' + resp);
        });

    callback(close(intentRequest.sessionAttributes, 'Fulfilled',
    { contentType: 'PlainText', content: `Thanks, a reset password link has been sent to ${emailAddress}.` }));
}

通过AWS运行我的lambda时是否有任何特殊原因导致此错误?重置密码端点已打开,以便任何人都可以点击它。我也尝试从我的帖子请求开头删除https://,但没有运气。我想这并不能帮助错误记录非常小!

任何帮助都会很棒,谢谢。

1 个答案:

答案 0 :(得分:1)

默认情况下,AWS VPC资源(无论是EC2(服务器)实例还是Lambda函数)无法访问Internet。因此,如果您的Lambda函数是基于VPC的,则需要将其与配置了Internet访问的VPC相关联。

如果你还没有这样做,那几乎可以肯定你的问题。

以下是相关AWS文档的几个链接: http://docs.aws.amazon.com/lambda/latest/dg/vpc.html https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/