Come si collega un allarme watch cloud aws a una chiamata di funzione lambda?come connettere un allarme cloudwatch a una funzione lambda
Aggiungo programmaticamente un allarme orologio cloud agli ELB che creiamo come parte di uno stack di formazione cloud tramite AWS CloudFormation Templates. Voglio che gli avvisi vengano inviati a una funzione lambda che pubblicherà il messaggio su Slack. Sebbene l'avviso funzioni e la configurazione SNS mi sembra corretta, la funzione lambda non viene mai richiamata.
La funzione lambda segue questi esempi:
http://inopinatus.org/2015/07/13/hook-aws-notifications-into-slack-with-a-lambda-function/
La funzione lambda funziona, e posso inviarlo testare i dati tramite la console AWS risultante in un messaggio postato a Slack.
Il bilanciamento del carico viene creato con una nuvola di allarme orologio corretta di aspetto:
sembra essere configurato l'allarme per inviare gli avvisi per il corretto tema SNS:
C'è un abbonamento SNS a quell'argomento, con la funzione lambda come endpoint:
allarmi vengono attivati ei messaggi inviati al tema corretto quando i fuochi d'allarme:
ma la funzione lambda non viene mai richiamato:
Tuttavia , se aggiungo manualmente l'argomento SNS come "origine evento" sulla funzione lambda, lo è invocato quando si attiva l'allarme e vengono inviati messaggi Slack.
Am I equivoco come collegare un allarme di orologio nuvola a una funzione lambda? O c'è un piccolo dettaglio che mi manca?
Se questo approccio non può funzionare e l'unico modo per collegare una funzione lambda a un allarme di sorveglianza cloud è aggiungere l'argomento SNS come "origine evento", qual è il modo appropriato per farlo tramite i modelli AWS CloudFormation? Non vedo un modo ovvio per modificare una risorsa esistente come una funzione lambda fissa.
Ecco il mio CloudFormation Template:
"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"
}
}
Grazie!
-Neil
Oggi stavo impostando questo da solo così posso confermare che funziona. Non vedo perché quello che hai fatto non lo sia. –
Grazie. Non è un processo di creazione di CloudFormation, ho accumulato uno stack circa 10 volte e il risultato è lo stesso (cioè nessuna chiamata di funzione lambda) –
Vai in CloudFormation nella console e verifica che l'argomento SNS sia impostato. Se si è verificato un errore, dovrebbe apparire lì. A parte questo, mi sembra corretto ... –