AWS IoTおよびThing Shadowsに関する雑感

注意: この文章には思い込みが含まれています。

AWS IoT が発表されました。AWS IoTはManagedなMQTT Serverを用意し、運用が大変となるMQTT Serverを面倒見てくれる、というMQTTに対する評価がちらほら聞こえます。

しかし、違います。AWS IoTの本質は、Thing Shadowsの仕組みです。

とはいえ、まだちゃんと使ったわけではないですし、間違いがあったらご指摘をお願いします。

Thing Shadows

AWS IoTでは、 Things というものが定義されています。このThingsには二種類が存在します。

Things

実際の物理的なモノ。デバイス

Thing Shadow

Thingsの状態をネットワーク(AWS)上に持たせたもの

Thingsはそのままですね。新しいのはThing Shadowです。これは、「物理的なデバイスを、仮想的にネットワーク上に写した(写像)もの」です。

ThingsとThing Shadowは1対1で結びついています。Thingsになにか変更があれば、Thing Shadowsにも変更が起こります。逆もまたしかり。Thing Shadowsに変更を起こした場合、それはThingsにも変更を起こすのです。

これはすなわち、

  • 物理空間

  • 仮想空間

とが一体化したことにほかなりません。

Thing Shadowの情報

Thing Shadowの実装は、単なるJSONです。:

{
    "state" : {
        "desired" : {
          "color" : "RED",
          "sequence" : [ "RED", "GREEN", "BLUE" ]
        },
        "reported" : {
          "color" : "GREEN"
        }
    },
    "metadata" : {
        "desired" : {
            "color" : {
                "timestamp" : 12345
            },
            "sequence" : {
                "timestamp" : 12345
            }
        },
        "reported" : {
            "color" : {
                "timestamp" : 12345
            }
        }
    },
    "version" : 10,
    "clientToken" : "UniqueClientToken",
    "timestamp": 123456789
}

ここ重要なのは stateとmetadataそれぞれが持つ、 desiredreported です。

1. Thingが更新された場合

物理的なものである、Thingが更新された場合、その情報はMQTTやHTTPSでThing Shadowに通知されます。

これに伴い、 reported の状態が更新されます。

2. Thing Shadowが更新された場合

Thing Shadowは、MQTTやHTTPによって、仮想空間上で更新できます。 その場合、 desired の情報が更新されます。

この時、 desiredreported に差があった場合、 このThing ShadowをsubscribeしているThing(一つとは限らない)に対してメッセージが送られます。 Thingはこれを受け取り、自分自身の情報を更新することができるのです。そして、更新出来たら、 reported としてThing Shadowを更新します。


これらの動作により、ThingとThing Shadowsは同期が取れます。もしも、 repoteddesired が異なっている場合は同期がとれていない、ということになります。

さらに言うと、APIとして、 update/get/deleteが用意されており、それぞれに対して acceptedrejected が用意されています。このため、Things Shadowsを更新しようとしたが、できなかった、ということも分かるようになっています。

MQTTとの違い

ここまで、ThingsとThing Shadowsについて説明してきました。ところで、AWS IoTでは、MQTTの以下の機能がありません。

  • Retain

  • Will

  • QoS2

なぜでしょうか。それはThing Shadowがあるからです。

  • RetainはShadowそのものです

  • Wllはそもそもオフラインという状態が存在しないので必要ありません

  • QoS2による、同期はShadowのdesired/reportedを使えば実現できます

AWS IoTはMQTTというメッセージプロトコルではなく 「状態」を扱うためのものである、という点を重要視するといいのではないでしょうか。

まとめ

AWS IoTを単なるManagedなMQTT Serverとだけ捕らえてしまうと、本質を見誤る気が致します。仮想空間と物理空間の融合、Internet of Things、とはなにか、というのをもう一度見つめなおしてみると面白いかもしれません。

また、今回はまだ Rule に関して踏み込んでいません。Thing Shadows/Ruleを組み合わせることにより、人間が介在しない、Machine to Machine、 Things to Things の世界を作ることが出来るはずです。

という、あまりこのblogには書いていない、ちょっとエモーショナルな話でした。(実はこういう研究を10年以上前にやっていたのです。それがここまで広がったのか、とつい嬉しくなり、勢いに任せて書いた次第です)

Comments

comments powered by Disqus