Question AWS: publication d'un message SNS pour la fonction Lambda via boto3 (Python2)


J'essaie de publier sur une rubrique SNS qui notifiera ensuite une fonction Lambda, ainsi qu'une file d'attente SQS. Ma fonction Lambda est appelée, mais les journaux CloudWatch indiquent que mon objet "événement" est Aucun. Le boto3 docs indique qu'il faut utiliser kwarg MessageStructure = 'json' mais que cela génère une erreur ClientError.

J'espère que j'ai fourni suffisamment d'informations.

Exemple de code:

import json
import boto3

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

13
2017-12-01 20:11


origine


Réponses:


vous devez ajouter un default clé de la charge utile de votre message, et spécifiez 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'
)

33
2018-05-03 16:24



Juste au cas où vous souhaiteriez avoir des messages différents pour les abonnés sms et email:

import json
import boto3

message = {"foo": "bar"}
client = boto3.client('sns')
response = client.publish(
    TargetArn=arn,
    Message=json.dumps({'default': json.dumps(message),
                        'sms': 'here a short version of the message',
                        'email': 'here a longer version of the message'}),
    Subject='a short subject for your message',
    MessageStructure='json'
)

6
2017-11-22 23:10