AWS IoT Eventsの探知機モデルを更新した際のディテクター状態を確認する

AWS IoT Eventsで作成した探知機モデルですが、更新するとディテクターの状態が初期化されます。 このとき、次のメッセージが来るまでのディテクター状態はどうなっているのかを調べてみました。
2020.07.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS IoT Eventsで作成した探知機モデルを更新するとき、ディテクター状態の初期化について確認されます。

AWS IoT Eventsでモデル更新する際の確認メッセージ

そこで思ったのです。探知機モデルを更新したあと、次のメッセージが来るまでに取得したディテクターの状態は何になっているんだろう?と。

AWS IoT Eventsの疑問

まずは現状を確認する

以前に作成した探知機モデルを使います。 ここには2つのディテクターが存在しており、状態は2つともofflineになっています。

aws iotevents-data list-detectors \
    --detector-model-name SampleHeartbeatModel

上記コマンドの実行結果が次になっています。

{
    "detectorSummaries": [
        {
            "detectorModelName": "SampleHeartbeatModel",
            "keyValue": "d1234",
            "detectorModelVersion": "1",
            "state": {
                "stateName": "offline"
            },
            "creationTime": 1595910461.44,
            "lastUpdateTime": 1595931293.428
        },
        {
            "detectorModelName": "SampleHeartbeatModel",
            "keyValue": "d7777",
            "detectorModelVersion": "1",
            "state": {
                "stateName": "offline"
            },
            "creationTime": 1595911196.103,
            "lastUpdateTime": 1595931297.882
        }
    ]
}

探知機モデルを更新する

探知機モデルを開き、online状態のOnEnterであるInit_timerについて、ハートビート用のタイマーを5分から3分に変更します。

AWS IoT Eventsのイベントを変更する

続いて、探知機モデルを保存して発行します。

AWS IoT Eventsの探知機モデルを更新する

このタイミングで冒頭の確認が行われます。「はい」を押して続行します。

AWS IoT Eventsでモデル更新する際の確認メッセージ

探知機モデルを公開した直後のディテクターの様子

ディテクターの状態は、offlineのまま変更はありません。

デバイス状態の様子(offline)

コマンド実行した結果も同じです。

{
    "detectorSummaries": [
        {
            "detectorModelName": "SampleHeartbeatModel",
            "keyValue": "d1234",
            "detectorModelVersion": "1",
            "state": {
                "stateName": "offline"
            },
            "creationTime": 1595910461.44,
            "lastUpdateTime": 1595931293.428
        },
        {
            "detectorModelName": "SampleHeartbeatModel",
            "keyValue": "d7777",
            "detectorModelVersion": "1",
            "state": {
                "stateName": "offline"
            },
            "creationTime": 1595911196.103,
            "lastUpdateTime": 1595931297.882
        }
    ]
}

ハートビートを送信したあとのディテクターの様子

d1234のデバイスについて、ハートビート送信します。

デバイスからハートビート送信する

この状態でディテクターの様子を確認すると、d1234のみがonline状態になっていました(期待通り)。

デバイス状態の様子(online)

コマンドを実行して一覧取得すると、d1234のみ更新されていました。detectorModelVersion2になっています。

{
    "detectorSummaries": [
        {
            "detectorModelName": "SampleHeartbeatModel",
            "keyValue": "d1234",
            "detectorModelVersion": "2",
            "state": {
                "stateName": "online"
            },
            "creationTime": 1596157131.895,
            "lastUpdateTime": 1596157131.896
        },
        {
            "detectorModelName": "SampleHeartbeatModel",
            "keyValue": "d7777",
            "detectorModelVersion": "1",
            "state": {
                "stateName": "offline"
            },
            "creationTime": 1595911196.103,
            "lastUpdateTime": 1595931297.882
        }
    ]
}

ただし、初期化されたという性質上、「デバイス切断状態が復旧しました」というメールは届いていません。 (offline状態のOnExitにイベントが存在するため)

まとめ

探知機モデルを更新したあと、次のメッセージが来るまでに取得したディテクターの状態は「変化しない」が答えでした。

AWS IoT Eventsのステータス

探知機モデル d1234 d7777
更新前 offline(v1) offline(v1)
更新直後 offline(v1) offline(v1)
d1234ハートビート送信後 online(v2) offline(v1)

これらの特徴を踏まえて探知機モデルを新規作成・更新していきたいですね。

参考