Amazon SNSのNotificationを待ち受けるPython

やりたいことから離れてしまったのだけど、とりあえず前回の続きとして。

Glacierのジョブの完了をPythonからじっと待つ

もちろんメールサーバを持っておく、HTTPサーバでフックするなどあるものの、詳細考えると今回のケースだけに準備するのはややオーバーキルだし、げんなりする。メンテしてらんない。
当初Apache起動してどうのというのが頭に浮かんで、さすがにそれはないわー、とか思ってた。

のだが、よく考えると簡単なHTTPサーバならPythonで立ち上げりゃいいじゃん。

Glacierとつないでどうのというところはめんどいので後回しにして、とりあえずAmazon SNSとローカルのPythonが楽しくお話出来るところまでやった。

https://github.com/dmiyakawa/glacier_exp_py/blob/ec8e8580a9484f49e232261e041e8a19824b1d43/wait_sns_via_http.py


Pythonの流儀的に怪しいところがある可能性大。というのもHTTPServer的なのめったに書いたことないし、しかもPOSTの正確な仕様知らん。

○ API的な話

基本的にはこれを読めば書けるようになる:

Appendix D: Sending Amazon SNS Messages to HTTP/HTTPS Endpoints

肝はSubscriptionConfirmationのところ。全く別件でこの部分がネックになった (とあるアプリサーバのその部分を書き換えられない) ので書き始めたのだった。

○ テスト

上記のサーバアプリを起動し、Amazon SNSでSubscriptionを作ってメッセージをpublishするだけ。目標をセンターに入れてスイッチ。

もちろん外部から見えるサーバじゃないとだめ (192.168.x.x だったらポートフォワーディングとかやって)

○ 参考にしたサイト

すみませんねPython初級なもんで

○ 他


現状だとセキュリティ的には結構まずい。ARN丸見えだから簡単に別のサーバがNotificationを送ってこれてしまう。また、ConfirmationでポチってるURLを詐称されると何かさらにまずい。

対処策の一つはhttpsを使うこと。ただし証明書周りを自分で実装することになり……え、まじでそれやるのか? しかもオレオレ証明書はダメらしい。 (http://docs.amazonwebservices.com/sns/latest/gsg/SendMessageToHttp.https.ca.html)


このブログの人気の投稿

LibreOfficeで表紙、目次、本体でフッターのページ番号のスタイルを変える

WiiUのコントローラが通信不良に陥った話

技術書典2 あ-03 『もわねっとのPythonの本』