J'ai configuré quelques alarmes de surveillance de nuages, lorsque les alarmes se déplacent que cela déclenche un funciton Lambda. À Lambda, j'essaie de lire le Json et de l'informer à l'équipe de MS. Mais je n'ai pas pu obtenir le nom d'alarme de la JSON basé.
ci-dessous est le JSON P>
message = event['Records'][0]['Sns']['Message'] alarm =message['AlarmName']
3 Réponses :
Votre Event ['enregistrements'] [0] ['SNS'] ['Message'] ['Message'] CODE> est
import json # if not already present
message = json.loads(event['Records'][0]['Sns']['Message'])
alarm_name = message['AlarmName']
Il s'agit du résultat que la propriété "Alarname" est située dans une chaîne JSON. Vous devez d'abord analyser pour que la propriété soit accessible.
Utilisez la fonction json.parse code> pour récupérer le nom de l'alarme comme la fonction d'échantillonnage Lambda ci-dessous. P>
{
"Records": [
{
"EventSource": "aws:sns",
"EventVersion": "1.0",
"EventSubscriptionArn": "arn:aws:sns:ap-southeast-1:123:-teams-lambda-trigger:123-971d-4f70-927e-123",
"Sns": {
"Type": "Notification",
"MessageId": "12-d0b8-5a86-8b33-123",
"TopicArn": "arn:aws:sns:ap-southeast-1:123:vip-prestogo-teams-lambda-trigger",
"Subject": "ALARM: \"AuthenticationFailedException-was101\" in Asia Pacific (Singapore)",
"Message": "{\"AlarmName\":\"AuthenticationFailedException-was101\",\"AlarmDescription\":\"Found \\\"AuthenticationFailedException\\\" in 123\",\"AWSAccountId\":\"123\",\"NewStateValue\":\"ALARM\",\"NewStateReason\":\"Threshold Crossed: 1 out of the last 1 datapoints [1.0 (30/08/20 07:38:00)] was greater than or equal to the threshold (-1.0) (minimum 1 datapoint for OK -> ALARM transition).\",\"StateChangeTime\":\"2020-08-30T07:39:22.330+0000\",\"Region\":\"Asia Pacific (Singapore)\",\"AlarmArn\":\"arn:aws:cloudwatch:ap-southeast-1:123:alarm:AuthenticationFailedException-was101\",\"OldStateValue\":\"OK\",\"Trigger\":{\"MetricName\":\"AuthenticationFailedException-was101\",\"Namespace\":\"AuthenticationFailedException-was101\",\"StatisticType\":\"Statistic\",\"Statistic\":\"AVERAGE\",\"Unit\":null,\"Dimensions\":[],\"Period\":60,\"EvaluationPeriods\":1,\"ComparisonOperator\":\"GreaterThanOrEqualToThreshold\",\"Threshold\":-1.0,\"TreatMissingData\":\"- TreatMissingData: notBreaching\",\"EvaluateLowSampleCountPercentile\":\"\"}}",
"Timestamp": "2020-08-30T07:39:22.372Z",
"SignatureVersion": "1",
"Signature": "123/WJa6/3saRvSsz+eDW10LZaAlR7jMhnU4jE73UM/+123/123/123/123/123+j+pjE0nldGG+123/xouonYXLkBrfRQPtr1sv/RzrIJ/kTYr3EwSkGL032HNrOeWmdGZ9D4gIJ4ir/mbnbSZV7w==",
"SigningCertUrl": "https://sns.ap-southeast-1.amazonaws.com/SimpleNotificationService.pem",
"UnsubscribeUrl": "https://sns.ap-southeast-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:ap-southeast-1:123:-teams-lambda-trigger:46235663-971d-4f70-927e-0a420040a154",
"MessageAttributes": {
}
}
}
]
}
message = événement ["enregistrements '] [0] [' SNS '] [" message "], votre message est une chaîne dont vous avez besoin pour le convertir en dictionnaire. Chaque fois que vous en avez doutes, vous pouvez utiliser Imprimer (type (Nom de variable)). Votre valeur du message peut ne pas avoir cette clé particulière afin que vous puissiez utiliser get () fonction pour récupérer la valeur.
import json message = json.loads(event['Records'][0]['Sns']['Message']) alarm_name = message.get('AlarmName', None) if alarm_name not None: {your action} else: {some default action when key not present}