Amazon MQにmosquitto(MQTT)とMQTT over Websocketで接続の続編です
切なる願い
Amazon MQ は 生MQTT はサポートしてないお...
でも TLSがしゃべれない非力なデバイスからも Amazon MQ 使いたいお!!
ビームを飛ばせばいいじゃない
3G/LTE通信が1日10円~ 1回線から契約できる、モノ向け通信サービスのSORACOM (CM色強い) には SORACOM Beam というデータ転送サービスがありまして、それを使って Amazon MQ に接続出来たよって話です
このデータ転送時にプロトコル変換もやってくれるのですが、変換内容に 生のMQTT → MQTTS も入ってます
要するに MQTT Proxy そんなところです (CM色強い)
手順
SORACOM の Webコンソールで "SIMグループ" を作成したら、そのSIMグループの中にある SORACOM Beam で MQTTエントリポイント を選択します
あとは以下のように設定していくだけです
- プロトコル: MQTTS
- ホスト名: Amazon MQ のダッシュボードから得てください
- ポート番号:
8883
(ねんのため、Amazon MQ のダッシュボードで確認してください) - ユーザ名: Amazon MQ のダッシュボードから得てください
- パスワード: Amazon MQ のダッシュボードから得てください
これでOKです
オプションの IMSI付与 は、ON にすると 例えば my_topic/sensor
宛てに送ると、Amazon MQ では my_topic/sensor/491023123131
と、送信元 SIM の IMSI が付与されますので、送信元を特定することがとても簡単になるのでオヌヌメです
確認
確認には前回同様 mosquitto と HiveMQ の MQTT over Websocketを使ってみます
ターミナル側(mosquitto_sub)の方が SORACOM Beam を使っている様子です
注目ポイント
前回は mosquitto_sub
の引数に --capath /etc/ssl/certs/
を入れてTLS通信にしていましたが、生MQTTで送るのでコマンドラインも減っています
SORACOM Beam を使うとこんなにメリットが;
- そもそもTLSが使えない、非力なデバイスでMQTTやりたい
- 通信データサイズの削減 (TLSと生の違い)
- デバイス上の証明書更新をしなくてよい
- Amazon MQ 側の設定変更(インスタンス作り直しに伴う endpoint の変更や、ユーザ/パスワードの変更)が発生しても、デバイス上のプログラムコード変更をしなくてよい
もっと言ってしまうと TLS実装しなくていいんです 面倒から解放されますよ (^^
これが 0.0009円/1リクエスト (in/outでそれぞれ1リクエストが発生するので、感覚的な"1回"だと 0.0018円) で使えるのだから、お得と言わざるを得ない (CM色強い)
あとがき
- Qiitaのデザインが変わってて驚いた
- Amazon MQ って Simple Icon マダー?
- CM色強いですが、費用対効果は抜群なサービスです
現場からは以上です。