MQTT ブローカーを GCP Compute Engine に作るメモ

最近試してみたので、MQTT ブローカーを GCP Compute Engine に作るメモをまとめてみます。

Compute Engine で VM 作る

ざっくりとした流れは Ubuntu 18.04にMosquitto MQTT Messaging Brokerをインストールして保護する方法 をベースに Compute Engine で VM 作ります。

image

  • マシンタイプ
    • e2-micro
  • ブートディスク
    • Ubuntu 18.4 LTS
  • リージョン
    • 東京(好み)

画像のような設定で作成します。

ファイアウォール ルールで MQTT の 1883 ポートを解放

image

作成したら、以下のような設定で 1883 ポートを開けます。

ファイアウォール ルールの使用  |  VPC  |  Google Cloud

今回は MQTT なのでこれでOKです。もし、MQTTS の場合は他のポート 8883 をあけるひつようがあります。

allow-mqtt

ネットワーク default
優先度 1000
方向 上り
一致したときのアクション 許可
ソースフィルタ IP範囲 0.0.0.0/0
プロトコルとポート tcp:1883

ターゲットはすべてに適用してますが、ネットワークタグをうまく使えば、このインスタンスだけにつけたタグでもっと限定的に適用することができます。

MQTTインストール

image

ブラウザからリモートアクセスします。やりやすい。

sudo apt update

アップデートして、

sudo apt install mosquitto mosquitto-clients

mosquitto を一通りインストールします。

常駐していることで確認

この時点で systemctl で常駐して立ち上がっていて、

sudo systemctl status mosquitto.service

で確かめてみます。以下のような、結果が出てくれば起動されています。

sudo systemctl status mosquitto.service
● mosquitto.service - LSB: mosquitto MQTT v3.1 message broker
   Loaded: loaded (/etc/init.d/mosquitto; generated)
   Active: active (running) since Thu 2021-01-21 11:56:34 UTC; 2min 1s ago
     Docs: man:systemd-sysv-generator(8)
    Tasks: 1 (limit: 1125)
   CGroup: /system.slice/mosquitto.service
           └─3154 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
Jan 21 11:56:34 instance-mqtt systemd[1]: Starting LSB: mosquitto MQTT v3.1 message broker...
Jan 21 11:56:34 instance-mqtt mosquitto[3138]:  * Starting network daemon: mosquitto
Jan 21 11:56:34 instance-mqtt mosquitto[3138]:    ...done.
Jan 21 11:56:34 instance-mqtt systemd[1]: Started LSB: mosquitto MQTT v3.1 message broker.

パスワードなしで接続することができるので、パスワードを設定する前に、ちゃんと動くか一度接続を試しておきましょう。

パスワードを設定

このままだとアクセスし放題なので、パスワード設定します。admin のログイン名であればこのようにコマンドを実行します。

sudo mosquitto_passwd -c /etc/mosquitto/passwd admin

password: と聞かれるのでパスワード入力して作成します。これで、パスワードファイルが /etc/mosquitto/passwd に作られました。

sudo nano /etc/mosquitto/conf.d/default.conf

以下の内容を書き込みます。

allow_anonymous false
password_file /etc/mosquitto/passwd

保存します。

再起動

先ほどの設定を反映するために再起動しましょう。

sudo systemctl restart mosquitto

これでID・パスワード付きでアクセスできるはず。

まれに、このタイミングで、ログインID・パスワードが合ってても何故かアクセスできなくなるケースがあります。その時はインスタンスを一度削除して、再度作り直してみましょう。

あとは、 MQTTLens や、Node-RED などで MQTT をつないでみて、より細かくやり取りできるか試してみましょう!