AWS IoT Greengrass コアでのデータストリームの管理 - AWS IoT Greengrass

AWS IoT Greengrass コアでのデータストリームの管理

AWS IoT Greengrass ストリームマネージャーを使用すると、大量の IoT データを AWS クラウドに転送することが容易になり、信頼性が向上します。ストリームマネージャーは、データストリームをローカルで処理し、AWS クラウドに自動的にエクスポートします。この機能は、機械学習 (ML) 推論などの一般的なエッジシナリオと統合され、AWS クラウドまたはローカルストレージの送信先にエクスポートされる前にローカルで処理および分析されます。

ストリームマネージャーは、アプリケーション開発を簡素化します。IoT アプリケーションは、カスタムストリーム管理機能を構築する代わりに、標準化されたメカニズムを使用して大量のストリームを処理し、ローカルデータ保持ポリシーを管理できます。IoT アプリケーションは、ストリームの読み書きが可能です。ストレージタイプ、サイズ、データ保持に関するポリシーをストリームごとに定義して、ストリームマネージャーがストリームを処理およびエクスポートする方法を制御できます。

ストリームマネージャーは、断続的または制限された接続環境で動作するように設計されています。帯域幅の使用、タイムアウト動作、コアが接続または切断されたときのストリームデータの処理方法を定義できます。重要なデータの場合は、優先度を設定して、ストリームを AWS クラウドにエクスポートする順序を制御できます。

AWS クラウドでのさらなる処理と分析のために、AWS IoT Analytics および Amazon Kinesis Data Streams への自動エクスポートを設定できます。AWS IoT Analytics では、データに対して高度な分析を実行して、ビジネス上の意思決定や機械学習モデルの改善に役立てることができます。Kinesis Data Streams は、大容量データを集約し、データウェアハウスまたは MapReduce クラスターにロードするためによく使用されます。詳細については、AWS IoT Analytics ユーザーガイドの「AWS IoT Analytics とは」および Amazon Kinesis Developer Guide の「Amazon Kinesis Data Streams とは」を参照してください。

ストリーム管理ワークフロー

IoT アプリケーションは、AWS IoT Greengrass Core SDK を通じてストリームマネージャーと対話します。単純なワークフローでは、AWS IoT Greengrass コア 上で実行されるユーザー定義 Lambda 関数は、時系列温度や圧力メトリクスなどの IoT データを消費します。この Lambda 関数は、データをフィルタリングまたは圧縮してから AWS IoT Greengrass Core SDK を呼び出して、ストリームマネージャーのストリームにデータを書き込むことがあります。ストリームマネージャーは、ストリームに定義されたポリシーに基づいて、ストリームを自動的に AWS クラウドにエクスポートできます。ユーザー定義 Lambda 関数では、ローカルデータベースまたはストレージリポジトリにデータを直接送信することもできます。

IoT アプリケーションには、ストリームの読み書きを行うユーザー定義 Lambda 関数を複数含めることができます。これらのローカル Lambda 関数は、ストリームに対して読み書きを行い、データをローカルでフィルタリング、集約、分析できます。これにより、コアからクラウドまたはローカルの送信先にデータを転送する前に、ローカルイベントに迅速に対応し、貴重な情報を抽出することができます。

次の図に、ワークフローの例を示します。


                ストリームマネージャーのワークフローの図。

簡単なワークフローの作成方法を説明するチュートリアルについては、AWS クラウドへのデータストリームのエクスポート (コンソール) または AWS クラウドへのデータストリームのエクスポート (CLI) を参照してください。

カスタマイズ可能な設定を使用すると、ビジネスニーズと環境の制約に基づいて、ストリームマネージャーがストリームを保存、処理、エクスポートする方法を制御できます。ストリームマネージャーパラメータを設定して、AWS IoT Greengrass コア 上のすべてのストリームに適用されるグループレベルのランタイム設定を定義できます。これらの設定は、Greengrass グループをデプロイした後に有効になります。詳細については、「AWS IoT Greengrass ストリームマネージャーの設定」を参照してください。

ユーザー定義 Lambda 関数は、AWS IoT Greengrass Core SDK で StreamManagerClient を使用して、ストリームを作成および操作します。ストリームが作成されると、Lambda 関数は、送信先、優先度、永続性などのストリームパラメータを定義します。Lambda 関数コードの例など、詳細については、「ストリームを操作するために StreamManagerClient を使用する」を参照してください。

要件

Greengrass ストリームマネージャーには、次の要件が適用されます。

  • ストリームマネージャーを有効にして、AWS IoT Greengrass コアソフトウェア v 1.10 or later を使用する必要があります。詳細については、「AWS IoT Greengrass ストリームマネージャーの設定」を参照してください。

    注記

    ストリームマネージャーは OpenWrt ディストリビューションではサポートされていません。

  • Java 8 ランタイム (JDK 8) をコアにインストールする必要があります。

    • Debian ベースのディストリビューション (Raspbian を含む) または Ubuntu ベースのディストリビューションの場合は、次のコマンドを実行します。

      sudo apt install openjdk-8-jdk
    • Red Hat ベースのディストリビューション (Amazon Linux を含む) の場合は、次のコマンドを実行します。

      sudo yum install java-1.8.0-openjdk

      詳細については、OpenJDK ドキュメントの「How to download and install prebuilt OpenJDK packages」を参照してください。

     

  • ストリームマネージャーには、基本 AWS IoT Greengrass Core ソフトウェアに加えて、最低 70 MB の RAM が必要です。合計メモリ要件は、ワークロードによって異なります。

     

  • ユーザー定義 Lambda 関数は、AWS IoT Greengrass Core SDK を使用してストリームマネージャーと対話する必要があります。AWS IoT Greengrass Core SDK は複数の言語で使用できますが、ストリームマネージャー操作をサポートするのは、次のバージョンのみです。

    • Java SDK (v1.4.0)

    • Python SDK (v1.5.0)

    • Node.js SDK (v1.6.0)

    Lambda 関数ランタイムに対応する SDK のバージョンをダウンロードし、Lambda 関数デプロイパッケージに含めます。

    注記

    AWS IoT Greengrass Core SDK for Python には Python 3.7 以降が必要で、他のパッケージの依存関係があります。詳細については、「Lambda 関数デプロイパッケージを作成する (コンソール)」または「Lambda 関数デプロイパッケージを作成する (CLI)」を参照してください。

  • ストリームのエクスポート先を定義する場合は、エクスポートターゲットを作成し、Greengrass グループロールでエクスポートターゲットにアクセスする権限を付与する必要があります。次のターゲットがサポートされています。

    • Greengrass グループと同じ AWS リージョン内の AWS IoT Analytics のチャネル。AWS IoT Analytics へのエクスポートを許可するには、グループロールで、ターゲットチャネル iotanalytics:BatchPutMessage へのアクセス権限を許可する必要があります。以下に例を示します。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iotanalytics:BatchPutMessage" ], "Resource": [ "arn:aws:iotanalytics:リージョン:account-id:channel/channel_1_name", "arn:aws:iotanalytics:リージョン:account-id:channel/channel_2_name" ] } ] }
    • Greengrass グループと同じ AWS リージョン Amazon Kinesis Data Streams 内のストリーミング。Kinesis Data Streams へのエクスポートを許可するには、グループロールで、ターゲットデータストリームの kinesis:PutRecords アクセス権限を許可する必要があります。以下に例を示します。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:PutRecords" ], "Resource": [ "arn:aws:kinesis:リージョン:account-id:stream/stream_1_name", "arn:aws:kinesis:リージョン:account-id:stream/stream_2_name" ] } ] }

    リソースにきめ細かいアクセス権限または条件付きアクセス権限を付与できます (たとえば、ワイルドカード * 命名スキームを使用)。詳細については、IAM ユーザーガイド の「IAM ポリシーの追加と削除」を参照してください。

データセキュリティ

ストリームマネージャーを使用する場合は、次のセキュリティ上の考慮事項に注意してください。

ローカルデータセキュリティ

AWS IoT Greengrass は、コアデバイス上のコンポーネント間でローカルに保管時または転送中のストリームデータを暗号化しません。

  • 保管時のデータ。ストリームデータは、ストレージディレクトリにローカルに保存されます。データのセキュリティのために、AWS IoT Greengrass は Unix ファイル権限とフルディスク暗号化が有効になっている場合に依存します。オプションの STREAM_MANAGER_STORE_ROOT_DIR パラメータを使用して、ストレージディレクトリを指定できます。後でこのパラメータを変更して別のストレージディレクトリを使用した場合、AWS IoT Greengrass は以前のストレージディレクトリまたはその内容を削除しません。

     

  • ローカルで転送中のデータ。AWS IoT Greengrass は、データソース、Lambda 関数、AWS IoT Greengrass Core SDK、ストリームマネージャー間のローカル転送中のストリームデータを暗号化しません。

     

  • AWS クラウドに転送中のデータ。ストリームマネージャーによって AWS クラウドにエクスポートされたデータストリームは、Transport Layer Security (TLS) を使用した標準 AWS サービスクライアント暗号化を使用します。

クライアント認証

ストリームマネージャークライアントは、AWS IoT Greengrass Core SDK を使用してストリームマネージャーと通信します。クライアント認証が有効になっている場合、Greengrass グループの Lambda 関数だけがストリームマネージャーのストリームと対話できます。クライアント認証が無効になっている場合、Greengrass コアで実行されているプロセス (Docker コンテナなど) は、ストリームマネージャーのストリームと対話できます。ビジネスケースで要求される場合にのみ、認証を無効にする必要があります。

クライアント認証モードを設定するには、STREAM_MANAGER_AUTHENTICATE_CLIENT パラメータを使用します。このパラメータは、コンソールまたは AWS IoT Greengrass API から設定できます。変更は、グループがデプロイされた後に有効になります。

  有効 無効

パラメータ値

true (デフォルトおよび推奨)

false

許可されるクライアント

Greengrass グループのユーザー定義 Lambda 関数

Greengrass グループのユーザー定義 Lambda 関数

Greengrass コアデバイスで実行されているその他のプロセス

以下の資料も参照してください。