2015-12-01 31 views
10

Sto tentando di pubblicare su un argomento SNS che invierà una notifica a una funzione Lambda, nonché una coda SQS. La funzione My Lambda viene chiamata, ma i registri di CloudWatch indicano che il mio oggetto "evento" è Nessuno. I documenti di boto3 affermano di usare kwarg MessageStructure = 'json' ma che lancia un'eccezione ClientError.AWS: Pubblica messaggio SNS per la funzione Lambda tramite boto3 (Python2)

Spero di aver fornito abbastanza informazioni.

Esempio di codice:

import json 
import boto3 

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

È necessario solo il parametro '' MessageStructure'' se si sta provando a d diversi messaggi a diversi tipi di abbonati (ad es. email vs. SMS). Potresti includere il codice per la tua funzione Lambda? Suppongo che il codice mostrato sopra funzioni senza errori, giusto? – garnaat

risposta

26

è necessario aggiungere una chiave default al messaggio payload, e specificare 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

L'esempio non include un valore predefinito –

+3

sicuro, è nel dt passato al messaggio 'Messaggio' arg. –

+1

Sono corretto. –

0

Solo nel caso in cui si desidera avere messaggi diversi per sms ed e-mail abbonati:

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