【问题标题】:AWS lambda error making node https requestAWS lambda 错误生成节点 https 请求
【发布时间】:2018-06-04 06:19:54
【问题描述】:

我编写了一个 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://,但没有运气。我想这无济于事,错误记录也非常少!

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

【问题讨论】:

  • 你有想过这个吗?我遇到了同样的错误,并且我的 lambda 没有在 VPC 中运行,所以它不应该是互联网访问问题。将 URL 更改为 http 时一切正常

标签: javascript node.js aws-lambda superagent


【解决方案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/

【讨论】:

  • 这是不正确的。默认情况下,Lambda 函数可以访问互联网。除非使用 NAT 网关,否则 VPC 中的 Lambda 函数无法访问互联网。
猜你喜欢
  • 2021-08-10
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多