現在、Apigee と Apigee ハイブリッドのドキュメントを表示しています。
このトピックに対応する Apigee Edge のドキュメントはありません。
症状
Apigee と、Private Service Connect(PSC)によって接続されたサウスバウンド ターゲット サービスの間のネットワーク接続に関する問題。
エラー メッセージ
  Apigee とターゲット サービスの間のネットワーク接続に関する問題や TCP タイムアウトは、503 エラー レスポンスとして表示されます。デバッグ セッションを作成すると、次のようなエラーが表示されます。
{"fault":{"faultstring":"The Service is temporarily unavailable","detail":{"errorcode":"messaging.adaptors.http.flow.ServiceUnavailable","reason":"TARGET_CONNECT_TIMEOUT"}}}考えられる原因
| 原因 | 説明 | 
| サービス アタッチメントと Apigee インスタンスの間のリージョンが異なる | Apigee インスタンス リージョンとサービス アタッチメント リージョンが異なります。 | 
| ターゲット プロジェクトで PSC サブネットの上り(内向き)ファイアウォール ルールが設定されていない | ターゲット プロジェクトに、PSC サブネット範囲の IP アドレスとポートを許可する上り(内向き)ファイアウォール ルールが設定されていることを確認します。 | 
| ターゲット プロジェクトのサービス アタッチメントの構成が正しくない | ターゲット プロジェクトのサービス アタッチメントを確認します。 | 
| Apigee のエンドポイント アタッチメントの状態が正しくない | Apigee でエンドポイント アタッチメントを確認します。 | 
| TargetEndpoint と ILB に設定されたポートが一致しない | API プロキシの TargetEndpoint が、ターゲット プロジェクトの内部ロードバランサ(ILB)で公開されているのと同じポートを使用していることを確認します。 | 
原因: サービス アタッチメントと Apigee インスタンスのリージョンが異なる
診断
- 
      次のいずれかの方法で Apigee インスタンスのリージョンを確認します。  - 従来の Apigee UI を使用する場合: - Apigee UI にログインします。
- [Admin] > [Instances] をクリックします。
- インスタンスをクリックします。
- [Instance details] ペインの [Runtime hosting location] を確認します。
 
-  Google Cloud コンソールで Apigee UI を使用する場合:- 
              
Google Cloud コンソールで、[Apigee インスタンス] ページに移動します。 
- インスタンスをクリックします。
- [インスタンスの詳細] ペインでランタイム ホスティングのロケーションを確認します。
 
- 
              
- API 呼び出しを使用する場合:curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/instances" ここで ORG_NAME は移行の名前です。例: example-apigee-support。次のような内容が返されます。ランタイム ホスティングのロケーションの値は、以下の locationに示されています。例:asia-northeast1。"instances": [ { "name": "asia-northeast1", "location": "asia-northeast1", "host": "10.117.0.2", "port": "443", "createdAt": "1628150049760", "lastModifiedAt": "1682139265367", "diskEncryptionKeyName": "projects/apigee-x-support-apac-05/locations/asia-northeast1/keyRings/phanim-disk-key-1/cryptoKeys/phanim-disk-key-ring-1", "state": "ACTIVE", "peeringCidrRange": "SLASH_20", "runtimeVersion": "1-9-0-apigee-25", "consumerAcceptList": [ "example-apigee-support", "example-neg-project" ], "serviceAttachment": "projects/xb363132eb41cb643p-tp/regions/asia-northeast1/serviceAttachments/apigee-asia-northeast1-yp9o" } 
 
- 従来の Apigee UI を使用する場合: 
- 
        API 呼び出しを使用して、エンドポイント アタッチメントのリージョンを確認します。curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/endpointAttachments/ENDPOINT_ATTACHMENT_NAME" ここで - ORG_NAME は組織の名前です。例: example-apigee-support。
- ENDPOINT_ATTACHMENT_NAME は、エンドポイント アタッチメントの名前です。例: example-ea。
 次のような内容が返されます。エンドポイント アタッチメントのリージョンは、以下の locationに示されている値です。例:asia-northeast1。{ "name": "organizations/example-apigee-support/endpointAttachments/example-ea", "location": "asia-northeast1", "host": "7.0.4.2", "state": "ACTIVE", "connectionState": "ACCEPTED", "serviceAttachment": "projects/target-project/regions/asia-northeast1/serviceAttachments/gkebackend" } 
- ORG_NAME は組織の名前です。例: 
- 
        Cloud コンソールを使用して、サービス アタッチメント リージョンを確認します。- 
          
Google Cloud コンソールで、[Private Service Connect] ページに移動します。 
- [リージョン] 列でロケーションを確認します。
  
- 
          
解決策
 Apigee インスタンス、エンドポイント アタッチメント、サービス アタッチメントのリージョンが同じであることを確認します。例: asia-northeast1。
    制限事項で説明されているように、グローバル アクセスはサポートされていません。つまり、サービス アタッチメントとエンドポイント アタッチメントは同じリージョン内に存在している必要があります。たとえば、Apigee インスタンスがリージョン us-west1 にある場合、us-east2 や他のリージョンにあるサービスを接続することはできません。
リージョンが異なると、Apigee とターゲット サービスの間の接続に関する問題が発生します。
原因: ターゲット プロジェクトで PSC サブネットの上り(内向き)ファイアウォール ルールが設定されていない
診断
PSC サブネット範囲の IP アドレスからターゲット サービスへの接続を許可するファイアウォール ルールがターゲット プロジェクトで設定されていることを確認します。
- 
        
Google Cloud コンソールで、[ファイアウォール] ページに移動します。 
- 
        [VPC ファイアウォール ルール] ペインで、次の例のようなルールが存在することを確認します。- 方向: 上り(内向き)
- 一致したときのアクション: 許可
- ソースフィルタ: IPv4/IPv6 範囲
- IP 範囲: PSC サブネットの IP アドレス範囲(ipCidrRange)。PSC サブネットを説明する次の gcloud コマンドで取得できます。gcloud compute networks subnets describe PSC_SUBNET_NAME --region=REGION ここで - 
                PSC_SUBNET_NAME は PCS サブネット名です。例: pscsub。
- 
                REGION はロケーションです。例: asia-northeast1。
 次のような内容が返されます。 creationTimestamp: '2023-04-19T03:33:29.371-07:00' fingerprint: 1JPKY66teTg= gatewayAddress: 10.10.0.1 id: '5645967773396008342' ipCidrRange: 10.10.0.0/24 kind: compute#subnetwork name: pscsub network: https://www.googleapis.com/compute/v1/projects/target-project/global/networks/default privateIpGoogleAccess: false privateIpv6GoogleAccess: DISABLE_GOOGLE_ACCESS purpose: PRIVATE_SERVICE_CONNECT .... 
- 
                PSC_SUBNET_NAME は PCS サブネット名です。例: 
- プロトコルとポート: ターゲット サービスの構成に従って一覧に表示されるはずです。
 
次に例を示します。
 
    
  解決策
ファイアウォール ルールが設定されていない場合は、サービス アタッチメントを作成するの手順 2 で説明されているとおりに PSC サブネットを作成します。
原因: ターゲット プロジェクトのサービス アタッチメントの構成が正しくない
診断
次のいずれかの方法でサービス アタッチメントのリージョンを確認します。
- Cloud コンソールを使用する場合:- 
            
Google Cloud コンソールで、[Private Service Connect] ページに移動します。 
- [公開サービス] をクリックします。
- サービスをクリックします。
- [リージョン] 行でロケーションを確認します。
  
- 
            
- gcloud commandを使用する場合:- gcloud compute service-attachments describe SERVICE_ATTACHMENT --region=REGION - ここで - 
            SERVICE_ATTACHMENT は、サービス アタッチメント名です。例: gkebackend。
- 
            REGION はロケーションです。例: asia-northeast1。
 - 次のような内容が返されます。 - connectedEndpoints: - endpoint: https://www.googleapis.com/compute/v1/projects/xb363132eb41cb643p-tp/regions/asia-northeast1/forwardingRules/example-ea pscConnectionId: '6816512648152066' status: ACCEPTED connectionPreference: ACCEPT_AUTOMATIC creationTimestamp: '2023-04-19T05:09:09.941-07:00' description: '' enableProxyProtocol: false fingerprint: 0BZDAZ3zDCs= id: '4503680255626733322' kind: compute#serviceAttachment name: gkebackend natSubnets: - https://www.googleapis.com/compute/v1/projects/target-project/regions/asia-northeast1/subnetworks/pscsub pscServiceAttachmentId: high: '21570167574103266' low: '4503680255626733322' region: https://www.googleapis.com/compute/v1/projects/target-project/regions/asia-northeast1 selfLink: https://www.googleapis.com/compute/v1/projects/target-project/regions/asia-northeast1/serviceAttachments/gkebackend targetService: https://www.googleapis.com/compute/v1/projects/target-project/regions/asia-northeast1/forwardingRules/k8s2-tcp-b65prv8v-default-ilb-svc-tv2s6klz 
- 
            SERVICE_ATTACHMENT は、サービス アタッチメント名です。例: 
解決策
- 
      connectedEndpoints.endpointの値が Apigee のテナント プロジェクトを参照していて、ステータスがACCEPTEDであることを確認します。テナント プロジェクトは、Apigee 組織 API を使用して検索できます。curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME" ここで ORG_NAME は組織の名前です。例: example-apigee-support。次のような内容が返されます。ID は apigeeProjectIdという名前のフィールドにあります。例:xb363132eb41cb643p-tp。{ "name": "example-apigee-support", "createdAt": "1628148440954", "lastModifiedAt": "1650563608527", "environments": [ "dev" ], "properties": { "property": [ { "name": "features.mart.connect.enabled", "value": "true" }, { "name": "features.hybrid.enabled", "value": "true" } ] }, "analyticsRegion": "asia-northeast1", "authorizedNetwork": "default", "runtimeType": "CLOUD", "subscriptionType": "PAID", "caCertificate": "CERTIFICATE_NUMBER", "runtimeDatabaseEncryptionKeyName": "projects/example-apigee-support/locations/asia-northeast1/keyRings/phanim-key-ring-1/cryptoKeys/phanim-app-key-1", "projectId": "example-apigee-support", "state": "ACTIVE", "billingType": "SUBSCRIPTION", "addonsConfig": { "advancedApiOpsConfig": {}, "integrationConfig": {}, "monetizationConfig": {} }, "apigeeProjectId": "xb363132eb41cb643p-tp" }
- 
      サウスバウンド ネットワーキング パターンのアタッチメント接続の確認と管理で説明されているとおりに、サービス アタッチメントがエンドポイント アタッチメントと接続していることを確認します。手順 1 の UI で次のことを確認します。- 
          [サブネット] 行が PSC サブネットを参照している。例: pscsub。
- [ターゲット] 行がターゲット バックエンドの正しい内部ロードバランサを参照している。
 
- 
          [サブネット] 行が PSC サブネットを参照している。例: 
原因: Apigee のエンドポイント アタッチメントの状態が正しくない
診断
API 呼び出しを使用して、Apigee のエンドポイント アタッチメントを表示します。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/endpointAttachments/ENDPOINT_ATTACHMENT_NAME"
ここで
- 
        ORG_NAME は組織の名前です。例: example-apigee-support。
- 
        ENDPOINT_ATTACHMENT_NAME は、エンドポイント アタッチメントの名前です。例: example-ea。
次のような内容が返されます。
{ "name": "organizations/example-apigee-support/endpointAttachments/example-ea", "location": "asia-northeast1", "host": "7.0.4.2", "state": "ACTIVE", "connectionState": "ACCEPTED", "serviceAttachment": "projects/target-project/regions/asia-northeast1/serviceAttachments/gkebackend" }
解決策
次のことを確認します。
- stateは- ACTIVEである
- connectionStateは- ACCEPTEDである
- 
        serviceAttachmentは、正しいターゲット プロジェクトとサービス アタッチメント名を参照している
原因: TargetEndpoint と ILB に設定されたポートが一致しない
診断
- ターゲット プロジェクトで、Cloud コンソールを使用して転送ルールが公開しているポートを検索します。- 
          
Google Cloud コンソールで、[Private Service Connect] ページに移動します。 
- [公開サービス] をクリックします。
- サービスをクリックします。次の例に示すように、ポート 80 が公開されています。  
 
- 
          
解決策
    同じポート 80 が API プロキシの TargetEndpoint のポートであることを確認します。
    これを確認するには、API プロキシに移動して TargetEndpoint の URL を確認します。
- 従来の Apigee UI を使用する場合: - Apigee UI にログインします。
- [Develop] > [API Proxies] をクリックします。
- プロキシをクリックします。
- [Develop] をクリックします。
- [XML] ペインで次の内容を確認します。<HTTPTargetConnection> <URL>http://7.0.4.2:80</URL> </HTTPTargetConnection> 
 
-  Google Cloud コンソールで Apigee UI を使用する場合:
        - 
            
Google Cloud コンソールで [Apigee] ページに移動します。 
- [プロキシ開発] エリアで、[API プロキシ] をクリックします。
- プロキシをクリックします。
- [開発] をクリックします。
- [XML] ペインで次の内容を確認します。<HTTPTargetConnection> <URL>http://7.0.4.2:80</URL> </HTTPTargetConnection>
 
- 
            
診断情報の収集が必要な場合
上記の手順でも問題が解決しない場合は、次の診断情報を収集して Google Cloud カスタマーケアに連絡してください。
- Apigee 組織
- 問題が生じている環境と API プロキシ
- ダウンロードしたデバッグ セッション(ここで上記のすべての情報が提供されます)
- 使用しているエンドポイント アタッチメント
- ターゲット プロジェクトとサービス アタッチメント