AWS IoT 再入門ブログリレー AWS IoT Device Management編

2021.05.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

概要

こんにちは、yoshimです。
本企画は、弊社チームIoTメンバーが初心に返ってIoTサービスについて学びなおし、解説してみようというものです。
本エントリーでは、「IoTデバイスの管理」というとても大変な仕事をサポートしてくれる「AWS IoT Device Management」について紹介します。

目次

1.はじめに

IoT製品を展開するにあたり、デバイスを世の中に展開して以降もデバイスを追跡、監視、管理することは必要不可欠です。
例えば、IoTのデバイス導入や管理をするにあたっては下記の要素が求められます。
参照: AWS IoT Device Managementハンズオン

デバイスの一括登録、デバイスの状態のモニタリング、デバイスのアップデート、トラブルシューティングのためにデバイスにアクセス、等色々な要素が求められ自分で実装するのは非現実的です。
「AWS IoT Device Management」は膨大な数のIoTデバイスの管理を簡単かつ安全に行うことができるようにしてくれるマネジメントサービスです。

上記の要素を満たすために、「AWS IoT Device Management」はどのような機能を提供しているのでしょうか。
AWS IoT Device Management よくある質問を見てみると「AWS IoT Device Managment」は下記の6つの主要なコンポーネントからなると記述していました。

  • 一括登録
  • フリートのインデックス作成と検索
  • きめの細かいログ記録
  • デバイスジョブ
  • セキュアトンネリング
  • Fleet Hub(執筆時点ではプレビュー)

色々な機能がありますね。
以降、各コンポーネントについてざっくり確認していきます。

2.一括登録

AWSでIoTサービスを利用するためには、デバイス情報(ex.デバイスのメタデータ、証明書、ポリシー)をAWS上に登録する必要がありますが、この登録処理を「複数デバイスまとめて実行」する機能です。
必要なパラメータを記載したオブジェクトをS3に格納し、このオブジェクトに記載されたパラメータに基づいてモノの登録がなされます。

下記のエントリーでは、実際にやってみてどのような機能なのかを紹介しています。本機能のイメージを掴みたい方は是非ご覧ください。
AWS IoT Device ManagementのBulk Provisioningを使ってデバイスを一括登録してみた #reinvent

また、余談ですがモノの登録方法には様々な選択肢があります。
AWS IoTにおけるデバイスへの認証情報のプロビジョニングでは、よく使う登録方法だけでも下記のような選択肢がある、と紹介しています。
(参照動画の13:40~くらい)
参照:AWS IoTにおけるデバイスへの認証情報のプロビジョニング

本エントリーではこれ以上言及しませんが、モノの登録方法の詳細について知りたい方はAWS IoTにおけるデバイスへの認証情報のプロビジョニングをご参照ください。

3.フリートのインデックス作成と検索

モノやモノのグループを対象に検索を実現するために、インデックスを作成する機能です。
この機能を利用することで、「検索結果に応じてデバイスジョブやポリシーの一括適用をするためのグループを作成」、「求めたいメトリクスの集計」をすることが可能です。

下記はAWS IoT Device Managementハンズオンで紹介されている、本機能を用いた検索のユースケースのイメージです(10:00~くらい)。
参照:AWS IoT Device Managementハンズオン

こんな便利な機能ですが、インデックスの作成はAWSコンソール画面上からワンクリックで実行可能なのでとても便利ですね。

細かいですが、制限事項も少し見ておきます。
「クエリごとのクエリ結果の最大数」のデフォルト値が500となっており緩和制限もできない(2021年4月時点)ものの、SearchIndexの「nextToken」を使うことでページネーションして全件取得できます。
この点が問題になる場合は、素直にDBにデータを格納するケースも検討してもいいかもしれません。

参照:AWS IoT Device Management エンドポイントとクォータ

4.きめの細かいログ記録

デバイスのログを「Amazon CloudWatch」に出力することができます。
これで何か問題があった場合に、「Amazon CloudWatch」のログからトラブルシューティングしたり、アラートをあげることができます。
また、ログの設定は「AWS IoT全体」、もしくは「特定のモノのグループ」単位で設定できます。

下記はAWS管理コンソールから設定しようとしている画面ですが、下記の通りログの出力レベルも指定できます。

とても便利そうな機能ですが、高トラフィックが検知された場合は自動的にログ設定が無効化されてしまうこともあるそうです。

If you expect high traffic patterns in AWS IoT Core due to load testing, consider turning off IoT logging to prevent throttling. If high traffic is detected, our service may disable logging in your account.

参照:Configure logging role and policy

ログの量が多すぎるとスロットリングのリスクも高まるし、「Amazon CloudWatch」の料金も高くなってしまうので、「その時にAWS上で管理したいログは何か」ということを考えた上で設定するのが良さそうですね。

5.デバイスジョブ

特定の「モノのグループ」に対して、何らかのアクションを実行させる機能です。
この「モノのグループ」は、先述の「3.フリートのインデックス作成と検索」で作成した動的なグループを指定することもでき、ファームウェアのアップデートやデバイスのステータスを通知するようなことが可能です。
トピックとの使い分けのイメージとしては、トピックは普通の業務命令に、デバイスジョブはメンテナンスや運用のために利用するような形が良さそうです。
参照:AWS IoT Device Managementハンズオン

ジョブもその場限りの「スナップショットジョブ」と継続的に実行してくれる「継続ジョブ」の2種類があり、ユースケースによって使い分けることができます。
「継続ジョブ」を使うと、対象としたグループに後から追加されたデバイスに対してもジョブを続行してくれます。
参照:AWS IoT Device Managementハンズオン

また、ジョブの展開や中止についての制御も可能です。
具体的には、「最初はXデバイス/minで初めて、Yデバイス成功したら2X/minのペースでジョブを実行する」といったような制御や、「ジョブのX%以上が失敗したら中止する(Yデバイス以上にジョブが展開された時のみ判定する)」といったような制御ができます。
詳細については下記をご参照ください。
ジョブのロールアウトと中止設定

6.セキュアトンネリング

セキュアトンネリングは、個々のデバイスと安全にリモート通信するための機能です。
「高度なトラブルシューティング」を「分離されたネットワーク上かファイアウォールの背後に存在するデバイス」に対して実行し、「エンドユーザーの体験を維持」するための機能です。
参照:AWS IoT Device Managementハンズオン

「ファイアーウォールやネットワークの制限を通過しやすい≒企業セキュリティポリシーに準拠しやすい」形でリモート通信する点が特徴的です。
(デバイスから「AWS IoT」に発信をかけてセッションをつなぐので、外部からデバイスへの接続はNG、といったケースにも対応できる可能性がある)
接続時のイメージは下記のスライドが参考になります。
参照: AWS re:Invent 2019 Recap IoT アップデート

また、実際にやってみた場合のイメージを掴みたい方は下記のエントリーもご参照ください。

7.Fleet Hub

「Fleet Hub」は、接続済のデバイスを管理するためのフルマネージドなアプリケーションです。
本機能は執筆時点でまだプレビューなので言及しませんが、詳細を把握したい方は下記が参考になります。

8.まとめ

ざっくりとですが、「AWS IoT Device Management」について主要機能を概観しました。
IoTデバイスの管理はとても重要な要素である一方、全てを自分で実装して対応するのは非現実的なので、うまくフルマネージドサービスを利用していきたいですね。

9.参照