はじめに
Amazon Web Serviceの比較的新しいサービスであるAWS IoTですが、出始めということで日々進化しています。デバイスはなくともMacとPythonを使ってAWS IoTを体験していきたいと思います。
AWS Consoleでのセットアップ
Amazon Web ServiceのコンソールでAWS IoTを選択し、Connectのメニューから"Configuring a device"を選択します。

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

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

Thingの名前だけ設定するとそれに合わせて、クライアント証明書及びポリシーが作成されます。ここで作成されたクライアント証明書を用いれば、AWS IoTの機能をPythonアプリケーションからアクセスが可能となります。
"Linux/OSX"ボタンを押すとクライアント証明書や秘密鍵などの情報がダウンロードされます。

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

私の環境では、./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のダッシュボードで確認すると、以下のようにグラフが出力される。

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