AWS IoTとデバイスの通信をEC2のMQTTブローカーでブリッジさせてみる 設定編

こんにちは、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が表示されました。

プロファイルを選択して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にメッセージを送ることができるため、使用できるデバイスの幅が広がるのではないでしょうか。

今回は以上となります。次回もお楽しみに!

この記事を書いた人

aws-recipe-user