web-dev-qa-db-fra.com

AWS: publier un message SNS pour la fonction Lambda via boto3 (Python2)

J'essaie de publier sur un sujet SNS qui notifiera alors 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. Les documents boto3 indiquent d'utiliser le kwarg MessageStructure = 'json' mais cela lève une ClientError.

J'espère avoir 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)
)
22
bmoran

vous devez ajouter une clé default à la charge utile de votre message et spécifier 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'
)
56
Ryan Tuck

Juste au cas où vous voudriez avoir des messages différents pour les abonnés SMS et e-mail:

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'
)
18
Amir