Python
AWS
aws-iot

AWS IoTをPythonで簡単に始めるまで

More than 1 year has passed since last update.

はじめに

https://aws.amazon.com/jp/iot/

Amazon Web Serviceの比較的新しいサービスであるAWS IoTですが、出始めということで日々進化しています。デバイスはなくともMacとPythonを使ってAWS IoTを体験していきたいと思います。

AWS Consoleでのセットアップ

Amazon Web ServiceのコンソールでAWS IoTを選択し、Connectのメニューから"Configuring a device"を選択します。

スクリーンショット 2017-01-08 11.42.04.png

Platformとして"Linux/OSX"を選択し、Pythonを選択します。

スクリーンショット 2017-01-08 11.42.40.png

Thingの名前はなんでもかまいませんが、ここでは"test_thing"にしました。"show optional configuration (this can be done later)"を選択するとThingにタイプや属性を付加できます。これは、後からThingを探しやすくするものですが、まずは必要ありません。

スクリーンショット 2017-01-08 11.45.07.png

Thingの名前だけ設定するとそれに合わせて、クライアント証明書及びポリシーが作成されます。ここで作成されたクライアント証明書を用いれば、AWS IoTの機能をPythonアプリケーションからアクセスが可能となります。

"Linux/OSX"ボタンを押すとクライアント証明書や秘密鍵などの情報がダウンロードされます。

スクリーンショット 2017-01-08 11.45.51.png

Pythonアプリケーション

ダウンロードしたzipファイルの後の処理は、以下のような形になります。

スクリーンショット 2017-01-08 11.46.22.png

私の環境では、./start.shでPermissionエラーになりました。サンプルの中で必要なライブラリをインストールしているもようなのですが、sudoをつけて再度実行したところ成功しました。

$ cd aws-iot-device-sdk-python/
$ sudo python setup.py install

トラブルシューティング

もう一度start.shを使ってサンプルアプリを実行してみました。内部では、以下のようなコマンドでクライアント証明書、ルート証明書、秘密鍵を設定して実行しています。

python aws-iot-device-sdk-python/samples/basicPubSub/basicPubSub.py -e XXXXXXXX.iot.ap-northeast-1.amazonaws.com -r root-CA.crt -c test_thing.cert.pem -k test_thing.private.key

しかし残念ながら以下のようなエラーが発生しました。

ssl.SSLError: [SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:590)

OpenSSLのバージョンが古いような感じなので、バージョンを変更してみました。
http://ytooyama.hatenadiary.jp/entry/2016/06/23/004429
https://teratail.com/questions/47299
http://stackoverflow.com/questions/35473033/how-to-fix-openssl-error-with-aws-cli-iot-api

動作確認

もう一度start.shを実行するとPythonアプリが以下のようなログメッセージを数秒に一度sdk/test/Pythonのtopicにメッセージの送受信を行う。

2017-01-08 16:54:54,102 - AWSIoTPythonSDK.core.protocol.mqttCore - DEBUG - Try to put a publish request 178 in the TCP stack.
2017-01-08 16:54:54,102 - AWSIoTPythonSDK.core.protocol.mqttCore - DEBUG - Publish request 178 succeeded.
Received a new message: 
New Message 176
from topic: 
sdk/test/Python
--------------

AWS IoTのダッシュボードで確認すると、以下のようにグラフが出力される。

スクリーンショット 2017-01-08 17.02.36.png

おわりに

デバイスがなくてもMacとPythonアプリだけでデバイスのエミュレーションができるので非常に便利です。AWS IoTがますます便利になっていますね。