2015-12-01 2 views
10

J'essaie de publier sur un sujet 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 "event" est None. Le document boto3 déclare utiliser kwarg MessageStructure = 'json' mais cela lance une erreur ClientError.AWS: Publier le message SNS pour la fonction Lambda via boto3 (Python2)

J'espère avoir fourni assez 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) 
) 
+1

Vous avez seulement besoin du paramètre '' MessageStructure'' si vous essayez de sen d différents messages à différents types d'abonnés (par ex. email vs SMS). Pourriez-vous inclure le code pour votre fonction Lambda? Je suppose que le code ci-dessus fonctionne sans aucune erreur, non? – garnaat

Répondre

26

vous devez ajouter une clé default à votre charge utile du 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' 
) 
+1

Votre exemple n'inclut pas une valeur par défaut –

+3

- c'est dans la dict passée à l'argument 'Message'. –

+1

Je suis corrigé. –

0

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

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