翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ライフサイクルイベント
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。
注記
# または + IDsを含むクライアントは、ライフサイクルイベントを受信しません。
- thingName
-
IoT モノの名前。 は、クライアントが排他的なモノ機能を使用して接続している
thingName
場合にのみ含まれます。 - clientInitiatedDisconnect
-
クライアントによって切断が開始された場合は True、それ以外の場合は、false を返します。接続解除メッセージのみで見つかります。
- disconnectReason
-
クライアントが切断する理由。接続解除メッセージのみで見つかります。次の表には、有効な値と、切断が発生したときにブローカーが Last Will および Testament (LWT) メッセージを送信するかどうかが記載されています。
切断の理由 説明 ブローカーはLWTメッセージを送信します AUTH_ERROR
クライアントが認証に失敗したか、または認可が失敗しました。 はい。このエラーが表示される前にデバイスの接続がアクティブだった場合。 CLIENT_INITIATED_DISCONNECT
クライアントが切断することを示します。クライアントは、MQTT DISCONNECT
制御パケットを送信するかClose frame
、クライアントが WebSocket 接続を使用している場合は を送信することでこれを行うことができます。いいえ。 CLIENT_ERROR
クライアントに何か問題があり、切断されました。例えば、同じ接続で複数の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", "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/
トピックに発行された接続認可メッセージに含まれるJSON要素のリストです。clientId
- 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/
トピックに発行されたサブスクライブされたメッセージとサブスクライブされていないメッセージに含まれるJSON要素のリストです。clientId
- clientId
-
サブスクライブまたはサブスクライブ解除するクライアントの ID。
注記
# または + IDsを含むクライアントは、ライフサイクルイベントを受信しません。
- thingName
-
IoT モノの名前。 は、クライアントが排他的なモノ機能を使用して接続している
thingName
場合にのみ含まれます。 - eventType
-
イベントのタイプ。有効な値は
subscribed
またはunsubscribed
です。 - principalIdentifier
-
認証に使用された認証情報。TLS 相互認証証明書の場合、これは証明書 ID です。その他の認証の場合、これは IAM 認証情報です。
- sessionIdentifier
-
セッションの存続中 AWS IoT に存在する のグローバル一意識別子。
- timestamp
-
イベントが発生したおおよその日時。
- トピック
-
クライアントがサブスクライブしたMQTTトピックの配列。
注記
ライフサイクルメッセージは順不同で送信される場合があります。重複したメッセージを受信することがあります。