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

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

ライフサイクルイベント

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

注記

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

thingName は、クライアントが排他的なモノの機能を使用して接続している場合にのみ含まれます。

接続/切断イベント

注記

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。

注記

# または + IDsを含むクライアントは、ライフサイクルイベントを受信しません。

thingName

IoT モノの名前。 は、クライアントが排他的なモノ機能を使用して接続しているthingName場合にのみ含まれます。

clientInitiatedDisconnect

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

disconnectReason

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

切断の理由 説明 ブローカーはLWTメッセージを送信します
AUTH_ERROR クライアントが認証に失敗したか、または認可が失敗しました。 はい。このエラーが表示される前にデバイスの接続がアクティブだった場合。
CLIENT_INITIATED_DISCONNECT クライアントが切断することを示します。クライアントは、MQTTDISCONNECT制御パケットを送信するかClose frame、クライアントが WebSocket 接続を使用している場合は を送信することでこれを行うことができます。 いいえ。
CLIENT_ERROR クライアントに何か問題があり、切断されました。例えば、同じ接続で複数のMQTTCONNECTパケットを送信したり、ペイロード制限を超えるペイロードでパブリッシュしようとしたりすると、クライアントは切断されます。 はい。
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", "thingName": "exampleThing", "timestamp": 1573002230757, "eventType": "connected", "sessionIdentifier": "00000000-0000-0000-0000-000000000000", "principalIdentifier": "12345678901234567890123456789012", "ipAddress": "192.0.2.0", "versionNumber": 0 }

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

{ "clientId": "186b5", "thingName": "exampleThing", "timestamp": 1573002340451, "eventType": "disconnected", "sessionIdentifier": "00000000-0000-0000-0000-000000000000", "principalIdentifier": "12345678901234567890123456789012", "clientInitiatedDisconnect": true, "disconnectReason": "CLIENT_INITIATED_DISCONNECT", "versionNumber": 0 }

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

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

接続試行失敗イベント

AWS IoT は、クライアントが接続する権限がない場合、または最後の と のテストが設定されていて、クライアントがその最後の のMQTTトピックに発行する権限がない場合に、次のトピックにメッセージを発行します。

$aws/events/presence/connect_failed/clientId

以下は、$aws/events/presence/connect_failed/clientIdトピックに発行された接続認可メッセージに含まれるJSON要素のリストです。

clientId

接続を試み、接続に失敗したクライアントのクライアント ID。

注記

# または + IDsを含むクライアントは、ライフサイクルイベントを受信しません。

thingName

IoT モノの名前。 は、クライアントが排他的なモノ機能を使用して接続しているthingName場合にのみ含まれます。

timestamp

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

eventType

イベントのタイプ。有効な値はconnect_failedです。

connectFailureReason

接続が失敗した理由。有効な値はAUTHORIZATION_FAILEDです。

principalIdentifier

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

sessionIdentifier

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

ipAddress

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

接続失敗メッセージには次の構造があります。

{ "clientId": "186b5", "thingName": "exampleThing", "timestamp": 1460065214626, "eventType": "connect_failed", "connectFailureReason": "AUTHORIZATION_FAILED", "principalIdentifier": "12345678901234567890123456789012", "sessionIdentifier": "00000000-0000-0000-0000-000000000000", "ipAddress" : "192.0.2.0" }

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

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

$aws/events/subscriptions/subscribed/clientId

or

$aws/events/subscriptions/unsubscribed/clientId

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

このトピックに発行されたメッセージには、以下の構造があります。

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

以下は、 $aws/events/subscriptions/subscribed/clientIdおよび $aws/events/subscriptions/unsubscribed/clientIdトピックに発行されたサブスクライブされたメッセージとサブスクライブされていないメッセージに含まれるJSON要素のリストです。

clientId

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

注記

# または + IDsを含むクライアントは、ライフサイクルイベントを受信しません。

thingName

IoT モノの名前。 は、クライアントが排他的なモノ機能を使用して接続しているthingName場合にのみ含まれます。

eventType

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

principalIdentifier

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

sessionIdentifier

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

timestamp

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

トピック

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

注記

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