Amazon Web Services ブログ
ローカルのMosquitto MQTT BrokerをブリッジにAWS IoTを使う
AWS SDKまたはAWS IoT Device SDKを使用して、数百万のオブジェクトをAWS IoTに安全に接続できます。
製造業におけるIoTの場合、オブジェクトは複数の理由でゲートウェイに接続されます。
センサーは非常に制約され、クラウドに直接接続できないことや、センサーはプロトコルとしてMQTTが使えないまたは、 ゲートウェイ上でローカルに分析と処理を実行する必要があります。
ローカルMQTTブローカーの1つの機能は「ブリッジ」と呼ばれ、MQTTメッセージを交換できるように、ローカルMQTTブローカーをAWS IoTに接続することができます。 これにより、オブジェクトがAWS IoTと双方向で通信し、AWSクラウドの恩恵を受けることができます。
この記事では、この機能が非常に便利で、実装方法を示すユースケースについて説明します。
MQTTブローカーをAWS IoTにブリッジする理由
IoTではセキュリティが最も重要であり、AWS IoTブローカーには、クライアント証明書付きのTLS 1.2などに基づいてデバイスを認証および認可する高度なセキュリティビルトインが組み込まれています。
従来のIoTデプロイメントを使用している場合は、MQTTブローカーにユーザー名やパスワードなどの他の認証メカニズムを使用してオブジェクトをすでに接続している可能性があります。 MQTTブローカーは、センサーがデプロイされる非常に近い場所(ローカルMQTTブローカー)もしくはクラウドの中に構築されています。
現在のセキュリティ標準をAWS IoTのものに合わせてアップグレードする予定で、AWS IoTのスケーラビリティとルールエンジンの恩恵を受けるには、従来のMQTTブローカーをAWS IoTにブリッジすることができます。これは、現在のシステムのアップグレードを待たずにすばやく導入できる簡単な一時的なソリューションです。単一のブローカーを超えるスケーリングはこの記事の範囲には含まれていませんが、Mosquitto MQTT Brokerのブリッジ機能に焦点を当てます。
MosquittoのようなオープンソースのMQTTブローカーは、Linuxのような多くのオペレーティングシステムにインストールすることができます。ローカルデバイスにMosquittoをインストールすると、Mosquitto bokerの機能(ローカルでのメッセージの永続化、ローカルでのログのアクティビティ)をローカルで有効にするだけでなく、ローカルデバイスにMosquittoをインストールすることで、AWS IoTにデータを送信するための特別なコードを開発する必要がありません。
Mosquitto MQTT Brokerのインストール方法
最初のステップは、あなたのデバイス/仮想マシンにMosquittoブローカーをインストールすることです、Mosquittoのダウンロードページはこちらです。
一般的には、ローカルゲートウェイにインストールすることになります。 Mosquittoは、多くのLinuxディストリビューションを含む幅広いプラットフォームをサポートしています。 したがって、低電力デバイスや本格的なサーバー/仮想マシンでローカルゲートウェイを実行することができます。
私たちの場合、MosquittoをEC2 Amazon Linuxインスタンスにインストールします。これは、Linuxディストリビューションを実行するローカルゲートウェイを持つことと同等です。
Amazon EC2インスタンスの使用を計画していない場合は、「AWS IoTへのブリッジ設定方法」のセクションをお読みください。
EC2インスタンスの起動と設定
Mosquitto Brokerとして利用するEC2インスタンスの起動の前に、IAM Roleを作成します。これは、AWS IoTとのブリッジをするためにCLIをインスタンスで利用するためにkeyなどの認証情報が必要となるためです。
AWS ウェブコンソールからIAM serviceへアクセスします。
2. Roleをクリックします。
3. Create New Roleをクリックします。
4. Roleに AWSIoTConfigAccessと名付けます
5. Next Stepをクリックします
6. Select Role TypeからAmazon EC2を選択します
7. FilterにAWSIoTConfigAccessを入力します
8. PolicyにAWSIoTConfigAccessを選択し、Next Stepをクリックします
9. Reviewを確認し、Create Roleをを実行します
10. これでRoleの作成は完了となりました、AmazonEC2のコンソールへ移動してください。選択するリージョンはAWS IoTが利用できるリージョンを選択します、本記事中はフランクフルトを利用しています。
11. Launch Instanceをクリックします
12. Amazon Linux AMIを選択します
13. t2.microインスタンスを選択します
14. Next:Cofigure Instance Detailsをクリックします
15. IAM Roleに先程作成した、AWSIoTCofingAccessを選択します
16. デフォルト設定のまま Next:Add Storage
17. デフォルトのまま、Next:Tag Instance
18. TagのNameに ‘MosquttoBroker’と設定
19. Next:Cofigure Security Groupsをクリック
20. 新しいSecurity Groupの作成をします。
Security group nameに ‘MosquttoBroker’
Add Ruleで
Custom TCP Rule / TCP /8883 / 0.0.0.0/0を追加
21. Review and Launchをクリックし、EC2 Instanceを作成します
22. EC2が起動したら、EC2に接続してください
23. ログイン後に以下のコマンドを実行してください
AWS IoTへのブリッジ設定方法
これでEC2(もしくはローカルゲートウェイ)へのMosquttoのインストールが完了しました、これよりMosqutto BrokerからAWS IoTへのブリッジの設定となります。
ここからAWS CLIを用いてAWS IoTの必要リソースの設定をしていきます。
ブリッジのクライアント証明書が取得できました。この証明書は、ブリッジにすべてのアクセス許可を与えるIAMポリシーに関連付けられています(このポリシーは、使用するために制限する必要があります)。 ブリッジには接続に必要なものすべてがありますので、Mosquittoの特定のパラメータで設定ファイルを編集するだけです。
以下のコンテンツをnanoエディターに貼り付け、保存をしてください。
AWS IoTのエンドポイントは自分の環境に合わせて変更してください。AWS IoTのエンドポイントはAWS CLIを用いてこのようなコマンドで取得できます。(aws iot describe-endpoint)
変更箇所は addressセクションの(XXXXXXXXXX.iot.region.amazonaws.com)になります。
これでMosquttoを新しい設定で起動する準備が整いました。
Moquttoをバックグラウンドで起動します。
OS起動時の自動設定は以下です。
動作確認
ブローカーが開始され、すでにバックグラウンドでAWS IoTに接続しています。 この設定では、3つのトピックをブリッジしました:
- awsiot_to_localgateway:このトピックからAWS IoTによって受信されたすべてのメッセージは、ローカルゲートウェイに転送されます
- localgateway_to_awsiot:ローカルゲートウェイが受信したメッセージはすべてAWS IoTに転送されます
- both_directions:1つのブローカがこのトピックで受信したメッセージは、他のブローカに転送されます
“localgateway_to_awsiot”の動作確認は簡単に確認出来ます。
- AWS IoTのコンソールからTestを選択します
- Subscribeに “localgateway_to_awsiot” を入力し、Subscribe to Topicをクリックします
subscribeするとメニューのsubscriptionsに”localgateway_to_awsiot”が表示されますので、そちらを選択します。
AWT IoT側でこのトピックをsubscribeしたので、端末から(ローカルゲートウェイから)以下のコマンドでMQTTメッセージを発行して、転送されるかどうかを確認できます。
ブリッジにより、AWS IoTに配信されたメッセージが表示されるはずです。
Amazon EC2インスタンスでテストを行った場合は、ローカル/リモートのMQTTブローカでこれを行うことができます。
ネクストステップ
ローカルブローカーとAWS IoTの間のブリッジが稼働しているので、ブリッジ接続のいくつかのパラメータを微調整することが必要な場合があります。 追加の詳細が必要な場合は、公式のMosquittoのドキュメントのBridgeセクションを参照してください。
AWS IoTにデータが流れているので、機械学習、分析、リアルタイムダッシュボードなど他のAWSサービスを使用して新しいIoTアプリケーションを作成することができます。
これらについてはブログやドキュメント、開発用リソースをご活用ください
原文:How to Bridge Mosquitto MQTT Broker to AWS IoT (Michael Garcia)
翻訳はSA小梁川が担当しました。