ライフサイクルイベント - 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。

注記

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

thingName

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

clientInitiatedDisconnect

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

disconnectReason

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

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

1このエラーを受信する前にデバイスがアクティブな接続を持っている場合。

2Last Will and Testament (LWT) メッセージを防ぐには、 DeleteConnection API のデフォルトの LWT 送信動作を上書きpreventWillMessage=trueするように を設定します。

eventType

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

ipAddress

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

principalIdentifier

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

sessionIdentifier

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

timestamp

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

versionNumber

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

注記

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

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

クライアントが約 1 時間接続されない場合、バージョン番号は 0 にリセットされます。永続的なセッションでは、永続的なセッションに設定された有効期間 (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 and Testament (LWT) メッセージを含むライフサイクルイベントに対して、常に待機状態を実装することです。切断メッセージが受信されると、コードは一定期間待機し、デバイスがオフラインのままであることを確認してからアクションを実行します。これを行う 1 つの方法は、SQS 遅延キューの使用です。クライアントが LWT またはライフサイクルイベントを受信したら、例えば 5 秒間メッセージをキューに追加できます。そのメッセージが使用可能になり、(Lambda または別のサービスによって) 処理されたら、さらにアクションを実行する前に、最初にデバイスがまだオフラインかどうか確認できます。

接続試行失敗イベント

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

$aws/events/presence/connect_failed/clientId

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

clientId

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

注記

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

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 は、 AWS IoT メッセージブローカーに接続する MQTT クライアントの ID です。

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

{ "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。

注記

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

thingName

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

eventType

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

principalIdentifier

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

sessionIdentifier

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

timestamp

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

トピック

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

注記

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