从VPC Lambda函数调用No VPC Lambda函数-Node.js

时间:2019-11-04 10:54:10

标签: node.js aws-lambda

我正在尝试调用从VPC Lambda函数发送SES邮件的No VPC Lambda函数。但是,SES仍然无法与Internet连接。

在这里,我不想附加NAT。因此,我尝试调用NO VPC Lambda函数。

fruitsData(在VPC内)

exports.handler = (event, context, callback) => {
    const fruits = ["Banana", "Orange", "Apple", "Mango"];

    var params = {
        FunctionName: 'sendMail',
        InvocationType: 'RequestResponse',
        LogType: 'Tail',
        Payload: JSON.stringify({ "fruits" : fruits })
    };

    lambda.invoke(params, function(err, data) {
        if (err) {
            context.fail(err);
        } else {
            context.succeed(data.Payload);
        }
    })
}

sendMail(无VPC)

const charset = 'UTF-8';
 exports.handler = async (event, context, callback) => {
    const message = JSON.stringify(event, null, 2);
    const params = {
       Source: source,
       Destination: {
           ToAddresses: [recipient.email]
       },
       Message: {
           Subject: {
               Data: "Example",
               Charset: charset
           },
           Body: {
               Text: {
                   Data: message,
                   Charset: charset
               },
               Html: {
                   Data: message,
                   Charset: charset
               }
           }
       }
   };
   try {
       await ses.sendEmail(params).promise();
       callback(null, "Email sent successfully");
   }
   catch (ex) {
       console.log('Unhandled Exception', ex);
   }
};

错误

  

任务在20.02秒后超时

2 个答案:

答案 0 :(得分:0)

  

在这里,我不想附加NAT。所以我尝试不调用VPC Lambda   功能。

那是不可能的。当前,VPC内部的Lambda函数可以访问VPC外部的任何内容的唯一方法是通过NAT。

还请注意,您关于第一个功能“需要能够访问第二个功能”的说法是错误的。 Lambda函数从不直接相互访问。第一个功能需要访问AWS Lambda API,它将用于触发第二个功能的调用。

答案 1 :(得分:-1)

您可以使用

检查发生了什么
const sendEmail = ses.sendEmail(params).promise();

sendEmail
  .then(data => {
    console.log("email submitted to SES", data);
  })
  .catch(error => {
    console.log(error);
});

如果仍然遇到问题,可以检查以下内容:-

  1. 尝试增加lambda的超时时间。

  2. 您是否提出了禁用SES沙箱的请求。

  3. 如果未禁用,请尝试使用经过验证的电子邮件ID。