3. Thing Groupsの作成

この章のゴール

この章では以降の章で利用するJobで使うためのAWS IoT Thing Groupsの設定方法について学びます。

Step1

静的なThing Groupを作成します

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"
}

Step2

Fleet Indexingを有効にする

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"
}

Step3

Dynamic Thing Groupを状態を確認

以下のコマンドを実行して、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": {}
        }
    ]
}

Step4

Thingにattributeを追加する

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"
}

Step5

Dynamic Thing Groupの挙動を確認

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のその他の機能については、こちらのドキュメントを参照してください。

この章の手順は以上です。