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;
};