请参阅电子邮件中的AWS Lamba错误

时间:2016-05-12 22:07:01

标签: amazon-web-services aws-lambda amazon-sns amazon-cloudwatch

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

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

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

1 个答案:

答案 0 :(得分:1)

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

或者,您可以编写一个由云监视警报激活的Lambda函数,并通过最后一个N' CloudWatch Logs的行数(或者您可以更智能地写一些内容)再次成为您订阅的SNS队列。

第二种方法可能更好,因为你可以让它重复使用许多Lambda查询,但我认为第一种选择是最简单,最简单的选项,可以让你到达你想要的地方。

对于上述两种情况,您也可以使用SES,但我认为这是过度杀伤,SNS更适合用例。

最后查看" MessageStructure"发布到SNS的参数。如果你想在收件人端启动某种形式的自动化,你可以发送一些非常棒的JSON来实现这一点。

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

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

示例代码:

using UnityEngine;
using System.Collections;

public class TileType {

    public string name;
    public GameObject tileVisualPrefab;
}

Lambda函数的IAM策略文档:

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