带有lambda函数的AWS SES创建模板始终返回null

时间:2018-08-13 18:30:37

标签: node.js amazon-web-services aws-lambda amazon-ses

因此,在我第一次学习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测试功能时,请求响应中始终为空

enter image description here 有谁知道我在这里做错了吗?

编辑:并且它没有创建电子邮件模板,我检查了SES Panel-电子邮件模板,并且它是空的

edit2:如果我尝试返回一个字符串,例如:callback(null, "some success message");确实返回了字符串,那么我的猜测是SES出了点问题,但是此功能正是我们在AWS文档中所拥有的,所以我假设它应该工作。.

1 个答案:

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