我有此Lambda函数代码,由SQS调用。 SQS触发我的Lambda函数(在nodeJS中)。
Lambda还将发送SES电子邮件。有没有一种方法可以在本地Ubuntu上进行测试,而不是始终使用AWS Web Console? 任何帮助表示赞赏。
这是我的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);
});
};
答案 0 :(得分:1)
您应该彻底了解SAM LOCAL。它是由AWS团队开发的专门用于测试lambda的工具。
https://github.com/awslabs/aws-sam-cli
从以下版本的当前快照发布函数的版本 $最新。也就是说,AWS Lambda拍摄功能代码的快照,然后 $ LATEST中的配置信息并发布新版本。 发布后无法修改代码和配置。对于 有关版本控制功能的信息,请参见
易于使用,只需键入
sam local invoke --event event.json
在后台,它将为您的lambda运行一个docker cotnainer并将其命名。
关于您的SES,您应该在代码中放置一个小的if(SAM_LOCAL)条件,并且仅当不在本地模式下时才调用实数。请注意,在本地运行函数时,SAM_LOCAL是SAM LOCAL工具设置的环境变量。
祝你好运!
答案 1 :(得分:0)
如果您想使用aws作为后端-无服务器框架可能就是您想要的https://serverless.com/如果要测试代码而不在aws后端上执行lambda,请查看localastack框架https://github.com/localstack/localstack