モノの動的グループ
モノの動的グループでは、検索クエリによってグループのメンバーシップが更新されます。モノの動的グループを使用すると、接続、レジストリ、シャドウ、または Device Defender 違反データに応じて、モノとやり取りする方法を変更できます。モノの動的グループはフリートインデックスに結び付けられているため、動的グループを使用するにはフリートインデックス作成サービスを有効にしておく必要があります。フリートインデックス作成の検索クエリを使用してグループを作成する前に、モノの動的グループに属するモノをプレビューできます。詳細については、「フリートインデックス作成」および「クエリ構文」を参照してください。
モノの動的グループをジョブのターゲットとして指定できます。そのジョブを実行できるのは、そのモノの動的グループを定義する条件を満たしているモノだけです。
たとえば、デバイスのファームウェアを更新する場合に、その更新が中断される可能性を最小限に抑えるために、バッテリー残量が 80% を超えているデバイスでのみファームウェアを更新するとします。80% を超えるバッテリー残量が報告されているデバイスだけが含まれているモノの動的グループを作成し、そのモノの動的グループをファームウェア更新ジョブのターゲットとして使用できます。バッテリー残量の条件を満たすデバイスだけがファームウェア更新を受け取ります。80% というバッテリー残量の条件に達したデバイスは、そのモノの動的グループに追加されて、ファームウェア更新を受け取ります。
ジョブターゲットとしてモノのグループを指定する方法については、「CreateJob」を参照してください。
モノの動的グループは、以下の点でモノの静的グループと異なります。
-
モノのグループ名に個人を特定できる情報を使用しないでください。モノのグループ名は、暗号化されていない通信やレポートに表示される可能性があります。
-
モノのグループ名にコロン文字 (:) を使用しないでください。他の AWS IoT サービスではコロン文字が区切り文字として使用されているため、モノのグループ名を含む文字列が誤って解析される可能性があります。
モノの静的グループの詳細については、「モノの静的グループ」を参照してください。
この例では、倉庫内の気温が華氏 60 度を超えるすべての部屋を含む動的なグループを作成します。温度が 61 度以上になった部屋は、RoomTooWarm 動的モノグループに追加されます。RoomTooWarm 動的モノグループのすべての部屋では、冷却ファンがオンになります。温度が 60 度以下に下がった部屋は、動的なモノのグループから削除され、ファンはオフになります。
モノの動的グループを作成する
モノの動的グループを作成するには CreateDynamicThingGroup コマンドを使用します。熱すぎる部屋のシナリオ用に動的なモノのグループを作成するには、create-dynamic-thing-group CLI コマンドを使用します。
$ aws iot create-dynamic-thing-group --thing-group-name "RoomTooWarm" --query-string "attributes.temperature>60"
モノの動的グループ名に個人を特定できる情報を使用することはお勧めしません。
CreateDynamicThingGroup コマンドは、次のように、インデックス名、クエリ文字列、クエリバージョン、モノのグループ名、モノのグループ ID、モノのグループの Amazon リソースネーム (ARN) が含まれているレスポンスを返します。
{ "indexName": "AWS_Things", "queryVersion": "2017-09-30", "thingGroupName": "RoomTooWarm", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RoomTooWarm", "queryString": "attributes.temperature>60\n", "thingGroupId": "abcdefgh12345678ijklmnop12345678qrstuvwx" }
モノの動的グループの作成は即時には行われません。モノの動的グループのバックフィルは完了するまでに時間がかかります。モノの動的グループが作成されると、そのグループの状態は BUILDING
に設定されます。バックフィルが完了すると、ステータスは ACTIVE
に変わります。モノの動的グループのステータスを確認するには DescribeThingGroup コマンドを使用します。
モノの動的グループを記述する
モノの動的グループに関する情報を取得するには DescribeThingGroup コマンドを使用します。
$ aws iot describe-thing-group --thing-group-name "RoomTooWarm"
DescribeThingGroup コマンドは、指定されたグループに関する情報を返します。
{ "status": "ACTIVE", "indexName": "AWS_Things", "thingGroupName": "RoomTooWarm", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RoomTooWarm", "queryString": "attributes.temperature>60\n", "version": 1, "thingGroupMetadata": { "creationDate": 1548716921.289 }, "thingGroupProperties": {}, "queryVersion": "2017-09-30", "thingGroupId": "84dd9b5b-2b98-4c65-84e4-be0e1ecf4fd8" }
モノの動的グループに対して DescribeThingGroup を実行すると、モノの動的グループに固有の属性 (queryString やステータスなど) が返されます。
モノの動的グループのステータスは次のいずれかの値です。
ACTIVE
-
モノの動的グループは使用する準備ができています。
BUILDING
-
モノの動的グループは作成中であり、モノのメンバーシップが処理中です。
REBUILDING
-
モノの動的グループは、グループの検索クエリの調整が済んで、メンバーシップが更新中です。
モノの動的グループを作成した後は、そのステータスに関係なくそのグループを使用できます。ステータスが ACTIVE
であるモノの動的グループには、そのモノの動的グループの検索クエリに一致するすべてモノが含まれています。ステータスが BUILDING
または REBUILDING
であるモノの動的グループには、検索クエリに一致するモノがすべて含まれているとは限りません。
モノの動的グループを更新する
モノの動的グループの属性 (グループの検索クエリなど) を更新するには UpdateDynamicThingGroup コマンドを使用します。次のコマンドは、モノのグループの説明とクエリ文字列を更新し、メンバーの条件を 65 度を超える温度に変更します。
$ aws iot update-dynamic-thing-group --thing-group-name "RoomTooWarm" --thing-group-properties "thingGroupDescription=\"This thing group contains rooms warmer than 65F.\"" --query-string "attributes.temperature>65"
UpdateDynamicThingGroup コマンドは、更新後にグループのバージョン番号を含むレスポンスを返します。
{ "version": 2 }
モノの動的グループの更新は即時には行われません。モノの動的グループのバックフィルは完了するまでに時間がかかります。モノの動的グループが更新されてグループのメンバーシップが更新されている間は、グループのステータスは REBUILDING
に変わります。バックフィルが完了すると、ステータスは ACTIVE
に変わります。モノの動的グループのステータスを確認するには DescribeThingGroup コマンドを使用します。
モノの動的グループを削除する
モノの動的グループを削除するには DeleteDynamicThingGroup コマンドを使用します。
$ aws iot delete-dynamic-thing-group --thing-group-name "RoomTooWarm"
DeleteDynamicThingGroup コマンドでは、出力が生成されません。
クラウド内のレコードが更新されている間は、モノが属しているグループを示すコマンド (ListGroupsForThing など) で、そのグループが表示され続けることがあります。
制限事項と競合
モノの動的グループでは、モノの静的グループと次の制限が共有されます。
モノの動的グループを使用する際には以下の点に注意してください。
フリートインデックス作成サービスが有効になっている必要があります。
モノの動的グループを作成および使用する前に、フリートインデックス作成サービスが有効になっていて、フリートインデックス作成のバックフィルが完了している必要があります。フリートインデックス作成サービスを有効にした後に、時間の余裕を想定しておく必要があります。バックフィルが完了するまでに時間がかかることがあります。登録済みのモノの数が多いほど、バックフィルプロセスにかかる時間は長くなります。フリートインデックス作成サービスをモノの動的グループに対して有効にした後は、モノの動的グループをすべて削除するまでは無効にできません。
フリートインデックスに対してクエリを実行するアクセス許可があるユーザーは、フリート全体でモノのデータにアクセスできます。
モノの動的グループの数が限られている
動的グループの数は限られています。
コマンドが成功するとエラーをログに記録できる
モノの動的グループを作成または更新するときに、モノの動的グループに追加する対象となる可能性があるが、まだ追加されていないモノが存在する可能性があります。ただし、モノの動的グループを作成または更新するコマンドは、エラーをログに記録してAddThingToDynamicThingGroupsFailed メトリクスを生成しているときでも成功します。
対象となるモノをモノの動的グループに追加できない場合、またはモノを別のグループに追加するためにモノが動的グループから削除された場合、モノごとに CloudWatch ログのエラーログエントリが作成されます。モノを動的グループに追加できない場合も、AddThingToDynamicThingGroupsFailed メトリクスが作成されますが、1 つのメトリクスが複数のログエントリを表していることもあります。
モノがモノの動的グループに追加される対象になると、次のことが考慮されます。
-
既に最大限のグループに追加されていますか? (「制限」を参照してください)
-
いいえ: モノはモノの動的グループに追加されます。
-
はい: モノはモノの動的グループのメンバーですか?
-
いいえ: モノをモノの動的グループに追加することはできず、エラーがログに記録され、AddThingToDynamicThingGroupsFailed メトリクスが生成されます。
-
はい: 参加するモノの動的グループは、そのモノが既にメンバーになっているモノの動的グループよりも古いものですか?
-
いいえ: モノをモノの動的グループに追加することはできず、エラーがログに記録され、AddThingToDynamicThingGroupsFailed メトリクスが生成されます。
-
はい: メンバーとなっている最新のモノの動的グループからモノを削除して、エラーをログに記録し、モノをモノの動的グループに追加します。これにより、モノが削除されたモノの動的グループのエラーと AddThingToDynamicThingGroupsFailedメトリクスが生成されます。
-
-
-
モノの動的グループ内のモノが検索クエリに一致しなくなると、モノの動的グループから削除されます。同様に、モノが更新されてモノの動的グループの検索クエリを満たすようになると、前述のようにそのモノがそのグループに追加されます。このような追加と削除は正常であり、エラーログエントリは生成されません。
overrideDynamicGroups
が有効になっている場合は、静的グループの方が動的グループより優先されます。
モノが属することができるグループの最大数は、限られています。AddThingToThingGroup または UpdateThingGroupsForThing コマンドを使用してモノのメンバーシップを更新した場合、--overrideDynamicGroups
パラメータを追加するとモノの動的グループよりモノの静的グループの方が優先されます。
モノをモノの静的グループに追加する場合、次のことが考慮されます。
-
モノは既にグループの最大数に属していますか?
-
いいえ: モノがモノの静的グループに追加されます。
-
はい: モノは動的グループに属していますか?
-
いいえ: モノをモノのグループに追加することができません。コマンドにより例外が発生します。
-
はい: --overrideDynamicGroups は有効になっていましたか?
-
いいえ: モノをモノのグループに追加することができません。コマンドにより例外が発生します。
-
はい: モノは最も新しく作成されたモノの動的グループから削除されて、エラーがログに記録され、モノが削除されたモノの動的グループのAddThingToDynamicThingGroupsFailed メトリクスが生成されます。その後、モノがモノの静的グループに追加されます。
-
-
-
作成日時が古いモノの動的グループの方が優先されます。
モノが属することができるグループの最大数は、限られています。作成操作または更新操作によってモノがモノの動的グループに追加される対象となり、そのモノが既に最大限のグループに属している場合は、別のモノの動的グループから削除するとこの追加を有効にすることができます。この動作の詳細については、「コマンドが成功するとエラーをログに記録できる」と「overrideDynamicGroups が有効になっている場合は、静的グループの方が動的グループより優先されます。」で例を参照してください。
モノがモノの動的グループから削除されると、エラーがログに記録され、イベントが発生します。
モノの動的グループにポリシーを適用することはできません。
モノの動的グループにポリシーを適用しようとすると、例外が生成されます。
モノの動的グループのメンバーシップには結果整合性があります。
レジストリでは、モノの最終的な状態のみが評価されます。複数の状態が急速に更新された場合、中間の状態はスキップされることがあります。ルールまたはジョブを、メンバーシップが中間的な状態に応じて変化するモノの動的グループと関連付けないでください。