AWS SES 使用 lambda 函数创建模板总是 return null
AWS SES create template with lambda function always return null
所以在我第一次学习 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) );
});
据我了解,这个函数应该return给我一个模板吧?一个对象,任何东西?当我使用 lambda 测试功能时,我总是在请求响应中得到 null
有谁知道我在这里做错了什么?
编辑:它没有创建电子邮件模板,我检查了 SES 面板 - 电子邮件模板,它是空的
edit2:如果我尝试 return 一个字符串,例如:callback(null, "some success message");
它会 return 字符串,所以我的猜测是 SES 有问题,但这个函数正是我们在 AWS 文档中有什么,所以我认为它应该可以正常工作..
尽量不要解析 Promise 并将您的代码更改为 return按原样进行:
return await templatePromise;
这应该向您展示代码中真正出错的更多详细信息 - 它可能是一些隐藏的访问问题 - 因此您可能需要调整您的 lambda 函数正在使用的角色。 createTemplate
在另一边不应该 return 太多以防成功执行,而只是创建模板。
在使用 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;
};
所以在我第一次学习 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) );
});
据我了解,这个函数应该return给我一个模板吧?一个对象,任何东西?当我使用 lambda 测试功能时,我总是在请求响应中得到 null
编辑:它没有创建电子邮件模板,我检查了 SES 面板 - 电子邮件模板,它是空的
edit2:如果我尝试 return 一个字符串,例如:callback(null, "some success message");
它会 return 字符串,所以我的猜测是 SES 有问题,但这个函数正是我们在 AWS 文档中有什么,所以我认为它应该可以正常工作..
尽量不要解析 Promise 并将您的代码更改为 return按原样进行:
return await templatePromise;
这应该向您展示代码中真正出错的更多详细信息 - 它可能是一些隐藏的访问问题 - 因此您可能需要调整您的 lambda 函数正在使用的角色。 createTemplate
在另一边不应该 return 太多以防成功执行,而只是创建模板。
在使用 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;
};