Search code examples
python-2.7amazon-snsaws-lambdaboto3

AWS: Publish SNS message for Lambda function via boto3 (Python2)


I am trying to publish to an SNS topic which will then notify a Lambda function, as well as an SQS queue. My Lambda function does get called, but the CloudWatch logs state that my "event" object is None. The boto3 docs states to use the kwarg MessageStructure='json' but that throws a ClientError.

Hopefully I've supplied enough information.

Example Code:

import json
import boto3

message = {"foo": "bar"}
client = boto3.client('sns')
response = client.publish(
    TargetArn=arn,
    Message=json.dumps(message)
)

Solution

  • you need to add a default key to your message payload, and specify MessageStructure:

    import json
    import boto3
    
    message = {"foo": "bar"}
    client = boto3.client('sns')
    response = client.publish(
        TargetArn=arn,
        Message=json.dumps({'default': json.dumps(message)}),
        MessageStructure='json'
    )