首页 > 解决方案 > 电子邮件格式

问题描述

我有来自 SNS(CloudWatch 警报)的消息发送到 AWS Lambda 函数。它采用以下格式。Lambda 然后通过其他 SNS 发送电子邮件。但是在电子邮件中,消息没有被格式化。它如下所示。如何格式化消息?

{"AlarmName":"sf-datalake-pcclaims-test-use1-datastream-ade-bytes","AlarmDescription":"最近一分钟读取的字节数少于一个。","AWSAccountId":"364206986528"," NewStateValue":"ALARM","NewStateReason":"超过阈值:1 个数据点 [0.0 (31/12/19 17:52:00)] 小于阈值 (1.0)。","StateChangeTime":"2019- 12-31T17:53:05.509+0000","Region":"US East (N. Virginia)","OldStateValue":"INSUFFICIENT_DATA","Trigger":{"MetricName":"GetRecords.Bytes","Namespace ":"AWS/Kinesis","StatisticType":"Statistic","Statistic":"MINIMUM","Unit":null,"Dimensions":[{"value":"sf-datalake-pcclaims-test-use1-datastream-ade","name":"StreamName"}],"Period":60,"EvaluationPeriods":1,"ComparisonOperator":"LessThanThreshold","Threshold":1.0 ,"TreatMissingData":"- TreatMissingData: 缺失","EvaluateLowSampleCountPercentile":""}}

我的代码如下:

import json
import boto3

def lambda_handler(event, context):
    client = boto3.client('sns')
    message = json.dumps(event['Records'][0]['Sns']['Message'])

    response = client.publish(
        TargetArn='arn:aws:sns:us-east-1:xxxxxxxxx:datalake-pcclaims-test-use1-email-error-alerts',
        Message=message,
        Subject='a short subject for your message',
        MessageStructure='string'
)
    print("From SNS yyyyyyyyyyyyyy: " + message)
    return {

        'statusCode': 200,
    }

标签: aws-lambdaamazon-cloudwatchamazon-snsamazon-cloudwatch-metrics

解决方案


SNS 服务不格式化电子邮件

SNS FAQ没有明确说明,但您可以从以下语句的两行之间阅读:

Amazon SNS 消息最多可包含 256 KB 的文本数据,包括 XML、JSON 和无格式文本。

“电子邮件”传输适用于最终用户/消费者,通知是常规的、基于文本的消息,易于阅读。

还有另一种称为 SES 的 AWS 服务,它支持发送格式化的电子邮件,如此处所述


推荐阅读