Я хочу контролировать EC2 с помощью CloudWatch-SNS-lambda (python) -SNS-Email.
Когда я тестирую свой код на Python, я обнаруживаю, что CW-сообщение "Message" содержит обработку escape, которую яне могу получить конкретное значение из «Сообщения».
Я проверяю формат аварийного сигнала с помощью приведенного ниже кода.
from __future__ import print_function
import json
import boto3
def lambda_handler(event, context):
subject = 'subject'
Messagebody = event['Records'][0]['Sns']['Message']
MY_SNS_TOPIC_ARN = 'XXXXXXXXXXXXXXXXXXXXXXXX'
sns_client = boto3.client('sns')
sns_client.publish(
TopicArn = MY_SNS_TOPIC_ARN,
Subject = subject,
Message = Messagebody
)
, в котором выясняется, что «Сообщение» содержит escape-обработку.
"Sns": {
"Type": "Notification",
"MessageId": "94be4651-8f2e-5039-9a4b-129fff80f9e8",
"TopicArn": "XXXXXXXXXXXXXXXXXXXXXXX",
"Subject": "ALARM: \"CPU_\" in Asia Pacific (Tokyo)",
"Message": "{\"AlarmName\":\"TEST\",\"AlarmDescription\":\"TEST\",\"AWSAccountId\":\"XXXXXXXXXXX\",\"NewStateValue\":\"ALARM\",\"NewStateReason\":\"Threshold Crossed: 1 datapoint [64.633879781421 (01/02/19 15:56:00)] was greater than or equal to the threshold (40.0).\",\"StateChangeTime\":\"2019-02-01T16:06:06.908+0000\",\"Region\":\"Asia Pacific (Tokyo)\",\"OldStateValue\":\"OK\",\"Trigger\":{\"MetricName\":\"CPUUtilization\",\"Namespace\":\"AWS/EC2\",\"StatisticType\":\"Statistic\",\"Statistic\":\"AVERAGE\",\"Unit\":null,\"Dimensions\":[{\"value\":\"i-039c724383acd1a67\",\"name\":\"InstanceId\"}],\"Period\":300,\"EvaluationPeriods\":1,\"ComparisonOperator\":\"GreaterThanOrEqualToThreshold\",\"Threshold\":40.0,\"TreatMissingData\":\"\",\"EvaluateLowSampleCountPercentile\":\"\"}}",
"Timestamp": "2019-02-01T16:06:06.945Z",
"SignatureVersion": "1",
Я хочу получить значение, используя что-то вроде
MetricName = event['Records'][0]['Sns']['Message']["MetricName"]
Как я могу добиться этого с помощью Python?