AWS IoTとデバイスの通信をEC2のMQTTブローカーでブリッジさせてみる 準備編

Pocket

こんにちは、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をインストールします。
以下のコマンドで、リポジトリの更新とブローカー、クライアントのインストールを行っていきます。

以上で、Mosquittoのインストールは完了です。
次回は、インストールしたMosquittoの設定を行い、実際にデバイスとAWS IoTの疎通確認をしていきます。
お楽しみに!