我编写了一个 AWS lambda,它向触发重设密码电子邮件的端点发出 https 请求。当我在本地运行我的 lambda 时,一切都按预期运行并且我在收件箱中收到了电子邮件,但是,当我上传我的 Node 代码并在 AWS 控制台中运行 lambda 时,我在发出发布请求时收到以下错误:
Error: getaddrinfo ENOTFOUND myfakedomain.com myfakedomain.com:443
我的 lambda 中发出 https 请求(使用 superagent Node 模块)的函数如下所示:
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://,但没有成功。我想这也无济于事,错误记录也很少!
任何帮助都会很棒,谢谢。
最佳答案
默认情况下,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/
关于javascript - 发出 Node https 请求的 AWS lambda 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47927213/