こんにちは、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$ sudo chmod 644 /etc/mosquitto/certs/private.key3$ 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# -----------------------------------------------------------------23# Bridges to AWS IOT45# -----------------------------------------------------------------67# AWS IoT endpoint89connection awsiot10address *************.iot.ap-northeast-1.amazonaws.com:88831112# Setting topics1314# topic {topic} {direction} {QoS}1516topic awsiot_to_gw in 1 17topic gw_to_awsiot out 118topic both_directions both 11920# Setting protocol version2122bridge_protocol_version mqttv31123bridge_insecure false2425# Bridge connection name and MQTT client Id,2627# enabling the connection automatically when the broker starts.2829cleansession true30clientid bridgeawsiot31start_type automatic32notifications false33log_type all3435# -----------------------------------------------------------------3637# Certificate based SSL/TLS support3839# -----------------------------------------------------------------4041# Path of rootCA4243bridge_cafile /etc/mosquitto/certs/rootCA.pem4445# Path of certificate4647bridge_certfile /etc/mosquitto/certs/cert.crt4849# Path of private key5051bridge_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のテストコンソールで「awsiottogw」のトピックへサブスクライブした状態でMQTT.fxからパブリッシュをしてみると、以下のようなログと同時にテストコンソールでメッセージが表示されました。
11501759216: Received PUBLISH from TEST_MQTT (d0, q0, r0, m0, 'gw_to_awsiot', ... (21 bytes))21501759216: Sending PUBLISH to local.bridgeawsiot (d0, q0, r0, m0, 'gw_to_awsiot', ... (21 bytes))
逆に、MQTT.fxで「gwtoawsiot」のトピックへサブスクライブした状態で、AWS IoTのテストコンソールからパブリッシュをすると、MQTT.fxでメッセージを受け取ることができました。
まとめ
今回は、Mosquitto MQTTブローカーを使ってAWS IoTとクライアントデバイスをブリッジさせる検証を行いましたが、簡単な設定でAWS IoTとクライアントを疎通させることができました。この仕組みを使うことでAWS IoTに対応できないデバイスでもAWS IoTにメッセージを送ることができるため、使用できるデバイスの幅が広がるのではないでしょうか。
今回は以上となります。次回もお楽しみに!