ライフサイクルイベント - AWS IoT Core

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ライフサイクルイベント

AWS IoT は、MQTT トピックでライフサイクルイベントを発行できます。これらのイベントはデフォルトで利用可能で、無効にすることはできません。

注記

ライフサイクルメッセージは順不同で送信される場合があります。重複したメッセージを受信することがあります。

接続/切断イベント

注記

AWS IoT Device Management フリートインデックス作成を使用すると、モノの検索、集計クエリの実行、モノの Connect/Disconnect イベントに基づく動的グループの作成を行うことができます。詳細については、「フリートインデックス作成」を参照してください。

AWS IoT クライアントが接続または切断すると、 は次の MQTT トピックにメッセージを発行します。

  • $aws/events/presence/connected/clientId – クライアントがメッセージブローカーに接続しました。

  • $aws/events/presence/disconnected/clientId – クライアントがメッセージブローカーから切断されました。

以下に示しているのは、$aws/events/presence/connected/clientId トピックにパブリッシュされる接続/切断メッセージに含まれる JSON 要素のリストです。

clientId

接続/切断するクライアントの ID。

注記

# または + が含まれているクライアント ID はライフサイクルイベントを受信しません。

クライアントInitiatedDisconnect

クライアントによって切断が開始された場合は True、それ以外の場合は、false を返します。接続解除メッセージのみで見つかります。

disconnectReason

クライアントが切断する理由。接続解除メッセージのみで見つかります。次の表には、有効な値と、接続が切断されたときにブローカーが Last Will and Testament (LWT) メッセージを送信するかどうかが含まれています。

切断の理由 説明 ブローカーは LWT メッセージを送信します
AUTH_ERROR クライアントが認証に失敗したか、または認可が失敗しました。 はい。このエラーが表示される前にデバイスの接続がアクティブだった場合。
CLIENT_INITIATED_DISCONNECT クライアントが切断することを示します。クライアントは、MQTT DISCONNECTコントロールパケットを送信するか、クライアントが WebSocket 接続を使用している場合は Close frame を送信することでこれを行うことができます。 いいえ。
CLIENT_ERROR クライアントに何か問題があり、切断されました。例えば、同じ接続で 1 つ以上の MQTT CONNECT パケットを送信する場合、またはクライアントがペイロード制限を超えるペイロードでパブリッシュしようとした場合、クライアントは切断されます。 はい。
CONNECTION_LOST クライアント/サーバー接続が切断されます。これは、ネットワークのレイテンシーが長い間、またはインターネット接続が失われた場合に発生する可能性があります。 はい。
DUPLICATE_CLIENTID クライアントは、すでに使用されているクライアント ID を使用しています。この場合、すでに接続されているクライアントは、この切断理由により切断されます。 はい。
FORBIDDEN_ACCESS クライアントは接続できません。例えば、IP アドレスが拒否されたクライアントは接続に失敗します。 はい。このエラーが表示される前にデバイスの接続がアクティブだった場合。
MQTT_KEEP_ALIVE_TIMEOUT クライアントのキープアライブ時間の 1.5 倍の期間にクライアントとサーバー間の通信がない場合、クライアントは切断されます。 はい。
SERVER_ERROR 予期しないサーバーの問題が発生したため、切断されました。 はい。
SERVER_INITIATED_DISCONNECT サーバーは、運用上の理由から、意図的にクライアントを切断します。 はい。
THROTTLED スロットリング制限を超えたため、クライアントは切断されます。 はい。
WEBSOCKET_TTL_EXPIRATION が値よりも time-to-live長く接続されているため、クライアント WebSocket は切断されます。 はい。
CUSTOMAUTH_TTL_EXPIRATION カスタムオーソライザー time-to-live の値よりも長く接続されているため、クライアントは切断されます。 はい。
eventType

イベントのタイプ。有効な値は connected または disconnected です。

ipAddress

接続しているクライアントの IP アドレス。これは、IPv4 形式または IPv6 形式にすることができます。接続メッセージでのみ見つかります。

principalIdentifier

認証に使用された認証情報。TLS 相互認証の場合、これは使用された証明書の ID です。その他の認証の場合、これは IAM 認証情報です。

sessionIdentifier

セッションの存続期間中 AWS IoT に存在する のグローバルに一意の識別子。

timestamp

イベントが発生したおおよその日時。

versionNumber

ライフサイクルイベントのバージョン番号。これは、各クライアント ID 接続ごとに単調に増加する長い整数値です。バージョン番号は、ライフサイクルイベントの順序を推測するために加入者が使用できます。

注記

クライアント接続の Connect メッセージと Disconnect メッセージのバージョン番号は同じです。

バージョン番号は値をスキップする可能性があり、イベントごとに 1 ずつ増加するとは限りません。

クライアントが約 1 時間接続されない場合、バージョン番号は 0 にリセットされます。永続セッションの場合、永続セッションに設定された time-to-live (TTL) よりも長い時間クライアントが切断されると、バージョン番号は 0 にリセットされます。

接続メッセージの構造は次のとおりです。

{ "clientId": "186b5", "timestamp": 1573002230757, "eventType": "connected", "sessionIdentifier": "a4666d2a7d844ae4ac5d7b38c9cb7967", "principalIdentifier": "12345678901234567890123456789012", "ipAddress": "192.0.2.0", "versionNumber": 0 }

切断メッセージの構造は次のとおりです。

{ "clientId": "186b5", "timestamp": 1573002340451, "eventType": "disconnected", "sessionIdentifier": "a4666d2a7d844ae4ac5d7b38c9cb7967", "principalIdentifier": "12345678901234567890123456789012", "clientInitiatedDisconnect": true, "disconnectReason": "CLIENT_INITIATED_DISCONNECT", "versionNumber": 0 }

クライアントの切断の処理

ベストプラクティスは、Last Will and Testament (LWT) メッセージを含むライフサイクルイベントに対して、常に待機状態を実装することです。切断メッセージが受信されると、コードは一定期間待機し、デバイスがオフラインのままであることを確認してからアクションを実行します。これを行う 1 つの方法は、SQS 遅延キューの使用です。クライアントが LWT またはライフサイクルイベントを受信したら、例えば 5 秒間メッセージをキューに追加できます。そのメッセージが使用可能になり、(Lambda または別のサービスによって) 処理されたら、さらにアクションを実行する前に、最初にデバイスがまだオフラインかどうか確認できます。

サブスクライブ/サブスクライブ解除イベント

AWS IoT クライアントが MQTT トピックをサブスクライブまたはサブスクライブ解除すると、 は次の MQTT トピックにメッセージを発行します。

$aws/events/subscriptions/subscribed/clientId

または

$aws/events/subscriptions/unsubscribed/clientId

ここで、clientId は、 AWS IoT メッセージブローカーに接続する MQTT クライアントの ID です。

このトピックにパブリッシュされたメッセージには、以下の構造があります。

{ "clientId": "186b5", "timestamp": 1460065214626, "eventType": "subscribed" | "unsubscribed", "sessionIdentifier": "00000000-0000-0000-0000-000000000000", "principalIdentifier": "000000000000/ABCDEFGHIJKLMNOPQRSTU:some-user/ABCDEFGHIJKLMNOPQRSTU:some-user", "topics" : ["foo/bar","device/data","dog/cat"] }

以下に示しているのは、$aws/events/subscriptions/subscribed/clientId および $aws/events/subscriptions/unsubscribed/clientId トピックにパブリッシュされるサブスクライブ/サブスクライブ解除メッセージに含まれる JSON 要素のリストです。

clientId

サブスクライブまたはサブスクライブ解除するクライアントの ID。

注記

# または + が含まれているクライアント ID はライフサイクルイベントを受信しません。

eventType

イベントのタイプ。有効な値は subscribed または unsubscribed です。

principalIdentifier

認証に使用された認証情報。TLS 相互認証の場合、これは使用された証明書の ID です。その他の認証の場合、これは IAM 認証情報です。

sessionIdentifier

セッションの存続期間中 AWS IoT に存在する のグローバルに一意の識別子。

timestamp

イベントが発生したおおよその日時。

トピック

クライアントがサブスクライブした MQTT トピックの配列。

注記

ライフサイクルメッセージは順不同で送信される場合があります。重複したメッセージを受信することがあります。