

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

# デバイス接続ステータスのクエリ
<a name="device-connectivity-status"></a>

AWS IoT フリートインデックス作成は個々のデバイス接続クエリをサポートしているため、特定のデバイスの接続ステータスと関連メタデータを効率的に取得できます。この機能は、既存のフリート全体のインデックス作成およびクエリ機能を補完します。

## 仕組み
<a name="w2aac37c21b5"></a>

デバイス接続クエリのサポートは、最適化された単一デバイス接続ステータスの取得に使用することができます。この API は、最新のデバイス固有の接続情報への低レイテンシーで高スループットのアクセスを提供します。接続インデックス作成を有効にすると、標準クエリとして課金されるこのクエリ API にアクセスできます。詳細については、「[AWS IoT Device Management 料金表](https://aws.amazon.com/iot-device-management/pricing/#:~:text=Search%20queries%20(per%2010%2C000%20queries))」を参照してください。

## 機能
<a name="w2aac37c21b7"></a>

デバイス接続クエリのサポートにより、次のことが可能になります。

1. `thingName` を使用して、特定のデバイスの現在の接続状態 (接続または切断) をクエリする。

1. 以下を含む追加の接続メタデータを取得する。

   1. 切断の理由

   1. 最新の接続または切断イベントのタイムスタンプ。

   1. キープアライブ期間を含むセッション情報

   1. IP アドレス、ポート、VPC エンドポイント ID などのソケットレベルのセッション情報。この情報は、次の条件が満たされた場合にのみ使用できます。

      1. このオプションは、フリートインデックス作成設定で有効にします。

      1. API を呼び出すときに、IAM ポリシーで対応するアクセス許可があります。

**注記**  
フリートインデックスは、接続 `clientId` が[レジストリ](https://docs.aws.amazon.com/iot/latest/developerguide/thing-registry.html)に登録されているモノの `thingName` と同じであるデバイスの接続ステータスをインデックス化します。

## 利点
<a name="w2aac37c21b9"></a>

1. **低レイテンシー:** 最新のデバイス接続状態を反映し、IoT Core からの接続状態の変化を反映するための低レイテンシーを提供します。IoT Core は、デバイスから切断リクエストを受信すると即時に、または切断リクエストを送信せずにデバイスが切断された場合に、デバイスを切断状態と見なします。IoT Core は、クライアントが切断されたと判断されるまで、設定されたキープアライブ時間の 1.5 倍を待機します。接続ステータス API は、通常 IoT Core がデバイスの接続状態の変更を判定してから 1 秒以内にこれらの変更を反映します。

1. **高スループット:** デフォルトでは 350 トランザクション/秒 (TPS) をサポートしており、リクエストに応じてより高い値に調整できます。

1. **データ保持: **フリートインデックス作成 (FI) ConnectivityIndexing モードが有効で、モノが削除されていない場合に、イベントデータを無期限に保存します。接続インデックス作成を無効にすると、レコードは保持されません。

**注記**  
この API の起動前に接続ステータスインデックス作成が有効になっている場合、フリートインデックス作成は API の起動後に接続ステータスの変更の追跡を開始し、それらの変更に基づいて更新されたステータスを反映します。

## 前提条件
<a name="w2aac37c21c11"></a>

デバイス接続クエリのサポートを使用するには:

1. [AWS アカウントのセットアップ](https://docs.aws.amazon.com/iot/latest/developerguide/setting-up.html)

1. 任意のリージョン AWS IoT Core の にデバイスをオンボードして登録する

1. 接続[インデックス作成を使用してフリートインデックス作成を有効にします](https://docs.aws.amazon.com/iot/latest/developerguide/managing-index.html)。オプション: `includeSocketInformation`オプションを有効にしてソケットレベルの情報を受信するようにオプトインします。

**注記**  
接続インデックス作成が既に有効になっている場合、追加のセットアップは必要ありません。

詳細な手順については、「[AWS IoT デベロッパーガイド](https://docs.aws.amazon.com/iot/latest/developerguide/setting-up.html)」を参照してください。

## 例
<a name="w2aac37c21c13"></a>

**CLI コマンド:**

```
aws iot get-thing-connectivity-data --include-socket-information --thing-name myThingName
```

**レスポンス**:

```
{
   "thingName": "myThingName",
   "connected": true,
   "timestamp": "2024-12-19T10:00:00.000000-08:00",
   "disconnectReason": "NONE",
   "sourceIp": "192.0.2.1",
   "sourcePort": 52123,
   "targetIp": "198.51.100.1",
   "targetPort": 8883,
   "vpcEndpointId": "vpce-1234567890abcdef0",
   "keepAliveDuration": 60,
   "cleanSession": true,
   "clientId": "myThingName"
}
```

**API パラメータ** 
+ `thingName`: AWS IoT レジストリに登録されているデバイスの名前。これは、 AWS IoT Core への接続`clientId`に使用される と一致する必要があります。
+ `includeSocketInformation`: `includeSocketInformation`パラメータは、ソケットレベルのネットワーク情報を API レスポンスに含めるかどうかを制御します。true に設定すると、レスポンスには フィールドが含まれます`sourceIp, sourcePort, targetIp, targetPort, vpcEndpointId`。が指定され`includeSocketInformation`ていない場合、または false に設定されている場合、これらのソケットフィールドはレスポンスから除外されます。特定の IAM ユーザーによるソケット情報へのアクセスを制限するには、`includeSocketInformation`条件キーを false に設定して、IAM ポリシーでこれを指定する必要があります。

**レスポンスフィールド** 
+ `thingName`: AWS IoT レジストリに登録されているデバイスの名前。これは、 AWS IoT Core への接続`clientId`に使用される と一致する必要があります。
+ `connected`: ブール値の true は、このデバイスが現在接続されていることを示します。
+ `disconnectReason`: 切断の理由。接続されたデバイス`NONE`用と、接続されたことのないデバイス`UNKNOWN`用です。切断されたデバイスの場合、これは、切断がクライアントによって開始されたか、サーバーによって開始されたか、認証/認可の問題のためか、ネットワークの問題のためかを示します。切断理由コードについては、[「LifeCycleEvents](https://docs.aws.amazon.com//iot/latest/developerguide/life-cycle-events.html)」を参照してください。
+ `timestamp`: デバイスの最新の接続または切断イベントを表すタイムスタンプ。
+ `clientId`: MQTT クライアントの clientId。
+ `keepAliveDuration`: 接続の確立時にクライアントが指定した秒単位のキープアライブ間隔。これにより、クライアントが接続を維持するためにキープアライブメッセージを送信する頻度が決まります。
+ `cleanSession`: クライアントがクリーンセッションを使用しているかどうかを示します。
+ `sessionExpiry`: 接続の確立時にクライアントが指定した永続的セッションの有効期限設定。これにより、クライアントが切断された後もセッションがアクティブのままになる時間が決まります。
+ `sourceIp`: 接続を開始したクライアントの IP アドレス。`includeSocketInformation` が true に設定され、ユーザーがこの情報を取得する権限がある場合にのみ返されます。
+ `sourcePort`: クライアントが接続に使用するポート番号。`includeSocketInformation` が true に設定され、ユーザーがこの情報を取得する権限がある場合にのみ返されます。
+ `targetIp`: 接続リクエストが行われた IP アドレス。`includeSocketInformation` が true に設定され、ユーザーがこの情報を取得する権限がある場合にのみ返されます 
+ `targetPort`: クライアントが接続した AWS IoT Core エンドポイントのポート番号。`includeSocketInformation` が true に設定され、ユーザーがこの情報を取得する権限がある場合にのみ返されます。
+ `vpcEndpointId`: 該当する場合、クライアントが接続した VPC エンドポイントの ID。`includeSocketInformation` が true に設定され、ユーザーがこの情報を取得する権限がある場合にのみ返されます。

**必要なアクセス許可**

 GetThingConnectivityData API を使用するには、次の IAM アクセス許可が必要です。

`iot:GetThingConnectivityData`

 リソースベースのポリシーを使用して、このアクセス許可を特定のモノにスコープできます。`iot:IncludeSocketInformation` 条件を使用して、ソケット情報にきめ細かなアクセスコントロールを実装します。以下のポリシー例は、ソケット情報へのユーザーアクセスを拒否するシナリオを示しています。この例は、GetThingConnectivityData アクションへのアクセスを許可する唯一のポリシーである場合に機能することに注意してください。

**認可ポリシーの例**

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [ 
  { 
    "Effect": "Allow",
    "Action": [ "iot:GetThingConnectivityData" ],
    "Resource": [ "arn:aws:iot:us-east-1:123456789012:thing/*"],
    "Condition": { 
      "Bool": { 
        "iot:IncludeSocketInformation": "false" 
      } 
    } 
  }] 
}
```