最近試してみたので、MQTT ブローカーを GCP Compute Engine に作るメモをまとめてみます。
Compute Engine で VM 作る
ざっくりとした流れは Ubuntu 18.04にMosquitto MQTT Messaging Brokerをインストールして保護する方法 をベースに Compute Engine で VM 作ります。
- マシンタイプ
- e2-micro
- ブートディスク
- Ubuntu 18.4 LTS
- リージョン
- 東京(好み)
画像のような設定で作成します。
ファイアウォール ルールで MQTT の 1883 ポートを解放
作成したら、以下のような設定で 1883 ポートを開けます。
ファイアウォール ルールの使用 | VPC | Google Cloud
今回は MQTT なのでこれでOKです。もし、MQTTS の場合は他のポート 8883 をあけるひつようがあります。
allow-mqtt ネットワーク default 優先度 1000 方向 上り 一致したときのアクション 許可 ソースフィルタ IP範囲 0.0.0.0/0 プロトコルとポート tcp:1883
ターゲットはすべてに適用してますが、ネットワークタグをうまく使えば、このインスタンスだけにつけたタグでもっと限定的に適用することができます。
MQTTインストール
ブラウザからリモートアクセスします。やりやすい。
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 をつないでみて、より細かくやり取りできるか試してみましょう!