📝

AWS IoT Coreってなんだろ?

5 min read

AWS IoT Coreというサービスがありますが、「IoTの開発に使うんだろう」ぐらいにしか思っておらず、実際にどんなサービスなのか知らないので調べてみました。

image.png

AWS公式

AWS IoT Core(デバイスをクラウドに接続)| AWSより

AWS IoT Core とは何ですか?

AWS IoT Core を使用すれば、IoT デバイスを AWS クラウドに接続できます。サーバーをプロビジョニングまたは管理する必要はありません。AWS IoT Core では数十億個のデバイスと数兆件のメッセージをサポートしており、それらのメッセージを AWS エンドポイントや他のデバイスに確実かつセキュアに処理してルーティングします。AWS IoT Core を使用すれば、アプリケーションがインターネットに接続されていない場合でも、すべてのデバイスを常に追跡して通信できます。

IoT機器とAWSをつないで、データをやり取りするためのサービスのようです。
サーバーの管理不要なので、フルマネージドサービスですね。

AWS IoT Core を使用すると、AWS と AWS Lambda、Amazon Kinesis、Amazon S3、Amazon SageMaker、Amazon DynamoDB、Amazon CloudWatch、AWS CloudTrail、Amazon QuickSight、および Alexa Voice Service といった Amazon のサービスを簡単に使用して、インフラストラクチャの管理をせずに、接続されたデバイスで生成されたデータを収集、処理、分析し、そのデータに基づいてアクションを起こす IoT アプリケーションを構築できます。

インフラ管理が不要ということで、サーバレスなサービスとの連携というイメージでしょうか。集めたデータや分析結果からアクションを起こすこともできるようです。

利点

サーバーを管理せずにデバイスを接続および管理する

AWS IoT Core を使用すると、任意の数のデバイスをクラウドや他のデバイスに接続できます。サーバーをプロビジョニングまたは管理する必要はありません。AWS IoT Core を使用すれば、デバイスフリートを簡単かつ確実にスケーリングできます。

セキュアなデバイスの接続とデータ

AWS IoT Core では、デバイスを初めて AWS IoT Core に接続するときの自動化された構成と認証を行うのみならず、接続するすべてのポイントで認証とエンドツーエンドの暗号化を提供しているため、デバイスと AWS IoT Core との間でアイデンティティが証明されたデータのみが交換されます。さらに、詳細なアクセス許可のポリシーを適用することによって、デバイスとアプリケーションにセキュアにアクセスできます。

全てのポイントで暗号化しているというところがポイントでしょうか。

ご希望の接続プロトコルを選択してください

AWS IoT Core を使用すると、IoT デバイスを接続および管理するためのユースケースに最も適した通信プロトコルを選択できます。AWS IoT Core は、MQTT (メッセージキューとテレメトリトランスポート)、HTTPS (ハイパーテキスト転送プロトコル - セキュア)、MQTT over WSS (WebSockets セキュア)、および LoRaWAN (低電力長距離広域ネットワーク) をサポートします。

デバイスデータの処理と実行

AWS IoT Core を使用すると、定義したビジネスルールに基づいて、デバイスデータを迅速にフィルタリング、変換、実行できます。いつでもルールを更新して、新しいデバイスやアプリケーションの機能を実装できます。

処理のルールを作成でき、ルールはいつでも更新できるみたいです。

ミラーデバイスの状態

AWS IoT Core では Device Shadow を使用して、いつでも読み取りや設定を行えるよう、接続されたデバイスの最新の状態が保存され、アプリケーションにはデバイスが常にオンラインであるかのように表示されます。つまり、接続が切断された場合でもアプリケーションでデバイスの状態を読み取ることができ、デバイスが再接続された時にデバイスの状態を設定して実装することができます。

オンライン時にデバイスの最新状態をIoT Coreに保存し、オフライン時はアプリからデバイスを読み取り、またオンラインになったら最新の状態にするようです。

よくある質問

こちらでも概要や詳細が記載されていますので、併せてご覧下さい。
よくある質問 - AWS IoT Core | AWS

その他の記事

【入門】AWS IoT Coreを理解するために必要な6つのポイント | DevelopersIO

以下の6つがポイントのようです。
・メッセージブローカー(プロトコル)
・メッセージブローカー(トピック)
・セキュリティ&アイデンティティ
・ルールエンジン
・アクション
・デバイスシャドウ

image.png

メッセージブローカー(プロトコル)

AWS IoT Core側でデバイスからのメッセージを受け取る際に複数のプロトコルがあります。
具体的なプロトコルとしてはHTTPS、MQTT、MQTT over WebSocketがサポートされています。

IoT Coreがメッセージを受け取るときの4つのプロトコルですね。

メッセージブローカー(トピック)

WebAPIでいうエンドポイントに当たる部分です。トピックを設定することで受信対象を識別することができます。
トピックに設定したURIに向けてデバイス側が送信を行うことでデータの受信ができます。

トピックごとに通信先を変えて使うイメージでしょうか。

セキュリティ&アイデンティティ

AWS IoT Coreでは、デバイスの認証情報とポリシーを管理できます。
証明書の管理自体はAWS IoTで生成することも可能ですし、独自の証明書を登録して使用することもできます。ポリシーはIAM ポリシーと同じルールで管理されます。
AWS IoT Coreに接続した際に証明書で認証して、認可はポリシーで管理できます。

証明書の管理、インポートやIAMとの連携も可能とのことです。
証明書で認証、IAMポリシーで認可と書かれています。

ルールエンジン

SQLベースの文法でトピックにきた値を整形・追記、フィルタリングしてデータの受け渡しができます。ここで取得したデータをアクションに流すことで、AWS内部の別のサービスにデータを送ることができます。
中身はSQLベースのクエリでFROM句の部分に取得するトピックを指定して、アクションに渡したい内容をSELECT句で指定できます。またトピックから取得するデータをWHERE句でフィルタリングすることなどもできます。

データのフィルタリングはSQLベースなんですね。
image.png
AWS Black Belt Tech シリーズ 2015 - AWS IoTより

アクション

AWS IoT Core からAWS内部の別のサービスに繋ぐアクションを設定できます。
現在は、AWS Lambda、Amazon Kinesis、Amazon S3、Amazon SageMaker、Amazon DynamoDB、Amazon SNS、Amazon SQS、Amazon CloudWatch、AWS CloudTrail、Amazon QuickSight、Alexa Voice ServiceなどAWSサービスへの接続や外部のWebサービスにメッセージ送信ができます。それぞれのサービスを動かすためには処理に必要となるロールをアクションに対してアタッチする必要があります。

AWSサービスだけじゃなくて、外部のWebサービスともやり取りできるんですね。

デバイスシャドウ

デバイスシャドウは、IoT Coreに接続するデバイスの現在の状態を保存したり取得する際に使います。
データの実態はJSON形式で保存されています。名前通りデバイスに対する影のようなもので、デバイスの状態(電灯のIoTであれば電気のOn・Offなど)をJSONで管理します。デバイス側とAWS側で状態を相互に伝える際にはシャドウを介してやりとりすることで、デバイスのネットワーク接続が途切れていてもデバイスの状態をAWS側で保持してネットワーク接続時にデバイスへ反映することができます。

デバイスがオフライン時にもAWS側ではデータが失われずに済む仕組みのようです。

一連の流れのまとめ

  1. デバイスがトピックに向けてMQTTでパブリッシュ
  1. 証明書やポリシーで認証・認可をチェック
  2. シャドウにデータが流れてシャドウを更新
  3. デフォルトの設定でシャドウ更新時に特定のトピックへ向けてパブリッシュ
  4. トピックを対象にいれているルールクエリが起動
  5. ルールクエリに基づいてデータを抽出
  6. DynamoDBにルールクエリで抽出したデータを反映するアクションを実行
    image.png

まとめ

今回はAWS IoT Coreについて調べてみました。
以下がポイントでした。

  • IoT機器とAWSでデータをやり取りするフルマネージドサービス
  • 全てのポイントで暗号化
  • メッセージブローカーのプロトコルはHTTPS、MQTT、MQTT over WebSocketの4つ
  • デバイスがデータを送信するエンドピントがトピック
  • 証明書の管理やIAMとの連携も可能で、証明書で認証、IAMポリシーで認可
  • SQLベースでデータをフィルタリングして、アクションにつなげる
  • デバイスシャドウでデバイスの現在の状態を保存、取得し、オフラインに対応

どなたかの参考になれば幸いです。

Discussion

ログインするとコメントできます