🌱

【初心者向け】MQTT/AWS IoT coreについてざっくり解説

に公開

この記事を読むのにかかる目安の時間: およそ10分~15分

はじめに

私自身、最近はテレビを見るよりもWebサービス(SNS・YouTube・オンラインショッピングなど)を長時間利用するようになりました。

このWebサービスの裏側ではHTTP/HTTPSによって、「ブラウザからサーバへリクエストを送る」「サーバからブラウザへレスポンスを返す」という一連のやりとりを繰り返しています。
しかし、IoT機器(温度センサーやスマート家電など)では、もっと小さくリアルタイムにメッセージをやり取りできる通信が望ましいので、「MQTT」という通信プロトコルが活躍しています。

今回MQTTを使いハンズオン2種(PythonでMQTTについて学ぼう, AWS IoT Core 初級ハンズオン)を実践しました。

本記事では「MQTT」と「AWS IoT Core」の概要についてご紹介します。

1. MQTTとは

MQTTは、「モノとモノが情報をやりとりするための、軽くてシンプルな通信ルール(=プロトコル)」で、インターネットにつながる多くのIoTデバイスで使われています。

MQTTの特徴

MQTTの通信パターンは、一対一だけには留まらず、一対多、多対一にも対応できます。デバイス間、デバイスからクラウド、クラウドからデバイスなど、複数の通信シナリオをサポート可能です。

多数のデバイス間で短いメッセージを頻繁に送受信するようなシーンでの活用に適していることから、IoTシステムなどで多く利用されています。

No 特徴 詳細 技術仕様
1 軽量で効率的 ネットワーク帯域幅を最適化、小さなマイクロコントローラーにも適している メッセージヘッダー:2Byte~
(HTTPの場合だと50Byte~)
2 拡張性 数百万台のIoTデバイスと接続するための拡張性を備えている -
3 信頼性 3つの異なるサービスレベル(QoS)を指定可能 QoS0~2(QoS2が最高レベル)
4 セキュリティ セキュアな通信を実現 TLSによるメッセージの暗号化、クライアント認証
5 開発サポート 多くのプログラミング言語で
ライブラリが利用可能
Python 他

※ 参照 PythonでMQTTについて学ぼう(devcontainerによる開発環境構築付き)

またIoTとの相性が非常に良い理由に、以下のような観点が挙げられます。

  • 省電力
    • 常に大量の通信をしないので、バッテリーに優しい
  • ネットが不安定でも対応可能
    • 一時的に切れても再接続で復旧しやすい

MQTTの要素 │ Publisher・Subscriber・Broker

MQTT通信には以下の3つの要素が大きく関わっています。

🔹パブリッシャー(publisher)
🔹ブローカー(broker)
🔹サブスクライバー(subscriber)

画像

MQTTの活用事例

MQTTは、場所を選ばずに小さなメッセージを送ることが可能なため、電気のメーターや山奥の農場で動作している湿度センサー、都会のIoTごみ箱など、さまざまなシーンで実際に活用されています。

画像

2. AWS IoT Coreとは?

AWS IoT Coreは、クラウド上でMQTTのブローカーの役割として動作します。
IoTデバイスをAWSクラウドや他サービスと接続し、安全かつ効率的なメッセージ交換を提供しています。

利用用途としては大きく2つあります。

AWS IoT Coreを使用するメリット

AWS IoT Coreを使用するメリットは下記が挙げられます。

  • MQTTメッセージの受信・配信が可能
  • デバイスの認証・セキュリティ制御が可能
  • Lambda・DynamoDB・S3など他サービスとの連携が可能
  • デバイス状態の記録やリアルタイム分析が可能

AWS IoT Core初級ハンズオンについて

AWSのworkshop studioにて、スライド資料・動画とともに用意されています。

今回私はハンズオンの手順に沿って、仮想デバイスとAWS IoT Coreのセットアップを行い、仮想デバイスから送られたメッセージをAmazon S3へ通知・保存ができました。(下図の黄色の背景部分)

画像
AWS IoT Core 初級ハンズオン

AWS サービス 役割
AWS IoT Device SDK メッセージの送信元(パブリッシャー)
・Cloud Shell で仮想的なデバイスとして動作するプログラムのセットアップを実施
AWS IoT Core メッセージ受信 & 処理
Amazon S3 メッセージの保存先
・Kinesis Data Firehose を介して、メッセージの集約・圧縮を行う

今回パブリッシャーから5秒おきに温度・湿度のメッセージを送り、
Amazon S3にデータを保存するフローを作りました。

おさえておきたい6つの用語

おさえておきたい6つの用語についてまとめました。

1:プロトコル

  • AWS IoT Coreは、制約のあるデバイス向けに設計され、幅広く採用されている軽量メッセージングプロトコルであるMQTTをサポートしています

2:トピック

  • パブリッシャーとサブスクライバー間のマッチングメカニズムとして機能
    • トピック名:送信先を指定
    • トピックフィルター:受信対象を指定
📝Tips1:トピックはどんな文字列?
  • 最低1つの階層(=トピックレベル)を持つ
  • "/"(スラッシュ)で複数(最大8階層)のトピックレベルを連結
  • "$"で始まるトピックは予約されているので使用しない
  • 大文字と小文字は区別される(可能な限り小文字と数字、"-"を使うことが推奨されている)

3:セキュリティ

  • 各デバイスに許可する動作をIoTポリシーとして定義できます
  • デバイスごとに証明書を発行し、アクティブであればAWS IoTに接続可能

4:ルールエンジン

  • トピックに届いたメッセージをSQL文でフィルタ・抽出
  • フィルタ済みデータをもとに、他のAWSサービスや外部サービスとの連携が可能なルールアクションへ接続します

5:ルールアクション

  • ルールエンジンの結果をもとに、他のAWSサービスや外部サービスと連携できます

6:デバイスシャドウ

  • デバイスの状態を把握し管理できます
📝Tips2:デバイスシャドウの状態把握・監視方法についてもう少し詳しく!
  • デバイス
    • 現在の状態をシャドウに通知
    • アプリからの変更要求を取得
  • シャドウ
    • デバイスの現在の状態、変更後の差分をバージョン管理
  • アプリ
    • シャドウから現在の状態を取得
    • 状態変更要求をシャドウに設定

画像

セキュリティ面を確保するために行うこと

セキュリティ面については、ハンズオンで実際に操作したからこそ知れたことが多かったので、下記に概要をまとめます。

  • AWS IoTのエンドポイント作成

    • デバイスがAWS IoT Coreへ接続する際に、セキュリティを確保するために使用されます。
    • デバイスが実行できるアクション(メッセージの公開、サブスクライブ、デバイスシャドウの操作など)を制御し、不正アクセスやデータ漏洩を防ぎます。
  • ログ設定

    • ログレベルは、INFO DEBUG WARN ERRORなどのレベルを詳細に変更・設定ができます。
    • これらのログを設定することによって、ルールエンジンやルールアクションのエラーログが記録されていないか確認でき、デバッグを進めることができます。
  • IoTポリシーの作成・設定

    • Effectでは、アクションが許可されるか拒否されるかを指定します。
    • Actionでは、ポリシーで許可または拒否されているアクションを指定します。
    • Resourceでは、アクションを許可または拒否するリソースを1つ以上指定します。
  • デバイスの証明書を設定

    • あらかじめ証明書の登録をしたデバイスのみ、AWS IoT Coreに接続が可能です。
    • 適切なポリシーを含んでおり、かつアクティブであることが、接続の条件となります。

おわりに

AWS上に構築されたサービスをたくさんの方が安心・快適に使用している裏側には様々な設定があることを、今回のハンズオンを通して実感できました。
お客様のモノづくりやサービス開発のシステム構築でお役に立てるよう、技術や知識を蓄えていきます。

参考

セカンドセレクション

Discussion