AWS IoT 再入門ブログリレー AWS IoT Things Graph編

2021.05.11

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

概要

こんにちは、yoshimです。
本企画は、弊社チームIoTメンバーが初心に返ってIoTサービスについて学びなおし、解説してみようというものです。
本エントリーでは、「IoTアプリケーション開発を視覚的にサポートする」という、とても楽しそうなサービスである「AWS IoT Things Graph」について紹介します。

目次

1.はじめに

IoTを活用したアプリケーションを開発する際、下記のような問題への対応を考慮する必要があります。

  • 規格の違い
    • デバイスやアプリケーションが複数の規格を持つことへの対応
  • 処理フロー制御
    • 意図した通りに処理フローを制御するのが大変
  • デプロイ
    • エッジへのデプロイ
  • モニタリング
    • パフォーマンスの計測

参照: How To Visually Develop IoT Applications with AWS IoT Things Graph - AWS Online Tech Talks

今回ご紹介する「AWS IoT Things Graph」は上記の問題を解消するために様々な機能を提供しています。
下記は「AWS IoT Things Graph」を構成する主要な要素です。
参照: How To Visually Develop IoT Applications with AWS IoT Things Graph - AWS Online Tech Talks

それぞれの要素がどんなものか、下記にざっくり説明を記述します。

要素 説明
Visual UI 視覚的に処理フローを開発できるUI
Models デバイスを抽象化&定義(ex.機能、状態の値)する
Run at the Edge 「AWS IoT Greengrass」をインストールしたデバイスに対して、フローを簡単にデプロイできる
Monitor Flows フローの処理状況を監視できる

以下、各要素についてもう少し詳細を確認していきます。

2.Visual UI

「AWS IoT Things Graph」はIoTデバイスを用いたアプリケーションを視覚的に開発するための機能を提供しています。
下記は実際の開発画面です。
画面右側には、「デバイス」、「サービス」、「論理」の3項目が存在し、これらをドラッグ&ドロップ等GUIでアプリケーションを開発できます。

「デバイス」は事前に用意されているものもあるものの、自分で必要な定義を登録することになると思います。
(「デバイス」の定義については「3.Models」で言及します)

「サービス」では事前に用意された機能をフローに簡単に組み込むことができます。
本エントリー執筆時点では、下記の4つのサービスが利用可能です。

- Rekognition
  - Amazon Rekognitionの「DetectFaces API」を実行
- getS3Lambda
  - S3のgetObjectを実行するLambdaを起動
- wordCountLambda
  - テキストを渡すと「単語の種類数」、「最も多く登場した単語」、「最も多く登場した単語の登場回数」を返却するLambdaを実行する
- saveResponseLambda
  - wordCountLambdaの処理結果をS3に格納するLambdaを起動

参照: Example device and service definitions

「論理」では下記2機能が利用できます。
便利ですね。

- Choice
  - IF-ELSE、ANDによる制御
- Clock
  - 決められた時間にトリガーを起動

参照: Using conditional logic in choice nodes

3.Models

「Models」とは、デバイスや概念を抽象化して表現したものです。
(ex. 電球はどの規格/メーカーの商品であろうと、「色」や「電源をON/OFFにする機能」があったりしますね)

ここで言う「概念」の種類は本エントリーでは紹介しきれないくらいにありますが、ご確認したい方はAWS IoT Things Graph Data Model and GraphQLをご参照ください。

また、モデルを定義する際は「URN ID」を指定する必要があります。
「URN ID」はモデル中の定義情報を階層的に管理するためのもので、下記の通り5つの要素からなります。
(最初の2要素は固定値です)
参照: URN ID scheme

また、「namespace」は下記のようなルールで命名される点に注意してください。

The namespace consists of your AWS Region, your account ID, and a fixed suffix default. The pattern is REGION/ACCOUNT ID/default. For example, a TDM entity created in the us-west-2 region looks like this: us-west-2/012345678910/default.

参照: Namespaces

また、このモデルの定義も慣れてくるまでは大変です。
(コンソール画面上で作成しようとして何回もエラーで怒られて...)
慣れるまでは、aws-iot-things-graph-user-guideで公開されている様々なモデルの定義を参考にするといいと思います。

4.Run at the Edge

「AWS IoT Things Graph」で開発したアプリケーションをエッジデバイスにデプロイできます。
参照: How To Visually Develop IoT Applications with AWS IoT Things Graph - AWS Online Tech Talks

もう少し具体的に言うと、「AWS IoT Things Graph」で開発した「フロー設定」を「AWS IoT Greengrassがインストールされたデバイス」にデプロイできます。
(デバイス側で事前にこちらの設定をする必要があります)
実際に手を動かして試してみたい方にはAWS IoT Greengrass flow examplesがオススメです。

デバイス間の通信プロトコルとしては「MQTT」と「Modbus」がサポートされています。
また、「AWS IoT Greengrassがインストールされたデバイス」にデプロイするための前提条件がこちらに整理されているので記述します。

  • 「AWS IoT Greengrass group」、「S3 bucket」、「AWS IoT Things Graph entities」は全て同じリージョンに存在する
  • 「AWS IoT Greengrass core」のバージョンが1.7以降
  • 「thingsgraph」というディレクトリがroot配下に存在する
    • フロー設定はこのディレクトリにインストールされる
  • Greengrassがインストールされているデバイスが、S3バケットにアクセスできる
    • フロー設定はS3からインストールする

5.Monitor Flows

デプロイした「フロー設定」のモニタリングも可能です。
下記のようにcloudWatchと連携することで、いつどのくらいフローが実行されたか、等の基本的なメトリクスを確認できます。
参照: How To Visually Develop IoT Applications with AWS IoT Things Graph - AWS Online Tech Talks

また、上記とは別に下記のような管理画面もあり、フローの実行時のpayloadも確認することができます。
参照: AWS IoT Things Graphで遊んでみた

6.まとめ

「AWS IoT Things Graph」についてまとめてみました。
視覚的にアプリケーションを開発できるだけでなく、その後のデプロイやモニタリングもできる優れたサービスです。
本エントリーが「AWS IoT Things Graph」について調べている方の一助になれば幸いです。

7.参照