web-dev-qa-db-ja.com

AWS:boto3経由でLambda関数のSNSメッセージを発行する(Python2)

SQSキューと同様にLambda関数に通知するSNSトピックに公開しようとしています。 Lambda関数は呼び出されますが、CloudWatchログには「イベント」オブジェクトがNoneであるという状態が記録されます。 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)
)
22
bmoran

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'
)
56
Ryan Tuck

SMSとメール購読者に異なるメッセージを送りたい場合に備えて:

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