こんにちは、Michaelです。
前回、「AWS IoTとデバイスの通信をEC2のMQTTブローカーでブリッジさせてみる 準備編」として、EC2に対してMQTTブローカー「Mosquitto」のインストールを行いました。
今回は、インストールしたMosquittoの設定を行って、IoTデバイスとAWS IoTとのブリッジを試します。
MQTTブローカーの設定
それでは、Mosquittoを設定していきます。
まず、AWS IoTからダウンロードしたクライアント証明書のうち、cert.crt、private.key、rootCA.pemを”/etc/mosquitto/certs”のディレクトリにアップロードしておきます。
cert.crt、private.keyは以下のようにパーミッションを変更しておきます。
1 2 3 |
# パーミッションの変更 $ sudo chmod 644 /etc/mosquitto/certs/private.key $ sudo chmod 644 /etc/mosquitto/certs/cert.crt |
証明書を配置したら、Mosquitto用の設定ファイルを作成します。
Vimエディタ等で下記のテキストをコピー/貼り付けし、保存しておきます。
設定ファイルの「AWS IoT endpoint」にはAWS IoTで取得したエンドポイントを書き込みます。
また、「Setting topics」には接続するトピックと通信方向、QoSを設定します。通信方向は設定はローカルネットワーク側を中心として、ゲートウェイに入る
1 |
$ sudo vim /etc/mosquitto/conf.d/bridge.conf |
・bridge.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# ----------------------------------------------------------------- # Bridges to AWS IOT # ----------------------------------------------------------------- # AWS IoT endpoint connection awsiot address *************.iot.ap-northeast-1.amazonaws.com:8883 # Setting topics # topic {topic} {direction} {QoS} topic awsiot_to_gw in 1 topic gw_to_awsiot out 1 topic both_directions both 1 # Setting protocol version bridge_protocol_version mqttv311 bridge_insecure false # Bridge connection name and MQTT client Id, # enabling the connection automatically when the broker starts. cleansession true clientid bridgeawsiot start_type automatic notifications false log_type all # ----------------------------------------------------------------- # Certificate based SSL/TLS support # ----------------------------------------------------------------- # Path of rootCA bridge_cafile /etc/mosquitto/certs/rootCA.pem # Path of certificate bridge_certfile /etc/mosquitto/certs/cert.crt # Path of private key bridge_keyfile /etc/mosquitto/certs/private.key |
設定ファイルができたので、Mosquittoブリッジを起動します。
オプション-cで先ほど作成した設定ファイルを指定して起動します。オプション-dを付けることでバックグラウンド起動ができますが、今回はログ確認のためオプションを付けずに起動します。
1 |
$ sudo mosquitto -c /etc/mosquitto/conf.d/bridge.conf |
疎通テスト
実際にクライアントとAWS IoTの間でMosquittoブリッジを介してメッセージを送れるか試してみます。
クライアントにはMQTT.fxを使用し、以下のように設定してMosquittoブリッジに接続します。
項目 | 内容 |
Broker Address | EC2インスタンスのパブリックIP |
Broker Port | 1883 |
Client ID | (任意の文字列) |
Enable SSL/TLS | チェックなし |
プロファイルを選択してConnectをクリックするとMosquittoのログに接続元IPと設定したClient IDが表示されました。
AWS IoTのテストコンソールで「awsiot_to_gw」のトピックへサブスクライブした状態でMQTT.fxからパブリッシュをしてみると、以下のようなログと同時にテストコンソールでメッセージが表示されました。
1 2 |
1501759216: Received PUBLISH from TEST_MQTT (d0, q0, r0, m0, 'gw_to_awsiot', ... (21 bytes)) 1501759216: Sending PUBLISH to local.bridgeawsiot (d0, q0, r0, m0, 'gw_to_awsiot', ... (21 bytes)) |
逆に、MQTT.fxで「gw_to_awsiot」のトピックへサブスクライブした状態で、AWS IoTのテストコンソールからパブリッシュをすると、MQTT.fxでメッセージを受け取ることができました。
まとめ
今回は、Mosquitto MQTTブローカーを使ってAWS IoTとクライアントデバイスをブリッジさせる検証を行いましたが、簡単な設定でAWS IoTとクライアントを疎通させることができました。この仕組みを使うことでAWS IoTに対応できないデバイスでもAWS IoTにメッセージを送ることができるため、使用できるデバイスの幅が広がるのではないでしょうか。
今回は以上となります。次回もお楽しみに!