はじめに
AWSIoTにMQTTでメッセージのやり取りをするためには、デバイス側に証明書や鍵を持たせてあげないといけませんよね?
「デバイスに不正アクセスされた時に証明書や鍵が流出するのが怖い…でもMQTTでメッセージをやり取りしたい…」
そんな方おられませんか?
(すんごい今更ですけど) そんなときに SORACOM Beam です!!
今回はSORACOMBeam経由でAWSIoTとMQTTでPub/Subする方法を紹介します。
前提条件
- AWSのアカウントを持っている
- SORACOMのアカウント/SIMを持っている
- mosquitto/mosquitto-clientsがインストール済みでSORACOMを使った通信ができるRaspberryPi
(MQTTが使えるデバイスだったらRaspberryPiじゃなくても大丈夫です。デモでは上記のRaspberryPiを利用しています)
AWSIoT
AWSIoTではモノ(Thing)に対して、それぞれ証明書と秘密鍵を作成し、その情報を持って認証を行なっています。
では、その準備をしていきましょう





これで モノ
に紐づく証明書と秘密鍵が発行されました。
SORACOM
AWSIoTにMQTTを転送するためのSIMグループを作成し、今回利用するSIMに紐付けます。
まずSIMグループを作成しましょう






これでAWSIoTに転送するためのSIMグループが作成されました。
あとは使用してるSIMにこのグループを紐づけてください。
さぁやってみよう
AWSIoT側の準備
AWSIoTへのSubとラズパイへのPubをするための準備をします

こんな画面になります

ラズパイからAWSIoTへメッセージをPublish
mosquitto_pub
コマンドでメッセージを beam.soracom.io
にPublishします。
$ mosquitto_pub -d -h beam.soracom.io -t beamdemo -m "{\"meg\": \"test\"}"
Client mosqpub|2094-raspberryp sending CONNECT
Client mosqpub|2094-raspberryp received CONNACK
Client mosqpub|2094-raspberryp sending PUBLISH (d0, q0, r0, m1, 'beamdemo', ... (15 bytes))
Client mosqpub|2094-raspberryp sending DISCONNECT
成功するとこんなメッセージが表示されます。 beamdemo/{IMSI}
というトピックでメッセージがPublishされてきました

AWSIoTからラズパイへメッセージをPublish
ラズパイ側では mosquitto_sub
コマンドを使ってトピックをSubscribeします。
$ mosquitto_sub -h beam.soracom.io -t beamdemo
AWSIoTからメッセージをPublish

成功すればラズパイのコンソール側にメッセージが届きます
$ mosquitto_sub -h beam.soracom.io -t beamdemo
{
"message": "Hello from AWS IoT console"
}
さいごに
今までSORACOMFunnelを利用して、デバイス側にクレデンシャルを持たせることなくKinesisDataStreamsなどにデータを送信していましたが、改めてAWSIoTにPub/Subするための証明書や鍵の情報も持たせたくないな…という場面に出くわしたので、今回試してみました。
とても簡単なことではありましたが、デバイス側に重要な情報を持たせる必要がなくなりますので、セキュリティ面でも心配事がひとつ減るので、ぜひ使うべきサービスだと思います。
あ、私SORACOM社の人間ではございませんので。
ではまた!