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

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

ライフサイクルイベント

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

注記

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

接続/切断イベント

注記

AWS IoT デバイス管理フリートインデックスを使用すると、モノを検索したり、集計クエリを実行したり、Thing Connect/Disconnect イベントに基づいて動的グループを作成したりできます。詳細については、「フリートインデックス作成」を参照してください。

AWS IoT クライアントが接続または切断したときに、次の MQTT トピックにメッセージを公開します。

  • $aws/events/presence/connected/clientId – クライアントがメッセージブローカーに接続しました。

  • $aws/events/presence/disconnected/clientId – クライアントがメッセージブローカーから切断されました。

以下に示しているのは、$aws/events/presence/connected/clientId トピックにパブリッシュされる接続/切断メッセージに含まれる JSON 要素のリストです。

clientId

接続/切断するクライアントの ID。

注記

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

clientInitiatedDisconnect

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

disconnectReason

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

切断の理由 説明 ブローカーは LWT メッセージを送信します
AUTH_ERROR クライアントが認証に失敗したか、または認可が失敗しました。 はい。このエラーが表示される前にデバイスの接続がアクティブだった場合。
CLIENT_INITIATED_DISCONNECT クライアントが切断することを示します。クライアントは MQTT DISCONNECT コントロールパケットを送信するか、Close frameクライアントが接続を使用している場合はメッセージを送信することでこれを実現できます。 WebSocket いいえ。
CLIENT_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 time-to-liveがその値よりも長く接続されていたため、 WebSocket クライアントは切断されます。 はい。
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", "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 または別のサービスによって) 処理されたら、さらにアクションを実行する前に、最初にデバイスがまだオフラインかどうか確認できます。

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

AWS IoT クライアントが MQTT トピックを購読または購読解除したときに、次の 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/clientId トピックにパブリッシュされるサブスクライブ/サブスクライブ解除メッセージに含まれる JSON 要素のリストです。

clientId

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

注記

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

eventType

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

principalIdentifier

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

sessionIdentifier

セッションの間ずっと存在する、 AWS IoT グローバルに一意の識別子。

timestamp

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

トピック

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

注記

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