在AWS Lambda函数

时间:2015-09-16 12:23:00

标签: node.js amazon-web-services aws-sdk aws-lambda

我在AWS Lambda上创建了一个非常基本的简单函数,用于接受表单提交。

部分功能是向特定的人发送电子邮件,非常简单。我正在尝试使用AWS SES来执行此操作。我已经设置了SES服务等,并验证了我希望发送到的帐户,并且能够发送测试电子邮件。一切都有效!!

现在,当我尝试在AWS Lambda中执行相同操作并使用aws sdk时,它不会发送电子邮件。我没有收到任何错误或错误。

以下是我用于AWS Lambda函数的代码。

有没有人有过使用lambda和通过ses发送电子邮件的经验,通过lambda函数?或者甚至只使用node.js aws sdk很可能会有所帮助。

var aws = require('aws-sdk');
var ses = new aws.SES({
   accessKeyId: 'myAccessKey',
   secretAccesskey: 'mySecretKey',
   region: 'eu-west-1' 
});

exports.handler = function(event, context) {
    console.log("Incoming: ", event);
    var output = querystring.parse(event);

    var eParams = {
        Destination: {
            ToAddresses: ["toAddress@email.com"]
        },
        Message: {
            Body: {
                Text: {
                    Data: output.Key1
                }
            },
            Subject: {
                Data: "Ses Test Email"
            }
        },
        Source: "mysource@source.com"
    };

    console.log('===SENDING EMAIL===');
    var email = ses.sendEmail(eParams, function(err, data){
        if(err) console.log(err);
        else {
            console.log("===EMAIL SENT===");
            console.log(data);
        }
    });
    console.log("EMAIL CODE END");
    console.log('EMAIL: ', email);
    context.succeed(event);
};

3 个答案:

答案 0 :(得分:23)

看起来我将context.succeed(事件)放在了错误的代码区域。

将其移入sendEmail回调后,一切正常。

var aws = require('aws-sdk');
var ses = new aws.SES({
  accessKeyId: 'myAccessKey',
  secretAccesskey: 'mySecretKey',
  region: 'eu-west-1' 
});

exports.handler = function(event, context) {
  console.log("Incoming: ", event);
  var output = querystring.parse(event);

  var eParams = {
    Destination: {
        ToAddresses: ["toAddress@email.com"]
    },
    Message: {
        Body: {
            Text: {
                Data: output.Key1
            }
        },
        Subject: {
            Data: "Ses Test Email"
        }
    },
    Source: "mysource@source.com"
};

console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data){
    if(err) {
       console.log(err);
       context.fail(err);
    };
    else {
        console.log("===EMAIL SENT===");
        console.log("EMAIL CODE END");
        console.log('EMAIL: ', email);
        console.log(data);
        context.succeed(event);
    }
});};

答案 1 :(得分:0)

这是因为当函数退出并冻结任何异步进程(例如您的电子邮件)时,Lambda会冻结容器。 Node尤其如此。请参阅Lambda编程模型。 http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html

答案 2 :(得分:0)

我的情况是:当您设置 VPC 时,问题发生的原因是互联网限制访问。

如果您移除 VPC,则一切正常。

对我来说这似乎是一个 AWS 错误。

我今天为它开通了 AWS Support。

还没有答案。