

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

# Greengrass Discovery RESTful API
<a name="greengrass-discover-api"></a>

AWS IoT Greengrass は、クライアントデバイスが接続できる Greengrass コアデバイスを識別するために使用できる `Discover` API オペレーションを提供します。クライアントデバイスはこのデータプレーン操作を使用して、Greengrass コアデバイスに接続するために必要な情報を取得し、それらと [BatchAssociateClientDeviceWithCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_BatchAssociateClientDeviceWithCoreDevice.html) API オペレーションを関連付けます。クライアントデバイスがオンラインになると、 AWS IoT Greengrass クラウドサービスに接続し、検出 API を使用して以下を見つけることができます。
+ 関連付けられている各 Greengrass コアデバイスの IP アドレスとポート。
+ Greengrass コアデバイスを認証するために使用できる、コアデバイスの CA 証明書。

**注記**  
クライアントデバイスは、 の検出クライアントを使用して AWS IoT Device SDK Greengrass コアデバイスの接続情報を検出することもできます。検出クライアントは検出 API を使用します。詳細については次を参照してください:  
[クライアントデバイス通信をテストする](test-client-device-communications.md)
「AWS IoT Greengrass Version 1 デベロッパーガイド」の「[Greengrass Discovery RESTful API](https://docs.aws.amazon.com/greengrass/v1/developerguide/gg-discover-api.html)」。

この API 操作を使用するには、Greengrass データプレーンのエンドポイントの 検出 API に HTTP リクエストを送信します。この API エンドポイントの形式は次のとおりです。

```
https://greengrass-ats.iot.region.amazonaws.com:port/greengrass/discover/thing/thing-name
```

 AWS IoT Greengrass 検出 API でサポートされている AWS リージョン エンドポイントと エンドポイントのリストについては、 の「 [AWS IoT Greengrass V2 エンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/greengrassv2.html)」を参照してください*AWS 全般のリファレンス*。この API 操作は Greengrass データプレーンのエンドポイントでのみ利用できます。コンポーネントおよびデプロイの管理に使用するコントロールプレーンのエンドポイントは、データプレーンのエンドポイントとは異なります。

**注記**  
検出 API は AWS IoT Greengrass V1 と で同じです AWS IoT Greengrass V2。 AWS IoT Greengrass V1 コアに接続するクライアントデバイスがある場合は、クライアントデバイスのコードを変更せずに AWS IoT Greengrass V2 コアデバイスに接続できます。詳細については、「AWS IoT Greengrass Version 1 デベロッパーガイド」の「[Greengrass Discovery RESTful API](https://docs.aws.amazon.com/greengrass/v1/developerguide/gg-discover-api.html)」を参照してください。

**Topics**
+ [検出認証と認可](#greengrass-discover-auth)
+ [リクエスト](#greengrass-discover-request)
+ [応答](#greengrass-discover-response)
+ [cURL でディスカバリ API をテストする](#greengrass-discover-test-request)

## 検出認証と認可
<a name="greengrass-discover-auth"></a>

検出 API を使用して接続情報を取得するには、クライアントデバイスで X.509 クライアント証明書による TLS 相互認証を使用して認証する必要があります。詳細については、「*AWS IoT Core デベロッパーガイド*」の「[X.509 client certificates](https://docs.aws.amazon.com/iot/latest/developerguide/x509-client-certs.html)」を参照してください。

クライアントデバイスには、`greengrass:Discover` アクションを実行する権限がある必要があります。次の AWS IoT ポリシー例では、 という名前の AWS IoT モノを `Discover`自体に対して実行`MyClientDevice1`することを許可します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "greengrass:Discover",
      "Resource": [
        "arn:aws:iot:us-west-2:123456789012:thing/MyClientDevice1"
      ]
    }
  ]
}
```

------

**重要**  
<a name="thing-policy-variable-not-supported"></a>[モノのポリシー変数](https://docs.aws.amazon.com/iot/latest/developerguide/thing-policy-variables.html) (`iot:Connection.Thing.*`) は コアデバイスまたは Greengrass データプレーン操作用の AWS IoT ポリシーではサポートされていません。代わりに、ワイルドカードを使用して名前が似ている複数のデバイスと一致させることができます。たとえば、`MyGreengrassDevice*` と指定すると `MyGreengrassDevice1`、`MyGreengrassDevice2` などと一致します。

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

## リクエスト
<a name="greengrass-discover-request"></a>

次の例で示すように、リクエストにはスタンダードな HTTP ヘッダーが含まれ、Greengrass 検出エンドポイントに送信されます。

ポート番号は、コアデバイスがポート 8443 またはポート 443 のどちらで HTTPS トラフィックを送信するように設定されているかによって異なります。詳細については、「[ポート 443 での接続またはネットワークプロキシを通じた接続](configure-greengrass-core-v2.md#configure-alpn-network-proxy)」を参照してください。

**注記**  
この例では、ATS ルート CA 証明書 (推奨) で機能する Amazon Trust Services (ATS) エンドポイントを使用します。エンドポイントはルート CA 証明書タイプと一致する必要があります。

ポート 8443  

```
HTTP GET https://greengrass-ats.iot.region.amazonaws.com:8443/greengrass/discover/thing/thing-name
```

ポート 443  

```
HTTP GET https://greengrass-ats.iot.region.amazonaws.com:443/greengrass/discover/thing/thing-name
```
ポート 443 に接続するクライアントは、[Application Layer Protocol Negotiation (ALPN)](https://tools.ietf.org/html/rfc7301) の TLS 拡張機能を実装するとともに、`x-amzn-http-ca` を `ProtocolName` として `ProtocolNameList` に渡す必要があります。詳細については、「AWS IoT デベロッパーガイド」の「[プロトコル](https://docs.aws.amazon.com/iot/latest/developerguide/protocols.html)」を参照してください。

## 応答
<a name="greengrass-discover-response"></a>

成功すると、レスポンスヘッダーには HTTP 200 ステータスコードが含まれ、レスポンス本文には検出レスポンスドキュメントが含まれます。

**注記**  
は と同じ検出 API AWS IoT Greengrass V2 を使用するため AWS IoT Greengrass V1、レスポンスは Greengrass グループなどの AWS IoT Greengrass V1 概念に従って情報を整理します。レスポンスには、Greengrass グループのリストが含まれています。では AWS IoT Greengrass V2、各コアデバイスは独自のグループにあり、グループにはそのコアデバイスとその接続情報のみが含まれます。

### 検出レスポンスドキュメントの例
<a name="greengrass-discover-response-examples"></a>

次のドキュメントは、1 つの Greengrass コアデバイスに関連付けられているクライアントデバイスに対するレスポンスを示しています。コアデバイスには、1 つのエンドポイントと 1 つの CA 証明書があります。

```
{
  "GGGroups": [
    {
      "GGGroupId": "greengrassV2-coreDevice-core-device-01-thing-name",
      "Cores": [
        {
          "thingArn": "core-device-01-thing-arn",
          "Connectivity": [
            {
              "id": "core-device-01-connection-id",
              "hostAddress": "core-device-01-address",
              "portNumber": core-device-01-port,
              "metadata": "core-device-01-description"
            }
          ]
        }
      ],
      "CAs": [
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----"
      ]
    }
  ]
}
```

次のドキュメントは、2 つのコアデバイスに関連付けられているクライアントデバイスに対するレスポンスを示しています。コアデバイスには、複数のエンドポイントと複数のグループ CA 証明書があります。

```
{
  "GGGroups": [
    {
      "GGGroupId": "greengrassV2-coreDevice-core-device-01-thing-name",
      "Cores": [
        {
          "thingArn": "core-device-01-thing-arn",
          "Connectivity": [
            {
              "id": "core-device-01-connection-id",
              "hostAddress": "core-device-01-address",
              "portNumber": core-device-01-port,
              "metadata": "core-device-01-connection-1-description"
            },
            {
              "id": "core-device-01-connection-id-2",
              "hostAddress": "core-device-01-address-2",
              "portNumber": core-device-01-port-2,
              "metadata": "core-device-01-connection-2-description"
            }
          ]
        }
      ],
      "CAs": [
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----",
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----",
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----"
      ]
    },
    {
      "GGGroupId": "greengrassV2-coreDevice-core-device-02-thing-name",
      "Cores": [
        {
          "thingArn":"core-device-02-thing-arn",
          "Connectivity" : [
            {
              "id": "core-device-02-connection-id",
              "hostAddress": "core-device-02-address",
              "portNumber": core-device-02-port,
              "metadata": "core-device-02-connection-1-description"
            }
          ]
        }
      ],
      "CAs": [
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----",
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----",
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----"
      ]
    }
  ]
}
```

## cURL でディスカバリ API をテストする
<a name="greengrass-discover-test-request"></a>

`cURL` をインストールしている場合は、検出 API をテストできます。次の例では、Greengrass ディスカバリ API エンドポイントへのリクエストを認証するクライアントデバイスの証明書を指定しています。

```
curl -i \
  --cert 1a23bc4d56.cert.pem \
  --key 1a23bc4d56.private.key \
  https://greengrass-ats.iot.us-west-2.amazonaws.com:8443/greengrass/discover/thing/MyClientDevice1
```

**注記**  
`-i` 引数で HTTP レスポンスヘッダーを出力するように指定します。このオプションを使用すると、エラーの特定に役立ちます。

リクエストが成功すると、コマンドで下記の例のようなレスポンスが出力されます。

```
{
  "GGGroups": [
    {
      "GGGroupId": "greengrassV2-coreDevice-MyGreengrassCore",
      "Cores": [
        {
          "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
          "Connectivity": [
            {
              "Id": "AUTOIP_192.168.1.4_1",
              "HostAddress": "192.168.1.5",
              "PortNumber": 8883,
              "Metadata": ""
            }
          ]
        }
      ],
      "CAs": [
        "-----BEGIN CERTIFICATE-----\ncert-contents\n-----END CERTIFICATE-----\n"
      ]
    }
  ]
}
```

コマンドでエラーが出力される場合は、「[Greengrass ディスカバリの問題のトラブルシューティング](troubleshooting-client-devices.md#greengrass-discovery-issues)」を参照してください。