MQTT BrokerとしてVerneMQを使ってみる

みんな大好き!MQTTは、TCP/IPベースの軽量シンプルなPub/Subメッセージングモデルのプロトコルです。

ご存知の通り、AWS IoTやAzure IoTHubなどのクラウドサービスでもMQTT Brokerが提供されており、こうしたサービスを使う機会も多いと思うのですが、本記事ではオープンソースのブローカーであるVerneMQを使って、自力でMQTT Broker立ち上げてみます。

VerneMQとは

VerneMQは、Erlio GmbH社が開発しているMQTT Brokerで、Apache license 2.0で公開されています。Erlang/OTPで書かれており、クラスタを組むこともできます。

ちなみに気になる”VerneMQ”の発音ですが、海外YouTubeの動画をみていると、Verneの最後の”e”が次の”M”と重なって”べるねむきゅー”と発音している感じです。
#といいつつ、私は”べるね・えむきゅー”と読んでます

インストール

それではAWS EC2上でやってみましょう。debian, ubuntu, redhat向けのバイナリパッケージも提供されているので、インストールは簡単です。まずはパッケージをダウンロードして、yum installします。

vernemq.confの設定

設定ファイルは、/etc/vernemq/vernemq.conf にあります。ひとまず今回は、以下の設定で動かしてみます。ダウンロードしたバージョンでは、デフォルト設定の通りでした。

passwdファイルの作成

次に認証情報を設定していきます。VerneMQに接続するユーザは、vmq-passwd コマンドで追加していきます。-c オプションでpasswdファイルの新規作成、-D オプションは削除です。

まず、ユーザ pub を作成します。

同様に、sub1, sub2 ユーザを作成します。すでにパスワードファイルが存在しているので、-c オプションは必要ありません。

acl設定

次に、aclファイルを設定します。aclファイルは、VerneMQに接続したクライアントが、何のトピックに対してpublish, subscribeできるかを定義するファイルです。ファイルパスは、vernemq.confで指定します。

ユーザごとにルールを定義していくと、クライアント数が多くなったときに管理が大変になります。しかしながらMQTTクライアントは、現実的には、特定topicへのpublishと自分自身へのメッセージのみsubscribeで十分というケースも多いです。こうした場合、VerneMQではtopicの指定に文字クラスが指定可能なので、これを活用します。例えば %u は接続時のユーザ名を表します。

以下のような指定の場合、すべてのクライアントは、data/(接続したユーザID) のtopicをsubscribleすることができます。

さらに記述を追加しましょう。
以下のように設定すると、pub1 ユーザは、data/ 以下のすべてのtopicに対し、publishをすることができます。

長くなってしまいました。次回、プログラムから実際に publish/subscribeを実行してみます。