Awsクラウドウォッチアラームをラムダ関数呼び出しにどのように接続しますか?
AWS CloudFormationテンプレートを使用してクラウド形成スタックの一部として作成したELBにプログラムでクラウド監視アラームを追加しています。 Slackにメッセージを送信するラムダ関数にアラートを送信したいのですが。アラートは機能し、SNS構成は私には正しいようですが、ラムダ関数が呼び出されることはありません。
ラムダ関数は次の例に従います。
http://inopinatus.org/2015/07/13/hook-aws-notifications-into-slack-with-a-lambda-function/
ラムダ関数が機能し、awsコンソールを介してテストデータを送信できるため、Slackにメッセージが投稿されます。
ロードバランサーは、正しく見えるクラウドウォッチアラームで作成されます。
アラームは、正しいSNSトピックにアラートを送信するように設定されているようです:
そのトピックへのSNSサブスクリプションがあり、ラムダ関数がエンドポイントになっています。
アラームがトリガーされると、アラームがトリガーされ、メッセージが正しいトピックに送信されます。
しかし、ラムダ関数は決して呼び出されません:
ただし、ラムダ関数の「イベントソース」としてSNSトピックを手動で追加すると、アラームが発生し、Slackメッセージが投稿されたときに呼び出されます。
クラウドウォッチアラームをラムダ関数に接続する方法を誤解していますか?または、私が見逃している小さな詳細はありますか?
このアプローチが機能せず、ラムダ関数をクラウドウォッチアラームに接続する唯一の方法がSNSトピックを「イベントソース」として追加することである場合、AWS CloudFormationテンプレートを介してそれを行う適切な方法は何ですか?固定ラムダ関数などの既存のリソースを変更する明白な方法がわかりません。
これが私の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: https://aws.Amazon.com/blogs/ aws/new-slack-integration-blueprints-for-aws-lambda /
とはいえ、私もあなたと同じ問題を抱えていたので、青写真に記載されている手順に従って、ラムダ関数の「イベントソース」としてSNSトピックを手動で追加するまで、アラームは表示されません。詳細な調査により、次の質問につながりました: 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マネジメントコンソールを使用することです
ボーナス:同じ答えのある同様の質問: cloudformationを介したAWS Lambdaスケジュールされたイベントソース
Lambda関数を呼び出すためのアクセス許可をSNSトピックに必ず付与してください。権限の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" }
}
}