IoT Analytics コネクタ - AWS IoT Greengrass

AWS IoT Greengrass Version 1 は、2023 年 6 月 30 日に延長ライフサイクルフェーズに入りました。詳細については、「AWS IoT Greengrass V1 メンテナンスポリシー」を参照してください。この日付を過ぎる AWS IoT Greengrass V1 と、 は機能、機能強化、バグ修正、セキュリティパッチを提供する更新プログラムをリリースしません。で実行されるデバイスは中断 AWS IoT Greengrass V1 されず、引き続き動作し、クラウドに接続します。に移行する AWS IoT Greengrass Version 2ことを強くお勧めします。これにより、重要な新機能が追加され、追加のプラットフォームのサポートが追加されます

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

IoT Analytics コネクタ

警告

このコネクタは延長ライフサイクルフェーズに移行しており、AWS IoT Greengrass では、機能、既存機能の拡張、セキュリティパッチ、バグ修正を提供するアップデートはリリースされません。詳細については、「AWS IoT Greengrass Version 1 メンテナンスポリシー」を参照してください。

IoT Analytics コネクタは AWS IoT Analytics にローカルデバイスデータを送信します。このコネクタを中央ハブとして使用して、Greengrass コアデバイスのセンサーおよび接続されたクライアントデバイスからデータを収集できます。コネクタは 現在の AWS アカウントおよびリージョンの AWS IoT Analytics チャネルにデータを送信します。デフォルトの送信先チャネルおよび動的に指定されたチャネルにデータを送信できます。

注記

AWS IoT Analytics は、IoT データを収集、保存、処理、クエリできるフルマネージド型サービスです。AWS IoT Analytics では、データをさらに分析、処理できます。例えば、マシンの健全性をモニタリングするために ML モデルをトレーニングしたり、新しいモデリング戦略をテストしたりするために使用できます。詳細については、AWS IoT Analytics ユーザーガイドの「AWS IoT Analytics とは何か」を参照してください。

コネクタは、MQTT トピックの書式設定されたデータおよび書式設定されていないデータを受け入れます。送信先チャネルがインラインで指定された、2 つの事前定義されたトピックがサポートされます。また、サブスクリプションで設定された、お客様定義のトピックでメッセージを受信できます。これは、固定トピックに発行するクライアントデバイスからメッセージをルーティングしたり、リソースに制約のあるデバイスから、構造化されていないデータやスタックに依存したデータを処理したりするために使用できます。

このコネクタは、BatchPutMessage API を使用して、データ (JSON または base64 エンコードされた文字列) を送信先チャネルに送信します。コネクタは、raw データを API の要件に準拠した形式に処理できます。コネクタは入力メッセージをチャネルごとのキューにバッファし、非同期的にバッチを処理します。また、クエリおよびバッチ動作を制御し、メモリ使用を制限するパラメータを提供します。例えば、最大キューサイズ、バッチ間隔、メモリサイズ、アクティブなチャネルの数を設定できます。

このコネクタには、次のバージョンがあります。

バージョン

ARN

4

arn:aws:greengrass:region::/connectors/IoTAnalytics/versions/4

3

arn:aws:greengrass:region::/connectors/IoTAnalytics/versions/3

2

arn:aws:greengrass:region::/connectors/IoTAnalytics/versions/2

1

arn:aws:greengrass:region::/connectors/IoTAnalytics/versions/1

バージョンの変更については、「Changelog」を参照してください。

要件

このコネクタには以下の要件があります。

Version 3 - 4
  • AWS IoT Greengrass Core ソフトウェア v1.9.3 以降。

  • Python バージョン 3.7 または 3.8 が Core デバイスにインストールされ、PATH 環境変数に追加されている。

    注記

    Python 3.8 を使用するには、次のコマンドを実行して、Python 3.7 のデフォルトのインストールフォルダからインストール済みの Python 3.8 バイナリへのシンボリックリンクを作成します。

    sudo ln -s path-to-python-3.8/python3.8 /usr/bin/python3.7

    これにより、AWS IoT Greengrass の Python 要件を満たすようにデバイスが設定されます。

  • このコネクタは、AWS IoT Greengrass および AWS IoT Analytics の両方がサポートされているアマゾン ウェブ サービスリージョンでのみ使用できます。

  • 関連するすべての AWS IoT Analytics エンティティとワークフローが作成され、設定されます。エンティティには、チャネル、パイプライン、データストア、およびデータセットが含まれます。詳細については、「AWS IoT Analytics ユーザーガイド」の AWS CLI またはコンソールの手順を参照してください。

    注記

    送信先 AWS IoT Analytics チャネルは、同じアカウントを使用する必要があり、このコネクタと同じ AWS リージョンにある必要があります。

  • 以下の IAM ポリシーの例に示すように、送信先チャネルに対する iotanalytics:BatchPutMessage アクションを許可するために Greengrass グループロールが設定されている。このチャネルは、現在の AWS アカウントとリージョンに存在する必要があります。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1528133056761", "Action": [ "iotanalytics:BatchPutMessage" ], "Effect": "Allow", "Resource": [ "arn:aws:iotanalytics:region:account-id:channel/channel_1_name", "arn:aws:iotanalytics:region:account-id:channel/channel_2_name" ] } ] }

    グループロール要件では、必要なアクセス許可を付与するようにロールを設定し、ロールがグループに追加されていることを確認する必要があります。詳細については、「Greengrass グループロールの管理 (コンソール)」または「Greengrass グループロールの管理 (CLI)」を参照してください。

Versions 1 - 2
  • AWS IoT Greengrass Core ソフトウェア v1.7 以降。

  • Python バージョン 2.7 が Core デバイスにインストールされ、PATH 環境変数に追加されている。

  • このコネクタは、AWS IoT Greengrass および AWS IoT Analytics の両方がサポートされているアマゾン ウェブ サービスリージョンでのみ使用できます。

  • 関連するすべての AWS IoT Analytics エンティティとワークフローが作成され、設定されます。エンティティには、チャネル、パイプライン、データストア、およびデータセットが含まれます。詳細については、「AWS IoT Analytics ユーザーガイド」の AWS CLI またはコンソールの手順を参照してください。

    注記

    送信先 AWS IoT Analytics チャネルは、同じアカウントを使用する必要があり、このコネクタと同じ AWS リージョンにある必要があります。

  • 以下の IAM ポリシーの例に示すように、送信先チャネルに対する iotanalytics:BatchPutMessage アクションを許可するために Greengrass グループロールが設定されている。このチャネルは、現在の AWS アカウントとリージョンに存在する必要があります。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1528133056761", "Action": [ "iotanalytics:BatchPutMessage" ], "Effect": "Allow", "Resource": [ "arn:aws:iotanalytics:region:account-id:channel/channel_1_name", "arn:aws:iotanalytics:region:account-id:channel/channel_2_name" ] } ] }

    グループロール要件では、必要なアクセス許可を付与するようにロールを設定し、ロールがグループに追加されていることを確認する必要があります。詳細については、「Greengrass グループロールの管理 (コンソール)」または「Greengrass グループロールの管理 (CLI)」を参照してください。

パラメータ

MemorySize

このコネクタに割り当てるメモリ量 (KB 単位)。

AWS IoT コンソールでの表示名: [Memory size] (メモリサイズ)

必須: true

タイプ: string

有効なパターン: ^[0-9]+$

PublishRegion

AWS IoT Analytics チャネルが作成された AWS リージョン。コネクタと同じリージョンを使用します。

注記

これは、グループロールで指定されたチャネルのリージョンに一致する必要があります。

AWS IoT コンソールでの表示名: [Publish region] (発行リージョン)

必須: false

タイプ: string

有効なパターン: ^$|([a-z]{2}-[a-z]+-\\d{1})

PublishInterval

受信したデータのバッチを AWS IoT Analytics に発行する間隔 (秒単位)。

AWS IoT コンソールでの表示名: [Publish interval] (発行間隔)

必須: false

タイプ: string

デフォルト値: 1

有効なパターン: $|^[0-9]+$

IotAnalyticsMaxActiveChannels

コネクタがアクティブに監視する AWS IoT Analytics チャネルの最大数。これは 0 より大きい必要があり、少なくとも、コネクタが同時に発行することが予期されるチャネル数と同じである必要があります。

このパラメータを使用すると、コネクタが同時に管理できるキューの合計数を限定して、メモリ消費量を制限することができます。キューに入れられたすべてのメッセージが送信されると、キューは削除されます。

AWS IoT コンソールでの表示名: [Maximum number of active channels] (アクティブなチャネルの最大数)

必須: false

タイプ: string

デフォルト値: 50

有効なパターン: ^$|^[1-9][0-9]*$

IotAnalyticsQueueDropBehavior

キューがいっぱいであるときに、チャネルキューからメッセージを削除する動作。

AWS IoT コンソールでの表示名: [Queue drop behavior] (キューの削除動作)

必須: false

タイプ: string

有効な値: DROP_NEWEST または DROP_OLDEST

デフォルト値: DROP_NEWEST

有効なパターン: ^DROP_NEWEST$|^DROP_OLDEST$

IotAnalyticsQueueSizePerChannel

メッセージが送信または削除される前に、メモリに保持するされるメッセージの最大数 (1 チャネルあたり)。0 より大きくする必要があります。

AWS IoT コンソールでの表示名: [Maximum queue size per channel] (チャネルあたりの最大キューサイズ)

必須: false

タイプ: string

デフォルト値: 2048

有効なパターン: ^$|^[1-9][0-9]*$

IotAnalyticsBatchSizePerChannel

1 つのバッチリクエストで AWS IoT Analytics チャネルに送信するメッセージの最大数。0 より大きくする必要があります。

AWS IoT コンソールでの表示名: [Maximum number of messages to batch per channel] (チャネルあたりのバッチへのメッセージの最大数)

必須: false

タイプ: string

デフォルト値: 5

有効なパターン: ^$|^[1-9][0-9]*$

IotAnalyticsDefaultChannelName

お客様定義の入力トピックに送信されるメッセージに対して、このコネクタが使用する AWS IoT Analytics チャネルの名前。

AWS IoT コンソールでの表示名: [Default channel name] (デフォルトのチャンネル名) 

必須: false

タイプ: string

有効なパターン: ^[a-zA-Z0-9_]$

IsolationMode

このコネクタのコンテナ化モード。デフォルトは GreengrassContainer です。つまり、コネクタは AWS IoT Greengrass コンテナ内の分離されたランタイム環境で実行されます。

注記

グループの既定のコンテナ化設定は、コネクタには適用されません。

AWS IoT コンソールでの表示名: [Container isolation mode] (コンテナ分離モード) 

必須: false

タイプ: string

有効な値: GreengrassContainer または NoContainer

有効なパターン: ^NoContainer$|^GreengrassContainer$

サンプルコネクタを作成する (AWS CLI)

以下の CLI コマンドは、IoT Analytics コネクタを含む初期バージョンで ConnectorDefinition を作成します。

aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyIoTAnalyticsApplication", "ConnectorArn": "arn:aws:greengrass:region::/connectors/IoTAnalytics/versions/3", "Parameters": { "MemorySize": "65535", "PublishRegion": "us-west-1", "PublishInterval": "2", "IotAnalyticsMaxActiveChannels": "25", "IotAnalyticsQueueDropBehavior": "DROP_OLDEST", "IotAnalyticsQueueSizePerChannel": "1028", "IotAnalyticsBatchSizePerChannel": "5", "IotAnalyticsDefaultChannelName": "my_channel" } } ] }'
注記

このコネクタの Lambda 関数には存続期間の長いライフサイクルがあります。

AWS IoT Greengrass コンソールでは、グループの [Connectors] (コネクタ) ページからコネクタを追加できます。詳細については、「Greengrass コネクタの開始方法 (コンソール)」を参照してください。

入力データ

このコネクタは、事前定義またはお客様定義の MQTT トピックでデータを受け入れます。発行者は、クライアントデバイス、Lambda 関数、またはその他のコネクタとすることができます。

事前定義されたトピック

コネクタは、発行者がチャネル名をインラインで定義できる、次の 2 つの構造化された MQTT トピックをサポートします。

  • iotanalytics/channels/+/messages/put トピックのフォーマットされたメッセージ これらの入力メッセージの IoT データは、JSON または base64 でエンコードされた文字列としてフォーマットされる必要があります。

  • iotanalytics/channels/+/messages/binary/put トピックのフォーマットされていないメッセージ このトピックで受信された入力メッセージはバイナリデータとして扱われ、任意のデータ型を含めることができます。

    事前定義されたトピックに発行するには、+ ワイルドカードをチャンネル名で置き換えます。例:

    iotanalytics/channels/my_channel/messages/put
お客様定義のトピック

コネクタは # トピック構文をサポートします。これにより、サブスクリプションで設定する任意の MQTT トピックで入力メッセージを受け入れることができます。サブスクリプションでは、# ワイルドカードのみを使用する代わりに、トピックパスを指定することをお勧めします。これらのメッセージは、コネクタに指定したデフォルトのチャネルに送信されます。

お客様定義のトピックの入力メッセージはバイナリデータとして処理されます。任意のメッセージ形式を使用し、任意のデータ型を含めることができます。お客様定義のトピックを使用すると、固定されたトピックに発行するデバイスからメッセージをルーティングできます。また、それらのトピックを使用して、データを処理できないクライアントデバイスから入力データをフォーマットされたメッセージに受け入れ、コネクタに送信することもできます。

サブスクリプションと MQTT トピックの詳細については、「入力と出力」を参照してください。

グループロールは、すべての送信先チャネルで iotanalytics:BatchPutMessage アクションを許可する必要があります。詳細については、「要件」を参照してください。

トピックのフィルター: iotanalytics/channels/+/messages/put

このトピックを使用して、フォーマットされたメッセージをコネクタに送信し、動的に送信先チャネルを指定します。このトピックでは、応答出力で返される ID を指定することもできます。コネクタは、AWS IoT Analytics に送信するアウトバウンド BatchPutMessage リクエストで、各メッセージの固有の ID を検証します。ID が重複しているメッセージは削除されます。

このトピックに送信される入力データは、次のメッセージ形式を使用します。

メッセージのプロパティ
request

指定されたチャンネルに送信するデータ。

必須: true

タイプ: object。以下のプロパティを含みます。

message

デバイスまたはセンサーデータ (JSON または base64 でエンコードされた文字列)。

必須: true

タイプ: string

id

リクエストの任意の ID。このプロパティでは、入力リクエストを出力レスポンスにマッピングします。指定すると、レスポンスオブジェクトの id プロパティはこの値に設定されます。このプロパティを省略する場合は、コネクタによって ID が生成されます。

必須: false

タイプ: string

有効なパターン: .*

入力例
{ "request": { "message" : "{\"temp\":23.33}" }, "id" : "req123" }
トピックのフィルター: iotanalytics/channels/+/messages/binary/put

このトピックを使用して、フォーマットされていないメッセージをコネクタに送信し、動的に送信先チャネルを指定します。

コネクタのデータにより、このトピックで受信された入力メッセージは解析されません。これは、バイナリデータとして扱われます。AWS IoT Analytics にメッセージを送信する前にコネクタはメッセージをエンコードし、BatchPutMessage API の要件に準拠するようにフォーマットします。

  • コネクタは base64 で raw データをエンコードし、エンコードされたペイロードをアウトバウンド BatchPutMessage リクエストに含めます。

  • コネクタは ID を生成し、各入力メッセージに割り当てます。

    注記

    コネクタのレスポンス出力には、これらの入力メッセージの ID 相関は含まれません。

メッセージのプロパティ

なし。

トピックのフィルター: #

このトピックを使用して、任意のメッセージ形式をデフォルトのチャネルに送信します。これが特に役立つのは、クライアントデバイスが固定されたトピックに発行するときや、コネクタでサポートされているメッセージ形式にデータを処理できないクライアントデバイスからデフォルトのチャネルにデータを送信する場合です。

トピック構文は、このコネクタをデータソースに接続するために作成するサブスクリプションで定義します。サブスクリプションでは、# ワイルドカードのみを使用する代わりに、トピックパスを指定することをお勧めします。

コネクタのデータにより、この入力トピックに公開されるメッセージは解析されません。すべての入力メッセージはバイナリデータとして扱われます。AWS IoT Analytics にメッセージを送信する前にコネクタはメッセージをエンコードし、BatchPutMessage API の要件に準拠するようにフォーマットします。

  • コネクタは base64 で raw データをエンコードし、エンコードされたペイロードをアウトバウンド BatchPutMessage リクエストに含めます。

  • コネクタは ID を生成し、各入力メッセージに割り当てます。

    注記

    コネクタのレスポンス出力には、これらの入力メッセージの ID 相関は含まれません。

メッセージのプロパティ

なし。

出力データ

このコネクターは、MQTT トピックで出力データとしてステータス情報を発行します。この情報には、AWS IoT Analytics との間で送受信される各入力メッセージに対して AWS IoT Analytics で返される応答が含まれます。

サブスクリプションのトピックフィルター

iotanalytics/messages/put/status

出力例: 成功
{ "response" : { "status" : "success" }, "id" : "req123" }
出力例: 失敗
{ "response" : { "status" : "fail", "error" : "ResourceNotFoundException", "error_message" : "A resource with the specified name could not be found." }, "id" : "req123" }
注記

コネクタが再試行可能なエラー (接続エラーなど) を検出した場合は、次のバッチ処理で再発行を試します。エクスポネンシャルバックオフは、AWS SDK によって処理されます。再試行可能なエラーが発生したリクエストは、チャネルキューに再度追加され、IotAnalyticsQueueDropBehavior パラメータに従ってさらに発行できます。

使用例

コネクタの試用に利用できる Python 3.7 Lambda 関数の例を設定するには、次のステップ (概要) を使用します。

注記
  1. コネクタの要件を満たしていることを確認します。

    グループロール要件では、必要なアクセス許可を付与するようにロールを設定し、ロールがグループに追加されていることを確認する必要があります。詳細については、「Greengrass グループロールの管理 (コンソール)」または「Greengrass グループロールの管理 (CLI)」を参照してください。

  2. 入力データをコネクタに送信する Lambda 関数を作成して発行します。

    サンプルコードを PY ファイルとして保存します。AWS IoT Greengrass Core SDK for Python をダウンロードして解凍します。次に、PY ファイルとルートレベルの greengrasssdk フォルダを含む zip パッケージを作成します。この zip パッケージは、AWS Lambda にアップロードするデプロイパッケージです。

    Python 3.7 Lambda 関数を作成したら、関数バージョンを公開し、エイリアスを作成します。

  3. Greengrass グループを設定します。

    1. エイリアスで Lambda 関数を追加します (推奨)。Lambda ライフサイクルを長期間有効に (または CLI で "Pinned": true に) 設定します。

    2. コネクタを追加し、そのパラメータを設定します。

    3. コネクタが入力データを受信し、サポートされているトピックフィルターで出力データを送信できるようにするサブスクリプションを追加します。

      • Lambda 関数をソースに、コネクタをターゲットに設定し、サポートされている入力トピックフィルターを使用します。

      • コネクタをソースとして、AWS IoT Core をターゲットとして設定し、サポートされている出力トピックフィルターを使用します。このサブスクリプションを使用して、AWS IoT コンソールでステータスメッセージを表示します。

  4. グループをデプロイします。

  5. AWS IoT コンソールの [Test] (テスト) ページで、出力データトピックをサブスクライブして、コネクタからのステータスメッセージを表示します。この例の Lambda 関数は長期間有効であり、グループがデプロイされた直後にメッセージの送信を開始します。

    テストが終了したら、Lambda ライフサイクルをオンデマンドに (または CLI で "Pinned": false に) 設定して、グループをデプロイできます。これにより、関数がメッセージの送信を停止します。

次の例では、Lambda 関数で入力メッセージをコネクタに送信します。

import greengrasssdk import time import json iot_client = greengrasssdk.client('iot-data') send_topic = 'iotanalytics/channels/my_channel/messages/put' def create_request_with_all_fields(): return { "request": { "message" : "{\"temp\":23.33}" }, "id" : "req_123" } def publish_basic_message(): messageToPublish = create_request_with_all_fields() print("Message To Publish: ", messageToPublish) iot_client.publish(topic=send_topic, payload=json.dumps(messageToPublish)) publish_basic_message() def lambda_handler(event, context): return

Limits

このコネクタには、次の制限が適用されます。

  • AWS IoT Analytics batch_put_message アクションのために AWS SDK for Python (Boto3) によって課されるすべての制限。

  • AWS IoT Analytics BatchPutMessage API によって適用されるすべてのクォータ。詳細については、「AWS 全般のリファレンス」の「AWS IoT Analytics の Service Quotas」を参照してください。

    • チャネルごとに 1 秒あたり 100,000 件のメッセージ。

    • バッチごとに 100 件のメッセージ。

    • メッセージごとに 128 KB。

    この API では、チャネル名 (チャネル ARN ではありません) を使用するため、クロスリージョンまたはクロスアカウントチャネルへのデータの送信はサポートされません。

  • AWS IoT Greengrass Core によって適用されるすべてのクォータ。詳細については、AWS 全般のリファレンス で AWS IoT Greengrass core の「 Service Quotas 」を参照してください。

    特に、以下のクォータが適用されます。

    • デバイスによって送信されるメッセージの最大サイズは 128 KB です。

    • Greengrass コアルーターのメッセージキューの最大サイズは、2.5 MB です。

    • トピック文字列の最大長は、UTF-8 エンコード文字で 256 バイトです。

ライセンス

IoT Analytics コネクタには、以下のサードパーティーのソフトウェアおよびライセンスが含まれています。

このコネクタは、Greengrass Core ソフトウェアライセンス契約に従ってリリースされます。

変更ログ

次の表に、コネクタの各バージョンにおける変更点を示します。

バージョン

変更

4

コネクタのコンテナ化モードを設定するための IsolationMode パラメータが追加されました。

3

Lambda ランタイムを Python 3.7 にアップグレードしたことで、ランタイム要件が変更。

2

過剰なログ記録を減らすための修正。

1

初回リリース。

Greengrass グループには、一度に 1 つのバージョンのコネクタしか含めることができません。コネクタのバージョンのアップグレードについては、「コネクタのバージョンのアップグレード」を参照してください。

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