Подтвердить что ты не робот

AWS: опубликовать сообщение SNS для функции Lambda через boto3 (Python2)

Я пытаюсь опубликовать в теме SNS, которая затем будет уведомлять функцию Lambda, а также очередь SQS. Моя функция Lambda вызывает вызов, но в журналах CloudWatch указано, что мой объект "события" - "Нет". В документе boto3 указано использование kwarg MessageStructure = 'json', но это вызывает ClientError.

Надеюсь, я предоставил достаточно информации.

Пример кода:

import json
import boto3

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

Ответ 1

вам нужно добавить ключ default к вашей полезной нагрузке сообщения и указать 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'
)

Ответ 2

На всякий случай вы хотите иметь разные сообщения для смс и подписчиков электронной почты:

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