如何将cloudwatch警报连接到lambda函数

你如何将aws云监视警报连接到lambda函数调用?

我正在以编程方式将云观察警报添加到我们通过AWS CloudFormation模板作为云形成堆栈的一部分创建的ELB。 我希望将这些警报发送给一个将消息发布到Slack的lambda函数。 尽管警报有效,并且SNS配置对我来说似乎是正确的,但lambda函数从不会被调用。

lambda函数遵循以下示例:

https://medium.com/cohealo-engineering/how-set-up-a-slack-channel-to-be-an-aws-sns-subscriber-63b4d57ad3ea#.x2j9apedu

http://inopinatus.org/2015/07/13/hook-aws-notifications-into-slack-with-a-lambda-function/

lambda函数可以工作,并且我可以通过aws控制台发送测试数据,从而生成一条消息发布到Slack。

负载平衡器是使用正确的云观察警报创建的:

在这里输入图像描述

该警报似乎被配置为将警报发送到正确的SNS主题:

在这里输入图像描述在这里输入图像描述

有一个针对该主题的SNS订阅,使用lambda函数作为其端点:

在这里输入图像描述

当警报触发时,触发警报并将消息发送到正确的主题:

在这里输入图像描述

但lambda函数从不被调用:

在这里输入图像描述

但是,如果手动将SNS主题添加为lambda函数的“事件源”,则会在警报触发并发布Slack消息时调用它。

在这里输入图像描述

我误解了如何将云计时警报连接到lambda函数? 还是有一个我想念的小细节?

如果这种方法无法正常工作,将lambda函数连接到云监视警报的唯一方法是将SNS主题添加为“事件源”,那么通过AWS CloudFormation模板执行此操作的适当方式是什么? 我没有看到修改现有资源(例如固定的lambda函数)的明显方法。

这是我的CloudFormation模板:

"GenericSlackAlertSNSTopic" : {
    "Type" : "AWS::SNS::Topic",
    "Properties" : {
        "Subscription" : [ {
            "Endpoint" : "arn:aws:lambda:us-east-1:[...]:function:snsToSlack",
            "Protocol" : "lambda"
        } ]
    }
},
"ELBNoTrafficAlarm": {
    "Type": "AWS::CloudWatch::Alarm",
    "Properties": {
        "Namespace" : "AWS/ELB",
        "AlarmDescription": "Alarm for no apparent traffic on an ELB.",
        "AlarmActions": [{
            "Ref": "GenericSlackAlertSNSTopic"
        }],
        "InsufficientDataActions": [{
            "Ref": "GenericSlackAlertSNSTopic"
        }],
        "MetricName": "RequestCount",
        "Statistic": "Sum",
        "Dimensions" : [ {
            "Name" : "LoadBalancerName",
            "Value" : { "Ref" : "ElasticLoadBalancer" }
        } ],
        "Period": "60",
        "EvaluationPeriods": "3",
        "Threshold" : "10",
        "ComparisonOperator": "LessThanOrEqualToThreshold"
    }
}

谢谢!

-neil


AWS(〜3天前)发布了一个在Python和nodejs中使用lambda与AWS Cloudwatch进行冗余集成的蓝图:https://aws.amazon.com/blogs/aws/new-slack-integration-blueprints-for-aws -Lambda /

话虽如此,我也遇到了同样的问题,按照蓝图中提到的步骤,直到我手动将SNS主题添加为lambda函数中的“事件源”之后,我才得到警报。 进一步的调查让我想到这个问题:无法使用CloudFormation在Lambda函数上创建SNS事件源

最后阅读AWS文档:1)http://docs.aws.amazon.com/lambda/latest/dg/intro-core-components.html

Amazon SNS通过主题订阅配置维护事件源映射(没有用于配置此映射的AWS Lambda API)。

2)http://docs.aws.amazon.com/sns/latest/dg/sns-lambda.html

使用AWS管理控制台配置带有Lambda端点的Amazon SNS

得出结论,目前的订购应该通过AWS管理控制台完成

总结:目前,使用Lambda端点配置Amazon SNS的唯一方法是通过AWS管理控制台

奖励:具有相同回答的类似问题:AWS Lambda通过云端安排事件源


CloudWatch计划事件现在将Lambda作为本机目标。 在这里输入图像描述

您也可以将预定事件添加到lambda的cloudformation中

EventListFunction:
  Type: 'AWS::Serverless::Function'
  Properties:
    ...
    Events:
      Schedule1:
        Type: Schedule
        Properties:
          Schedule: rate(1 day)

确保您授予SNS主题调用您的Lambda函数的权限。 CloudFormation的权限将如下所示:

"LambdaInvokePermission": {
    "Type": "AWS::Lambda::Permission",
    "Properties": {
        "FunctionName" : "arn:aws:lambda:us-east-1:[...]:function:snsToSlack",
        "Action": "lambda:InvokeFunction",
        "Principal": "sns.amazonaws.com",
        "SourceArn": { "Ref": "GenericSlackAlertSNSTopic" }
    }
}
链接地址: http://www.djcxy.com/p/32247.html

上一篇: how to connect a cloudwatch alarm to a lambda function

下一篇: Enable an SNS Event Source on lambda with javascript SDK