【发布时间】:2019-03-06 09:59:04
【问题描述】:
我有这个由 SQS 调用的 Lambda 函数代码。 SQS 触发我的 Lambda 函数(在 nodeJS 中)。
Lambda 还将发送一封 SES 电子邮件。有没有办法可以在我的本地 Ubuntu 上进行测试,而不是总是使用 AWS Web 控制台? 任何帮助表示赞赏。
这是我的 Lambda NodeJS 代码:此代码仅适用于 AWS Lambda。当我跑 $node index.js ,不发送SES邮件。
var aws = require("aws-sdk");
var nodemailer = require("nodemailer");
aws.config.loadFromPath('aws_config.json');
var ses = new aws.SES();
var s3 = new aws.S3();
// Set the region
aws.config.update({region: 'us-west-2'});
exports.handler = function (event, context, callback) {
const response = {
statusCode: 200,
body: JSON.stringify({
message: 'SQS event processed.',
input: event,
}),
};
console.log('event: ', JSON.stringify(event.Records));
result = JSON.stringify(event.Records)
result = result.replace(/(^\[)/, '');
result = result.replace(/(\]$)/, '');
var resultObj = JSON.parse(result);
var idCustomer = resultObj.body;
console.log('===SENDING EMAIL====');
// Create sendEmail paramssd
var params = {
Destination: {
/* required */
CcAddresses: [
'XXXXX@gmail.com',
/* more items */
]
},
Message: {
/* required s*/
Body: {
/* required */
Html: {
Charset: "UTF-8",
Data: "BODY:"
},
Text: {
Charset: "UTF-8",
Data: "TEXT_FORMAT_BODY"
}
},
Subject: {
Charset: 'UTF-8',
Data: idCustomer
}
},
Source: 'xxxx@eeeee.com', /* required */
ReplyToAddresses: [
'wwwwww@wwwwwwwww.com',
/* more items */
],
};
// Create the promise and SES service object
var sendPromise = new aws.SES({apiVersion: '2010-12-01'}).sendEmail(params).promise();
// Handle promise's fulfilled/rejected states s
sendPromise.then(
function (data) {
console.log("Successfully sent using SES");
console.log(data.MessageId);
}).catch(
function (err) {
console.log("An Error occured while senting using using SES");
console.error(err, err.stack);
});
};
【问题讨论】:
-
您可以使用 serverless 和 serverless-offline 在本地测试 lambda 函数,但看起来它们没有 SES 的本地版本。
-
您需要在本地机器上配置 AWS 凭证。创建一个对 SES 具有完全访问权限的用户并使用他的凭据。您可以使用此参考:docs.aws.amazon.com/cli/latest/userguide/…
标签: node.js amazon-web-services aws-lambda amazon-ses