ライフサイクルイベント - AWS(AWS) IoT コア

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

ライフサイクルイベント

AWS IoT では、以下のセクションで説明している MQTT トピックにライフサイクルイベントをパブリッシュします。これらのメッセージでメッセージブローカーからのライフサイクルイベントを通知できます。

注記

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

接続/切断イベント

クライアントが接続/切断すると、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

クライアントが切断する理由。接続解除メッセージのみで見つかります。有効な値は次の表のとおりです。

切断の理由 説明:
AUTH_ERROR クライアントが認証に失敗したか、または認可が失敗しました。
CLIENT_INITIATED_DISCONNECT クライアントが切断することを示します。クライアントは、MQTT DISCONNECT 制御パケットを送信するか、クライアントが WebSocket 接続を使用している場合は Close frame を送信することでこれを実行できます。
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 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/clientId トピックにパブリッシュされるサブスクライブ/サブスクライブ解除メッセージに含まれる JSON 要素のリストです。

clientId

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

注記

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

eventType

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

principalIdentifier

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

sessionIdentifier

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

タイムスタンプ

イベントが発生した時間の近似値 (Unix エポックからのミリ秒単位)。timestamp の精度は +/- 2 分です。

トピック

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

注記

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