【问题标题】:ses.sendMail() inside a aws lambda function not returning callbackaws lambda函数中的ses.sendMail()不返回回调
【发布时间】:2017-10-14 20:59:14
【问题描述】:

亚马逊简单电子邮件服务 (Amazon SES)

我有以下代码。如果我从 aws ec2 实例或我的工作站使用它,它会完美运行。但是,一旦我将它添加到我正在 AWS VPC 内部处理的 lambda 函数中,我的 ses.sendEmail() 的回调就永远不会被调用。我从未在 CloudWatch Logs 中看到函数的“sendEmail 函数错误”或“sendEmail 函数成功”console.log(),并且我的 lambda 函数在超时期限结束时超时。我不知道我还能做什么。

我已经查找了我可能需要添加的任何 IAM 角色或策略,但找不到任何需要的提及或要添加的内容。

尝试将“AmazonSESFullAccess”策略添加到我的 IAM 角色以执行该功能。仍然超时。

let aws = require('aws-sdk')
    , ses = new aws.SES({ apiVersion: '2010-12-01', region: 'us-west-2' })
    ;

sendEmail({
    To : [ 'anEmail@someone.com' , 'anotherEmail@somewhereElse.com'],
    From: 'ourSupportEmail@whereIWork.com',
    Subject: 'Sending An Email Out',
    Body: `<html> A Buch of HTML Here</html>`
}, function(err, result){
    if(err){
        console.error('SendEmail Error', err);
    } else {
        console.log('SendEmail Result', result);
    }
});


function sendEmail(emailObj, cb){
    emailObj.To.push('myEmail@whereIWork.com');

    let mailData = {
        Source: emailObj.From,
        Destination: { ToAddresses: emailObj.To },
        Message: {
            Subject: {
                Data: emailObj.Subject
            },
            Body: {
                Html: {
                    Data: emailObj.Body
                }
            }
        }
    }

    console.log('sending Email', JSON.stringify(mailData)); //see in Cloudwatch Logs! YEAH!!!
    ses.sendEmail(mailData, function(err, data){
        if(err){
            console.log('sendEmail Function Error', JSON.stringify(err)); // never see in cloudwatch logs, WHAT??
            cb(err);
        } else {
            console.log('sendEmail Function Success', JSON.stringify(data)); // never see in cloudwatch logs, WHAT??
            cb(null, data);
        }
    });
}

【问题讨论】:

    标签: node.js aws-lambda amazon-iam


    【解决方案1】:

    您的 lambda 设置在 VPC 内,在这种情况下 - 无法访问互联网,因此也无法访问 AWS API。

    如果您让您的 lambda 运行足够长的时间 - 回调将被调用并带有 connection timeout 错误。

    请关注我的详细回答here

    【讨论】:

    • VPC 有一个 Nat 网关和一个 Internet 网关都指向 0.0.0.0/0 仍然超时。但是,我发现我将 Nat 网关放在私有子网中。将此切换到公共子网,功能成功完成。
    猜你喜欢
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2022-10-14
    • 2020-09-03
    相关资源
    最近更新 更多