0

I have message coming from SNS (CloudWatch alarm) to an AWS Lambda function. It is in below format. Lambda then email message via other SNS. But in email, message does not get formatted. It appears as below. How can I format message?

{"AlarmName":"sf-datalake-pcclaims-test-use1-datastream-ade-bytes","AlarmDescription":"Less than one bytes are read in last one minute.","AWSAccountId":"364206986528","NewStateValue":"ALARM","NewStateReason":"Threshold Crossed: 1 datapoint [0.0 (31/12/19 17:52:00)] was less than the threshold (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: missing","EvaluateLowSampleCountPercentile":""}}

My code is as below:

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,
    }
John Rotenstein
  • 241,921
  • 22
  • 380
  • 470
Rup
  • 31
  • 4
  • Does this answer your question? [Sending html content in AWS SNS(Simple Notification Service) emails notifications](https://stackoverflow.com/questions/32241928/sending-html-content-in-aws-snssimple-notification-service-emails-notification) – John Rotenstein Dec 31 '19 at 22:40

1 Answers1

0

The SNS service doesn't format email messages

The SNS FAQ does not explicitly say, but you can read in between the lines from the following statements:

Amazon SNS messages can contain up to 256 KB of text data, including XML, JSON and unformatted text.

The ”Email” transport is meant for end-users/consumers and notifications are regular, text-based messages which are easily readable.

There is another AWS service called SES which supports sending of formatted emails as discussed here

Community
  • 1
  • 1
aksyuma
  • 2,957
  • 1
  • 15
  • 29