ペイロードサイズが2GBまで対応されたAmazon SNSのPythonライブラリ「Extended Client Library for Python」を試してみた
こんにちは!DA(データアナリティクス)事業本部 サービスソリューション部の大高です。
皆さんはAmazon SNSをお好きでしょうか?私は大好きです。ユースケースにもよりますが、SESと比較するとお手軽にメールを宛先としたメッセージ配信ができるところが特に大好きです。
このAmazon SNSは通常はペイロードサイズの上限は256KBとなっていますが、Amazon S3をペイロードの保存先として利用することで2GBまで送信できるライブラリがこれまでも存在しました。
これはJava用のライブラリで「Amazon SNS Extended Client Library for Java」というものだったのですが、先日「Amazon SNS Extended Client Library for Python」というPython用のライブラリが公開されました。
とても気になるので、実際に試してみたいと思います。
前提条件
以下を前提としています。
- AWSアカウントを持っており、AWS CLIなどでクレデンシャルの設定が済んでいる
- Python 3.x と pip がインストール済み
また、SNSトピックも事前に作成し、Emailのサブスクリプションも設定しておきました。
- トピック名
- cm-ootaka-sandbox-sns-topic
セットアップ
まずは該当ライブラリをインストールします。
pip install amazon-sns-extended-client boto3
これで準備ができました。
メッセージ送信のためのサンプルコード
公式のGitHubのREADMEを元に、以下のような簡単なサンプルコードを用意しました。
なお、TOPIC_ARN
とBUCKET_NAME
はサンプル値です。
また、今回はペイロードサイズが小さいものを利用するので、sns_extended_client.always_through_s3
にTrue
を指定することで、強制的にS3バケットを利用するように指定しています。
このコードを使って試してみましょう。
SNSメッセージを送ってみる
では、実際に送ってみます。
% python3 publish-message.py Publish Done.
配信されるメール
送信が完了すると以下のようなメールが届いていました。
["software.amazon.payloadoffloading.PayloadS3Pointer", {"s3BucketName": "this-is-sample-s3-bucket-name", "s3Key": "62e9a741-3703-4270-b421-ae7c23e9b0c4"}] -- If you wish to stop receiving notifications from this topic, please click or visit the link below to unsubscribe: https://sns.ap-northeast-1.amazonaws.com/unsubscribe.html?SubscriptionArn=[DUMMY_ARN]&Endpoint=[DUMMY_EMAIL] Please do not reply directly to this email. If you have any questions or comments regarding this email, please contact us at https://aws.amazon.com/support
unsubscribeの箇所はダミーの値を入れていますが、このような感じです。
送信されたペイロードがS3のどこに保存されたかが分かる通知内容となっていました。
実際に、S3バケットの中身も確認してみます。
% aws s3 cp s3://this-is-sample-s3-bucket-name/62e9a741-3703-4270-b421-ae7c23e9b0c4 - This message should be published to S3
ちゃんと、送付したメッセージがS3バケットのオブジェクトとして保存されていることが確認できました!
まとめ
以上、ペイロードサイズが2GBまで対応されたAmazon SNSのPythonライブラリ「Extended Client Library for Python」を試してみました。
自分自身でS3にオブジェクトをPutして、SNSのメッセージにその旨を書くこともできますが、このライブラリを利用すれば特に意識せずに一連の流れを処理できるので楽そうですね。
実際にユーザーにメール通知をさせるユースケースなどを考えた場合には、もう少しユーザーフレンドリーなメッセージを通知したくなると思います。その場合には、間に別途処理を挟んでメッセージを加工してあげると良さそうかなと思いました。
どなたかのお役に立てば幸いです。それでは!