node.js - 从 Lambda 调用外部 api 端点时出现 ENOTFOUND 错误
问题描述
请提供有关需要更改以下代码以从 Lambda 函数执行它的任何建议。它在本地工作得很好,但是在 Lambda 中执行时会出现以下错误 - {"errno":"ENOTFOUND","code":"ENOTFOUND","syscall":"getaddrinfo","hostname":"https://api .taggun.io"}",
const API_KEY = 'XXxxxxxxxxxxxxxXXX';
/*const fs = require("fs");
const rp = require("request");*/
const https= require('https');
var AWS = require('aws-sdk');
var s3 = new AWS.S3();
exports.handler = function(event,context,callback){
var srcBucket = event.Records[0].s3.bucket.name;
var srcKey = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, " "));
var params = {Bucket: srcBucket, Key: srcKey};
var origimage = s3.getObject(params).createReadStream();
const formData = JSON.stringify({
file: {
value: origimage,
}
});
const options = {
hostname: "https://api.taggun.io",
path: "/api/receipt/v1/simple/file",
method: "POST",
headers: {apikey:API_KEY}
};
const req = https.request(options,
(res) => res.on("data", () => callback(null, "OK")));
req.on("error", (error) => callback(JSON.stringify(error)));
req.write(formData);
req.end();
};
解决方案
它可能在本地工作而不是在部署时工作的一个原因可能是网络连接问题。如果您尝试访问的端点位于专用网络上,您可能需要确保将您的 lambda 部署到与该专用网络具有网络连接的 vpc 子网中。如果是这种情况,这些文档显示了将 lambda 部署到子网的权限和过程。
推荐阅读
- javascript - 在特定时间后运行 ajax 请求
- c++ - 对于类模板,std::enable_if 比 static_assert 有什么优势?
- c# - 如何从复制还原或安装 Nuget 包然后粘贴到 *.csproj 文件?
- c# - 应用程序运行时 C# Main Form 对象为空
- tensorflow - GPU 错误:使用 tensorflow==2.3.0 的 Sagemaker mp.p2.xlarge 实例
- azure-devops - lower() 函数似乎在 Azure DevOps YAML 管道中不起作用
- antd - Ant Design,只有页面时隐藏分页
- node.js - 在运行 ubuntu 的 nginx VPS 服务器上部署 nuxt 应用程序
- python - 无法使用 kubernetes python 客户端创建 CRD
- pandas - 如何在熊猫数据框中用零完全删除所有行和列