Invocazione di una funzione Lambda da un allarme
Gli allarmi CloudWatch garantiscono un'invocazione asincrona della funzione Lambda per un determinato cambio di stato, tranne nei seguenti casi:
-
Quando la funzione non esiste.
-
Quando CloudWatch non è autorizzato a invocare la funzione Lambda.
Se CloudWatch non riesce a raggiungere il servizio Lambda o il messaggio viene rifiutato per un altro motivo, CloudWatch riprova finché l'invocazione non ha esito positivo. Lambda mette in coda il messaggio e gestisce i nuovi tentativi di esecuzione. Per ulteriori informazioni su questo modello di esecuzione, incluse informazioni su come Lambda gestisce gli errori, consulta Asynchronous invocation nella Guida per gli sviluppatori di AWS Lambda.
Puoi invocare una funzione Lambda nello stesso account o in altri account AWS.
Quando specifichi un allarme per richiamare una funzione Lambda come operazione di allarme, puoi scegliere di specificare il nome della funzione, l'alias della funzione o una versione specifica di una funzione.
Quando specifichi un allarme per richiamare una funzione Lambda come operazione di allarme, puoi scegliere di specificare il nome della funzione, l'alias della funzione o una versione specifica di una funzione.
Un modo per farlo è utilizzare la AWS CLI, come nell'esempio riportato di seguito.
aws lambda add-permission \ --function-namemy-function-name\ --statement-id AlarmAction \ --action 'lambda:InvokeFunction' \ --principal lambda.alarms.cloudwatch.amazonaws.com \ --source-account111122223333\ --source-arn arn:aws:cloudwatch:us-east-1:111122223333:alarm:alarm-name
In alternativa, puoi creare una policy simile a uno degli esempi riportati di seguito e assegnarla alla funzione.
L'esempio seguente specifica l'account in cui si trova l'allarme, in modo che solo gli allarmi in quell'account (111122223333) possano richiamare la funzione.
L'esempio seguente ha un ambito più limitato e consente solo all'allarme specificato nell'account specificato di richiamare la funzione.
Non è consigliabile creare una policy che non specifichi un account di origine, poiché tali policy sono vulnerabili a problemi di "confused deputy".
Aggiunta di metriche Lambda alle indagini CloudWatch
È possibile aggiungere metriche Lambda alle indagini CloudWatch attive. Quando si analizza un problema, le metriche Lambda possono fornire informazioni preziose sulle prestazioni e sul comportamento delle funzioni. Ad esempio, se stai esaminando un problema di prestazioni delle applicazioni, le metriche Lambda come la durata, i tassi di errore o le limitazioni potrebbero aiutarti a identificare la causa principale.
Per aggiungere metriche Lambda alle indagini CloudWatch:
Apri la console AWS Lambda all'indirizzo https://console.aws.amazon.com/lambda/
. -
Nella sezione Monitoraggio, individua la metrica.
-
Apri il menu contestuale della metrica, scegli Indagine, Aggiungi all'indagine. Quindi, nel pannello Indaga, seleziona il nome dell'indagine.
Oggetto evento inviato da CloudWatch a Lambda
Quando configuri una funzione Lambda come operazione di allarme, CloudWatch fornisce un payload JSON alla funzione Lambda quando la richiama. Questo payload JSON funge da oggetto evento per la funzione. Puoi estrarre dati da questo oggetto JSON e utilizzarli nella tua funzione. Di seguito è riportato un esempio di oggetto evento da un allarme del parametro.
{ 'source': 'aws.cloudwatch', 'alarmArn': 'arn:aws:cloudwatch:us-east-1:444455556666:alarm:lambda-demo-metric-alarm', 'accountId': '444455556666', 'time': '2023-08-04T12:36:15.490+0000', 'region': 'us-east-1', 'alarmData': { 'alarmName': 'lambda-demo-metric-alarm', 'state': { 'value': 'ALARM', 'reason': 'test', 'timestamp': '2023-08-04T12:36:15.490+0000' }, 'previousState': { 'value': 'INSUFFICIENT_DATA', 'reason': 'Insufficient Data: 5 datapoints were unknown.', 'reasonData': '{"version":"1.0","queryDate":"2023-08-04T12:31:29.591+0000","statistic":"Average","period":60,"recentDatapoints":[],"threshold":5.0,"evaluatedDatapoints":[{"timestamp":"2023-08-04T12:30:00.000+0000"},{"timestamp":"2023-08-04T12:29:00.000+0000"},{"timestamp":"2023-08-04T12:28:00.000+0000"},{"timestamp":"2023-08-04T12:27:00.000+0000"},{"timestamp":"2023-08-04T12:26:00.000+0000"}]}', 'timestamp': '2023-08-04T12:31:29.595+0000' }, 'configuration': { 'description': 'Metric Alarm to test Lambda actions', 'metrics': [ { 'id': '1234e046-06f0-a3da-9534-EXAMPLEe4c', 'metricStat': { 'metric': { 'namespace': 'AWS/Logs', 'name': 'CallCount', 'dimensions': { 'InstanceId': 'i-12345678' } }, 'period': 60, 'stat': 'Average', 'unit': 'Percent' }, 'returnData': True } ] } } }
Di seguito è riportato un esempio di oggetto evento da un allarme composito.
{ 'source': 'aws.cloudwatch', 'alarmArn': 'arn:aws:cloudwatch:us-east-1:111122223333:alarm:SuppressionDemo.Main', 'accountId': '111122223333', 'time': '2023-08-04T12:56:46.138+0000', 'region': 'us-east-1', 'alarmData': { 'alarmName': 'CompositeDemo.Main', 'state': { 'value': 'ALARM', 'reason': 'arn:aws:cloudwatch:us-east-1:111122223333:alarm:CompositeDemo.FirstChild transitioned to ALARM at Friday 04 August, 2023 12:54:46 UTC', 'reasonData': '{"triggeringAlarms":[{"arn":"arn:aws:cloudwatch:us-east-1:111122223333:alarm:CompositeDemo.FirstChild","state":{"value":"ALARM","timestamp":"2023-08-04T12:54:46.138+0000"}}]}', 'timestamp': '2023-08-04T12:56:46.138+0000' }, 'previousState': { 'value': 'ALARM', 'reason': 'arn:aws:cloudwatch:us-east-1:111122223333:alarm:CompositeDemo.FirstChild transitioned to ALARM at Friday 04 August, 2023 12:54:46 UTC', 'reasonData': '{"triggeringAlarms":[{"arn":"arn:aws:cloudwatch:us-east-1:111122223333:alarm:CompositeDemo.FirstChild","state":{"value":"ALARM","timestamp":"2023-08-04T12:54:46.138+0000"}}]}', 'timestamp': '2023-08-04T12:54:46.138+0000', 'actionsSuppressedBy': 'WaitPeriod', 'actionsSuppressedReason': 'Actions suppressed by WaitPeriod' }, 'configuration': { 'alarmRule': 'ALARM(CompositeDemo.FirstChild) OR ALARM(CompositeDemo.SecondChild)', 'actionsSuppressor': 'CompositeDemo.ActionsSuppressor', 'actionsSuppressorWaitPeriod': 120, 'actionsSuppressorExtensionPeriod': 180 } } }