この章では以降の章で利用するJobで使うためのAWS IoT Thing Groupsの設定方法について学びます。
Thing Groupには静的(Static)
thing groupと動的(Dynamic)
thing groupの2種類があります。まず最初にstatic thing groupをAWS CLIで作成します。
以下のコマンドをCloud9のターミナルで実行します。
aws iot create-thing-group --thing-group-name Quarantine_Static
実行すると以下のような戻り値が表示されます。
{
"thingGroupName": "Quarantine_Static",
"thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/Quarantine_Static",
"thingGroupId": "6928fca7-beef-cafe-8327-481073d7c108"
}
Dynamic Thing Groupを利用するには、Fleet Indexingを有効にする必要があります。 以下のコマンドを実行して、有効にします。
aws iot update-indexing-configuration --thing-indexing-configuration \
thingIndexingMode=REGISTRY_AND_SHADOW,thingConnectivityIndexingMode=STATUS
2〜3分待ってから、以下のコマンドを実行して、Dynamic Thing Groupを作成します。コマンドを実行して、“fleet index is not active"のようなメッセージが表示されたら、もう少し待ってから再度コマンドを実行してください。
aws iot create-dynamic-thing-group \
--thing-group-name "Quarantine_Dynamic" \
--query-string "attributes.healthy:0"
正しく実行されると、以下のような戻り値が表示されます。
{
"indexName": "AWS_Things",
"queryVersion": "2017-09-30",
"thingGroupName": "Quarantine_Dynamic",
"thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/Quarantine_Dynamic",
"queryString": "attributes.healthy:0",
"thingGroupId": "d1e279bc-977e-cafe-9776-d988c0e651b8"
}
以下のコマンドを実行して、Static Thing Groupに含まれているThingを確認してみましょう。
aws iot list-things-in-thing-group --thing-group-name Quarantine_Static
現在はThingが登録されていないので、以下のような戻り値になるはずです。
{
"things": []
}
次に以下のコマンドで、Dynamic Thing Groupを確認してみましょう。
aws iot list-things-in-thing-group --thing-group-name Quarantine_Dynamic
こちらも何も登録されていないので、以下のような戻り値になるはずです。
{
"things": []
}
次に、先ほど作成したThingにattributeを追加してみましょう。作成したThingは以下のコマンドで見つけることが出来ます。
aws iot list-things
以下のような情報が見れるはずです。
{
"things": [
{
"thingArn": "arn:aws:iot:us-west-2:123456789012:thing/ThingOne",
"version": 1,
"thingName": "ThingOne",
"attributes": {}
}
]
}
Dynamic Thing Groupに追加されるように、以下のコマンドを実行してThingにattributeを追加します。
aws iot update-thing --thing-name "ThingOne" \
--attribute-payload "attributes={healthy=0},merge=false"
正しく追加されたか確認します
aws iot describe-thing --thing-name "ThingOne"
戻り値
{
"version": 2,
"thingName": "ThingOne",
"defaultClientId": "ThingOne",
"attributes": {
"healthy": "0"
},
"thingArn": "arn:aws:iot:ap-northeast-1:123456789012:thing/ThingOne",
"thingId": "87d3c5e1-6b65-4eab-a43c-86b271e4f0c2"
}
Dynamic Thing Groupは条件に合えばThingが自動的にGroupに含まれ、条件に合わないとGroupから外れます。ここではその動きを確認します。
最初に以下のコマンドを実行します。
aws iot list-things-in-thing-group --thing-group-name Quarantine_Dynamic
戻り値
{
"things": [
"ThingOne"
]
}
ThingOneは、作成したDynamic Thing Group Quarantine_Dynamic
の条件--query-string "attributes.healthy:0"
に合うため、Groupに含まれています。
では、以下のコマンドを実行してこのThingのattibuteを変更して、条件に合わないようにしてみましょう。
aws iot update-thing --thing-name "ThingOne" \
--attribute-payload "attributes={healthy=1},merge=false"
以下のコマンドを実行して、Dynamic Thing Groupに登録されているThingの情報を取得します。
aws iot list-things-in-thing-group --thing-group-name Quarantine_Dynamic
以下のように、Groupから外れたことを確認できます。
{
"things": []
}
ここでは、Thing Indexingの機能を使って、Thingを管理する設定を行いました。ThingをIndexで管理することにより、大量のデバイスを効率よく管理することが可能になります。 Thing Indexingのその他の機能については、こちらのドキュメントを参照してください。
この章の手順は以上です。