翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ライフサイクルイベント
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/
トピックにパブリッシュされる接続/切断メッセージに含まれる JSON 要素のリストです。clientId
- 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/
トピックに発行される接続認可メッセージに含まれる JSON 要素のリストです。clientId
- 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/
トピックにパブリッシュされるサブスクライブ/サブスクライブ解除メッセージに含まれる JSON 要素のリストです。clientId
- clientId
-
サブスクライブまたはサブスクライブ解除するクライアントの ID。
注記
# または + が含まれているクライアント ID はライフサイクルイベントを受信しません。
- thingName
-
IoT モノの名前。
thingName
は、クライアントが排他的なモノ機能を使用して接続している場合にのみ含まれます。 - eventType
-
イベントのタイプ。有効な値は
subscribed
またはunsubscribed
です。 - principalIdentifier
-
認証に使用された認証情報。TLS 相互認証の場合、これは使用された証明書の ID です。その他の認証の場合、これは IAM 認証情報です。
- sessionIdentifier
-
セッションの存続中 AWS IoT に存在する のグローバル一意識別子。
- timestamp
-
イベントが発生したおおよその日時。
- トピック
-
クライアントがサブスクライブした MQTT トピックの配列。
注記
ライフサイクルメッセージは順不同で送信される場合があります。重複したメッセージを受信することがあります。