「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」
ライフサイクルイベント
AWS IoT では、以下のセクションで説明している MQTT トピックにライフサイクルイベントをパブリッシュします。これらのメッセージでメッセージブローカーからのライフサイクルイベントを通知できます。
ライフサイクルメッセージは順不同で送信される場合があります。重複したメッセージを受信することがあります。
接続/切断イベント
クライアントが接続/切断すると、AWS IoT は以下の MQTT トピックにメッセージをパブリッシュします。
-
$aws/events/presence/connected/
– クライアントがメッセージブローカーに接続しました。clientId
-
$aws/events/presence/disconnected/
– クライアントがメッセージブローカーから切断されました。clientId
以下に示しているのは、$aws/events/presence/connected/
トピックにパブリッシュされる接続/切断メッセージに含まれる JSON 要素のリストです。
clientId
- clientId
-
接続/切断するクライアントの ID。
注記 # または + IDs を含むクライアントはライフサイクルイベントを受信しません。
- clientInitiatedDisconnect
-
クライアントによって切断が開始された場合は True、それ以外の場合は、false を返します。切断メッセージのみに存在します。
- disconnectReason
-
クライアントが切断する理由。接続解除メッセージのみで見つかります。有効な値は次の表のとおりです。
切断の理由 説明 AUTH_ERROR
クライアントが認証に失敗したか、または認可が失敗しました。 CLIENT_INITIATED_DISCONNECT
クライアントが切断することを示します。クライアントは、MQTT DISCONNECT
制御パケットを送信するか、クライアントがClose frame
接続を使用している場合はそれを行うことができます。WebSocketCLIENT_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
が存続可能時間値よりも長く接続されているため、クライアントが切断されます。WebSocket - eventType
-
イベントのタイプ。有効な値は
connected
またはdisconnected
です。 - ipAddress
-
接続しているクライアントの IP アドレス。これは IPv4または 形式です。IPv6接続メッセージでのみ見つかります。
- principalIdentifier
-
認証に使用された認証情報。TLS 相互認証の場合、これは使用された証明書の ID です。その他の認証の場合、これは IAM 認証情報です。
- sessionIdentifier
-
セッションの有効期間中に存在する AWS IoT でのグローバル一意識別子。
- タイムスタンプ
-
イベントが発生した時間の近似値 (Unix エポックからのミリ秒単位)。timestamp の精度は +/- 2 分です。
- versionNumber
-
ライフサイクルイベントのバージョン番号。これは、各クライアント ID 接続ごとに単調に増加する長い整数値です。バージョン番号は、ライフサイクルイベントの順序を推測するために加入者が使用できます。
注記 クライアント接続の Connect メッセージと Disconnect メッセージのバージョン番号は同じです。
バージョン番号は値をスキップする可能性があり、イベントごとに 1 ずつ増加するとは限りません。
クライアントが約 1 時間接続されない場合、バージョン番号は 0 にリセットされます。永続的なセッションでは、永続的なセッションに設定された有効期間 (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 または別のサービスによって) 処理されたら、さらにアクションを実行する前に、最初にデバイスがまだオフラインかどうか確認できます。
サブスクライブ/サブスクライブ解除イベント
クライアントが MQTT トピックに対してサブスクライブまたはサブスクライブ解除すると、AWS IoT は以下の 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/
トピックにパブリッシュされるサブスクライブ/サブスクライブ解除メッセージに含まれる JSON 要素のリストです。
clientId
- clientId
-
サブスクライブまたはサブスクライブ解除するクライアントの ID。
注記 # または + IDs を含むクライアントはライフサイクルイベントを受信しません。
- eventType
-
イベントのタイプ。有効な値は
subscribed
またはunsubscribed
です。 - principalIdentifier
-
認証に使用された認証情報。TLS 相互認証の場合、これは使用された証明書の ID です。その他の認証の場合、これは IAM 認証情報です。
- sessionIdentifier
-
セッションの有効期間中に存在する AWS IoT でのグローバル一意識別子。
- タイムスタンプ
-
イベントが発生した時間の近似値 (Unix エポックからのミリ秒単位)。timestamp の精度は +/- 2 分です。
- トピック
-
クライアントがサブスクライブした MQTT トピックの配列。
ライフサイクルメッセージは順不同で送信される場合があります。重複したメッセージを受信することがあります。