現在、Apigee と Apigee ハイブリッドのドキュメントを表示しています。
このトピックに対応する Apigee Edge のドキュメントはありません。
現象
API リクエストが TARGET_CONNECT_HOST_NOT_REACHABLE
エラーで失敗します。
エラー メッセージ
この問題が発生すると、API リクエストは次のエラーで失敗し、HTTP 503
レスポンス ステータス コードを返します。
{"fault":{"faultstring": "Unable to resolve host invalid-target-host","detail": {"errorcode":"protocol.http.NoResolvedHost","reason": "TARGET_CONNECT_HOST_NOT_REACHABLE"}}}
考えられる原因
次の原因が考えられます。
原因 | 説明 | プラットフォーム |
指定されたターゲット サーバーのホストが正しくないか、無効な文字が含まれている | この問題は、API プロキシ内で指定されたターゲット サーバーのホストが正しくないか、無効な文字が含まれている場合に発生する可能性があります。 | Apigee、Apigee ハイブリッド |
DNS ピアリングが構成されていない | この問題は、Apigee デプロイで DNS ピアリングが未構成で、Apigee がドメイン名を解決できない場合に発生する可能性があります。 | Apigee |
原因: 指定されたターゲット サーバーのホストが正しくないか、無効な文字が含まれている
診断
-
関連する API プロキシに API リクエストを送信します。
curl -ik https://dev.example.com/dns-peering-example HTTP/2 503 content-type: application/json x-request-id: *** content-length: 169 date: Thu, 02 Nov 2023 04:31:43 GMT via: 1.1 google alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
レスポンス メッセージを確認します。
{"fault":{"faultstring": "Unable to resolve host invalid-target-host","detail": {"errorcode":"protocol.http.NoResolvedHost","reason": "TARGET_CONNECT_HOST_NOT_REACHABLE"}}}
-
レスポンスに
TARGET_CONNECT_HOST_NOT_REACHABLE
というエラーの理由が含まれている場合、この理由に関連しています。
解決策
- API プロキシの定義を確認し、定義されているターゲット ホスト名を見つけます。
- 指定されたターゲット ホスト名が無効であるか、無効な文字が含まれている場合は、それに応じて修正を行い、プロキシの新しいリビジョンを作成してプロキシをデプロイします。
原因: DNS ピアリングが構成されていない
診断
- 次の Apigee API を呼び出して、Apigee 組織が VPC ネットワークとピアリングされているかどうかを確認します。
TOKEN=$(gcloud auth print-access-token)
curl -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/$ORG" | jq .authorizedNetwork
たとえば、VPC ピアリングが有効になっているかどうかを確認するには、レスポンス属性
authorizedNetwork
が存在し、値が設定されているかどうかをチェックします。この条件が満たされていない場合、VPC ピアリングは有効になっていません。TOKEN=$(gcloud auth print-access-token)
curl -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/example-org/" | jq .authorizedNetwork
このレスポンスの例は、VPC ピアリングが有効になっていることを示しています。
"projects/example-org/global/networks/shared-vpc1"
- 顧客側の API プロキシ デベロッパーに、このターゲット サーバーのドメイン名が内部で構成されているかどうか確認します。そうでない場合、このシナリオは該当しません。
- プロジェクト ID と、ターゲット エンドポイントがホストされているネットワークを確認します。
上記のネットワークで作成された DNS ピアリングのリストを表示します。Apigee 組織が VPC ネットワークとピアリングされているかどうかに応じて、次の手順を実施します。
VPC ピアリングが有効になっている場合
組織で VPC ピアリングが有効になっている場合は、
peered-dns-domains list
コマンドを使用します。gcloud services peered-dns-domains list --network=NETWORK --project=PROJECT-ID
ピアリングされた DNS ドメインが使用できない場合は空の結果が返され、使用可能な場合はピアリングされた DNS ドメインのリストが返されます。次に例を示します。
NAME DNS_SUFFIX customer-service customer.service.internal. accounts-service accounts.service.internal.
VPC ピアリングが有効になっていない場合
組織で VPC ピアリングが有効になっていない場合は、次の Apigee API を使用します。
curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type:application/json" \ "https://apigee.googleapis.com/v1/organizations/ORGANIZATION/dnsZones"
ここで、
ORGANIZATION
は Apigee 組織の名前です。組織名が
dns-peering-int-4
であるレスポンスの例を次に示します。{ "dnsZones": [ { "name": "organizations/dns-peering-int-4/dnsZones/demo", "description": "latest", "domain": "demo.com", "peeringConfig": { "targetProjectId": "dns-peering-int-4", "targetNetworkId": "default" }, "state": "ACTIVE" }, { "name": "organizations/dns-peering-int-4/dnsZones/dns-peering-int-4", "description": "latest", "domain": "dns-peering-int-4.com", "peeringConfig": { "targetProjectId": "dns-peering-int-4", "targetNetworkId": "default" }, "state": "ACTIVE" } ] }
関連する DNS サフィックスの DNS ピアリング エントリがレスポンスに表示されない場合、それが問題の原因である可能性があります。解決策の手順で問題を解決してください。
解決策
- DNS サフィックス、プロジェクト ID、ターゲット エンドポイントがホストされているネットワークをメモします。
DNS サフィックスのピアリングされた DNS ドメインを作成します。
VPC ピアリングが有効になっている場合
組織で VPC ピアリングが有効になっている場合は、
peered-dns-domains create
gcloud コマンドを使用します。DNS サフィックスの末尾にはドットを付ける必要があります。gcloud services peered-dns-domains create NAME --network=NETWORK --dns-suffix=DNS-SUFFIX. --project=PROJECT-ID
次に例を示します。
gcloud services peered-dns-domains create orders-service --network="shared-vpc1" --dns-suffix="orders.service.internal." --project=service-project
レスポンス:
Operation "operations/cpdd.p25-1064980322781-fafa5fe4-b5fe-487e-830d-fff0f9a6200d" finished successfully.
VPC ピアリングが有効になっていない場合
組織で VPC ピアリングが有効になっていない場合は、プロジェクトのプライベート DNS ゾーンを使用して DNS ピアリング ゾーンを作成します。
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type:application/json" \ "https://apigee.googleapis.com/v1/organizations/ORGANIZATION/dnsZones?dnsZoneId=DNS_ZONE_ID" \ -d '{ "domain": "DOMAIN", "description": "DESCRIPTION", "peeringConfig": { "targetProjectId": "PRODUCER_PROJECT_ID", "targetNetworkId": "PRODUCER_VPC_NETWORK" } }'
ここで
ORGANIZATION
は実際の Apigee 組織の名前です。DNS_ZONE_ID
は作成する DNS ゾーンの名前です。DOMAIN
はこのマネージド ゾーンの DNS 名です(例:example.com
)。DESCRIPTION
は DNS ゾーンの簡単な説明です。1,024 文字以内で設定してください。PRODUCER_PROJECT_ID
はプロデューサー VPC ネットワークを含むプロジェクトです。PRODUCER_VPC_NETWORK
はお客様のプロジェクト内の VPC ネットワークです。
- API プロキシ エンドポイントに API リクエストを送信し、API プロキシがターゲット サーバーのドメイン名を解決してターゲット サーバーと通信できるかどうかを確認します。
診断情報の収集が必要な場合
上記の手順でも問題が解決しない場合は、次の診断情報を収集して Google Cloud カスタマーケアに連絡してください。
- Google Cloud プロジェクト ID
- Apigee 組織
- API プロキシとリビジョン
- プライベート ドメインが作成されるネットワーク
- プライベート ドメインの DNS サフィックス
- ピアリングされた DNS ドメインの作成コマンドの完全な出力