Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Invoquer une fonction Lambda à partir d'une alarme
CloudWatch alarm garantit un appel asynchrone de la fonction Lambda pour un changement d'état donné, sauf dans les cas suivants :
-
Lorsque la fonction n'existe pas.
-
When n' CloudWatch est pas autorisé à invoquer la fonction Lambda.
Si CloudWatch vous ne parvenez pas à joindre le service Lambda ou si le message est rejeté pour une autre raison, CloudWatch réessayez jusqu'à ce que l'appel aboutisse. Lambda met le message en file d'attente et gère les nouvelles tentatives d'exécution. Pour plus d'informations sur ce modèle d'exécution, notamment sur la manière dont Lambda gère les erreurs, consultez la section Invocation asynchrone dans le guide du développeur. AWS Lambda
Vous pouvez appeler une fonction Lambda dans le même compte ou dans d'autres AWS comptes.
Lorsque vous spécifiez une alarme pour invoquer une fonction Lambda en tant qu’action d’alarme, vous pouvez choisir de spécifier le nom de la fonction, son alias ou une version spécifique d’une fonction.
Lorsque vous spécifiez une fonction Lambda comme action d'alarme, vous devez créer une politique de ressources pour la fonction afin de permettre au principal du CloudWatch service d'invoquer la fonction.
Pour ce faire, vous pouvez utiliser le AWS CLI, comme dans l'exemple suivant :
aws lambda add-permission \ --function-name
my-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
Vous pouvez également créer une politique similaire à l’un des exemples suivants, puis l’attribuer à la fonction.
L’exemple suivant spécifie sur quel compte se trouve l’alarme, de sorte que seules les alarmes de ce compte (111122223333) peuvent invoquer la fonction.
L’exemple suivant a un champ d’application plus restreint, ne permettant qu’à l’alarme spécifiée dans le compte indiqué d’invoquer la fonction.
Nous ne recommandons pas la création d’une politique ne spécifiant aucun compte source, car ce type de politique est vulnérable aux problèmes d’adjoints confus.
Ajouter des métriques Lambda aux enquêtes CloudWatch
Vous pouvez ajouter des métriques Lambda à vos enquêtes actives CloudWatch . Lorsque vous étudiez un problème, les métriques Lambda peuvent fournir des informations précieuses sur les performances et le comportement des fonctions. Par exemple, si vous étudiez un problème de performance d'une application, les mesures Lambda telles que la durée, les taux d'erreur ou les limites peuvent aider à en identifier la cause première.
Pour ajouter des métriques Lambda aux enquêtes, procédez comme suit CloudWatch :
Ouvrez la AWS Lambda console à l'adresse https://console.aws.amazon.com/lambda/
. -
Dans la section Moniteur, recherchez la métrique.
-
Ouvrez le menu contextuel de la métrique, choisissez Enquêter, Ajouter à l'investigation. Ensuite, dans le volet Investiguer, sélectionnez le nom de l'enquête.
Objet d'événement envoyé depuis CloudWatch Lambda
Lorsque vous configurez une fonction Lambda en tant qu'action d'alarme, CloudWatch fournit une charge utile JSON à la fonction Lambda lorsqu'elle l'appelle. Cette charge utile JSON sert d’objet d’événement pour la fonction. Vous pouvez extraire des données de cet objet JSON et les utiliser dans votre fonction. Voici un exemple d’objet d’événement provenant d’une alarme de métrique.
{ '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 } ] } } }
Voici un exemple d’objet d’événement provenant d’une alarme composite.
{ '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 } } }