こんにちは、Michaelです。
今回から2回にわたり、MQTTブローカーのMosquittoを使ってIoTデバイスとAWS IoTをつなぐブリッジをEC2で構築してみます。
今回は、準備編としてAWS IoTの設定とEC2の作成、Mosquittoのインストールを行います
MQTTブローカー Mosquittoとは
IoTデバイスの通信プロトコルとして広く使われるMQTTでは、メッセージのやり取りをするために、仲介するサーバーが必要になります。このサーバーのことをMQTTブローカーといい、Mosquittoは代表的なOSSのMQTTブローカーで、機能も豊富なため幅広く使用されています。
メッセージのやり取りという点でいえば、AWS IoTもブローカー機能を有するため、別途MQTTブローカーを構築しなくても、MQTTによるメッセージのやり取りは可能です。
ブリッジを使用する理由
IoTと一言で言ってもその形態は多種多様で、個々のデバイスがインターネットに接続できる場合だけでなく、接続先やセキュリティ証明書に制約があるなどAWS IoTへの接続が制限される場合もあります。このような制限されたデバイスをAWS IoTと通信させようとする場合には、AWS IoTと接続可能なゲートウェイを設置する必要があります。
Mosquittoに限らず一般的なMQTTブローカーには、MQTTメッセージの仲介をするブリッジ機能が備わっており、AWS IoT と直接やり取りのできないデバイスとAWS IoTの間に置くことで、簡単にゲートウェイを構成することができます。
今回は、デバイスがAWS IoTのMQTT仕様に対応できない場合を想定して、以下のような構成の環境を作成してみます。
クライアント証明書の取得とポリシーの設定
それでは、EC2にMosquitto をインストールしてブリッジを構成していきますが、事前にAWS IoTでクライアント証明書の取得とポリシーの設定をしておきます。
クライアント証明書の取得とポリシーの設定は「AWS IoTを始めよう -MQTTの設定(AWS IoT編)-」の手順に沿って行い、証明書に関しては下記のように名称を付けて保存をしておきます。
証明書 | ファイル名 |
A certificate for this thing | cert.crt |
A public key | public.key |
A private key | private.key |
A root CA for AWS | rootCA.pem |
また、AWS IoTの「設定」からエンドポイントをメモしておきます。
EC2の作成とMosquittoのインストール
AWS IoTの設定ができたところで、EC2にMosquittoブリッジを構成していきます。
まずは、MosquittoをインストールするEC2インスタンスを作成します。インスタンスを作成は「元オンプレエンジニアがAWSを使ってみた(EC2編)」の手順と同じように作成しますが、EC2とAWS IoTを接続するために「AWSIoTConfigAccess」のポリシーをアタッチしたIAMロールと、MQTT接続のための下記のセキュリティグループをそれぞれ作成、設定してインスタンスを起動します。
・セキュリティグループ
ディレクション | ポート | プロトコル | ソース |
インバウンド | 22 | tcp | マイIP |
インバウンド | 1883 | tcp | マイIP |
アウトバウンド | すべて | すべて | 0.0.0.0/0 |
作成したEC2にSSHでログインし、Mosquittoをインストールします。
以下のコマンドで、リポジトリの更新とブローカー、クライアントのインストールを行っていきます。
1 2 3 4 5 |
# Mosquittoを含むリポジトリに更新 $ sudo wget http://download.opensuse.org/repositories/home:/oojah:/mqtt/CentOS_CentOS-7/home:oojah:mqtt.repo -O /etc/yum.repos.d/mqtt.repo # Mosquttoブローカーとクライアントのインストール sudo yum install mosquitto mosquitto-clients |
以上で、Mosquittoのインストールは完了です。
次回は、インストールしたMosquittoの設定を行い、実際にデバイスとAWS IoTの疎通確認をしていきます。
お楽しみに!