在电子邮件中查看来自 AWS Lambda 的错误

See Errors from AWS Lamba in Email

我的 AWS Lambda 代码中有错误,如我的 Lambda 配置上的监控选项卡所示,但我在 CloudWatch 日志中看不到错误。

我如何配置 AWS,以便当我的 lambda 函数失败时,我收到一封电子邮件,说明哪个 lambda 失败,原因(超时或应用程序错误)。

我设置了 CloudWatch 警报,但我只是收到警报通知,但没有告诉我它失败的原因(或者我不知道去哪里查看)

我想到的第一种方法是更好地捕获异常的 Lambda 函数,这样您就可以接受该异常并将通知发送到您的电子邮件地址订阅的 SNS 队列。

或者,您可以编写一个由云监视警报激活的 Lambda 函数,并将您的 CloudWatch 日志的最后 'N' 行(或者您可以编写更智能的内容)发送到 SNS再次排队,您是订阅者。

第二种方法可能更好,因为您可以使它可重复用于许多 Lambda 查询,但我认为第一种方法是最简单和最容易的方法,可以让您到达想要的位置。

对于以上两种情况,您也可以使用 SES,但我认为这有点矫枉过正,SNS 更适合该用例。

最后检查用于发布到 SNS 的 "MessageStructure" 参数。如果您想在收件人端启动某种形式的自动化,您可以发送一些非常惊人的 JSON 来完成此操作。

从 Lambda 发布到 SNS 队列非常简单,我将 link 您转到下面的 JavaScript SDK 参考:

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SNS.html#publish-property

示例代码:

var AWS = require('aws-sdk');
var sns = new AWS.SNS();

var exceptionMessage = "This is exception data / information";
var topicArn = "arn:aws:sns:ap-southeast-2:012345678912:My-SNS-Topic";
var subject = "Lambda exception alert";

var params = {
  Message: exceptionMessage,
  MessageAttributes: {
    someKey: {
      DataType: 'String',
      StringValue: exceptionMessage
    }
  },
  Subject: subject,
  TopicArn: topicArn
};
sns.publish(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

您的 Lambda 函数的 IAM 策略文档:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1477112217000",
            "Effect": "Allow",
            "Action": [
                "sns:Publish"
            ],
            "Resource": [
                "arn:aws:sns:ap-southeast-2:012345678912:My-SNS-Topic"
            ]
        }
    ]
}