因此,在我第一次学习AWS东西(是野兽)时,我正在尝试创建电子邮件模板,我具有以下lambda函数:
// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region
AWS.config.update({ region: "us-east-1" });
exports.handler = async (event, context, callback) => {
// Create createTemplate params
var params = {
Template: {
TemplateName: "notification" /* required */,
HtmlPart: "HTML_CONTENT",
SubjectPart: "SUBJECT_LINE",
TextPart: "sending emails with aws lambda"
}
};
// Create the promise and SES service object
const templatePromise = new AWS.SES({ apiVersion: "2010-12-01" })
.createTemplate(params)
.promise();
// Handle promise's fulfilled/rejected states
templatePromise
.then((data) => {
console.log(data);
callback(null, JSON.stringify(data) );
// also tried callback(null, data);
}, (err) => {
console.error(err, err.stack);
callback(JSON.stringify(err) );
});
据我了解,此功能应返回模板吗?一个对象,什么?当我使用lambda测试功能时,请求响应中始终为空
编辑:并且它没有创建电子邮件模板,我检查了SES Panel-电子邮件模板,并且它是空的
edit2:如果我尝试返回一个字符串,例如:callback(null, "some success message");
确实返回了字符串,那么我的猜测是SES出了点问题,但是此功能正是我们在AWS文档中所拥有的,所以我假设它应该工作。.
答案 0 :(得分:1)
尽量不要解决Promise并将代码更改为仅按原样返回:
return await templatePromise;
应该为您提供代码中真正出了什么问题的更多详细信息-这可能是一些隐藏的访问问题-因此您可能需要调整lambda函数使用的角色。另一边的createTemplate
在成功执行的情况下不会返回太多,而只是创建模板。
在使用async
时,也请尝试遵循以下try / catch模式(如此处更详细地描述:https://aws.amazon.com/de/blogs/compute/node-js-8-10-runtime-now-available-in-aws-lambda/)
exports.handler = async (event) => {
try {
data = await lambda.getAccountSettings().promise();
}
catch (err) {
console.log(err);
return err;
}
return data;
};