本業の方が忙しく、気づいたら前回の投稿から2ヶ月位経過していました。。。。
まだ本業の方は落ち着いていませんが、お盆休み中に子供達の相手をする合間にまとめてみました。
今回は、MQTT Brokerの構築まで書きたいと思います。
■MQTTとは?
構築手順を説明する前に簡単にMQTTについて触れたいと思います。
MQTTの説明に関しては以下のサイトが参考になりました。
https://sango.shiguredo.jp/mqtt
MQTTにはMessageを送る際の宛先情報としてTOPICという情報があります。
TOPIC情報は階層構造になっており、受信(Subscribe)側はそれらのTOPICを柔軟に指定できることが特長です。
例えば以下のようなTOPICが存在したとします。
/1年生/国語/1組
/1年生/算数/1組
/1年生/国語/2組
/1年生/算数/2組
送信(Publish)側は、上記のTOPICそれぞれを指定して送信する形になります。
一方、受信(Subscribe)側は以下のような形で指定することが可能です。
/1年生/国語/#
→前方一致指定。「1年生/国語」以下に届くメッセージを受信することができます。
/1年生/+/1組
→部分一致指定。1年1組に該当するメッセージを受信することができます。
このようにMQTTは受け取り側で情報を柔軟に選択できる仕様になっています。
ですが、送信側から受信側を特定したいという場合には少々使いづらい仕様なので工夫が必要だと感じました。
■AWS上でのMQTTサーバ構築
以下の通り、環境構築を行いました。
・VPC生成
[マネジメントコンソール]→[VPC]→[VPC]→[VPCの作成]
設定内容は以下の通り。
設定項目 | 設定値 |
---|---|
CIDRブロック | 10.0.0.0/16 |
テナンシー | デフォルト |
サブネット生成
[マネジメントコンソール]→[VPC]→[サブネット]→[サブネットの作成]
設定内容は以下の通り
設定項目 | 設定値 |
---|---|
VPC | 先ほど作成したVPCを選択 |
アヴェイラビリティゾーン | (今回は)ap-northeast-1aを選択 |
CIDR | 10.0.1.0/24 |
・インターネットゲートウェイ生成
[マネジメントコンソール]→[VPC]→[インターネットゲートウェイ]→[インターネットゲートウェイの作成]
作成後、上記VPCにアタッチ
・インスタンス生成
[マネジメントコンソール]→[EC2]→[インスタンス]→[インスタンスの作成]
インスタンスタイプはt2.microを選択しました。
作成時に上記VPC、サブネットを指定。
セキュリティグループ生成
[マネジメントコンソール]→[VPC]→[セキュリティグループ]→[セキュリティグループの作成]
設定内容は以下の通りとしました。
インバウンド
タイプ | プロトコル | ポート範囲 | 送信元 |
---|---|---|---|
SSH | TCP | 22 | 0.0.0.0/0 |
カスタム TCP ルール | TCP | 1883 | 0.0.0.0/0 |
カスタム UDP ルール | UDP | 1883 | 0.0.0.0/0 |
アウトバウンド
タイプ | プロトコル | ポート範囲 | 送信先 |
---|---|---|---|
すべてのトラフィック | すべて | すべて | 0.0.0.0/0 |
作成したセキュリティグループをEC2インスタンスに割り当てる
・Elastic IP生成
[マネジメントコンソール]→[VPC]→[Elastic IP]→[新しいアドレスの割り当て]
アドレス作成後、インスタンスと紐付けます。
■MQTT Brokerの構築
今回は「mosquitto」というMQTT Brokerを利用してみました。
mosquittoのインストールについては以下のページを参考にして行いました。
http://flyerback.blogspot.jp/2014/04/mqtt-broker-mosquitto-amaazon.html?m=1
MQTT Brokerの疎通確認はPythonで作成したプログラムで確認しました。
基本的に以下のページに基づきpahoというライブラリを利用して接続しました。
http://minor.hatenablog.com/entry/2015/02/08/221819
これで端末間でメッセージを送るための土管ができたことになります。
次回はその土管内で送るプロトコルをまとめるか、S3→Lamda→DynamoDBの流れのどちらかを書くと思います。