首页 > 解决方案 > 从 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();
};  

标签: node.jsamazon-web-servicesaws-lambda

解决方案


它可能在本地工作而不是在部署时工作的一个原因可能是网络连接问题。如果您尝试访问的端点位于专用网络上,您可能需要确保将您的 lambda 部署到与该专用网络具有网络连接的 vpc 子网中。如果是这种情况,这些文档显示了将 lambda 部署到子网的权限和过程。


推荐阅读