VPC ピアリングを使用して有料組織をプロビジョニングする

このページの内容は Apigee に適用されます。Apigee ハイブリッドには適用されません。

Apigee Edge ドキュメントを表示する

このドキュメントでは、VPC ピアリングを使用してコマンドラインから Apigee をインストールして構成する方法について説明します。これらの手順は、データ所在地が有効であるかどうかにかかわらず、有料組織のサブスクリプション モデルと従量課金制モデルの両方に適用されます。

ステップの概要

プロビジョニングの手順は次のとおりです。

ステップ 1: 環境変数を定義する

gcloud を設定し、後の手順で使用する環境変数を定義します。

  1. 始める前にに記載されている設定要件を満たしていることを確認してください。
  2. Cloud SDK がインストールされている必要があります。インストールする必要がある場合は、Cloud SDK のインストールをご覧ください。
  3. gcloud CLI の初期化の説明に従って Cloud SDK を初期化するか、前提条件で作成した Google Cloud プロジェクトが gcloud のデフォルト プロジェクトであることを確認します。
  4. コマンド ターミナルで次の環境変数を定義します。必要な組織のタイプに対応するタブ、[データ所在地なし] または [データ所在地] ありを選択します。

    データ所在地を使用しない場合

    AUTH="$(gcloud auth print-access-token)"
    PROJECT_ID="YOUR_PROJECT_ID"
    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
    RUNTIME_LOCATION="YOUR_RUNTIME_LOCATION"
    ANALYTICS_REGION="YOUR_ANALYTICS_REGION"
    BILLING_TYPE="YOUR_BILLING_TYPE"

    ここで

    • AUTH は、署名なしトークンを含む Authentication ヘッダーを定義します。このヘッダーは、Apigee API を呼び出すときに使用します。なお、トークンは一定期間経過すると期限切れになりますが、同じコマンドを使用して簡単に再生成できます。詳細については、print-access-token コマンドのリファレンス ページをご覧ください。
    • PROJECT_ID は、前提条件で作成した Cloud プロジェクト ID です。
    • PROJECT_NUMBER は、前提条件で作成した Cloud プロジェクト番号です。
    • RUNTIME_LOCATION は、後で作成する Apigee インスタンスが配置される物理的なロケーションです。使用可能なランタイム ロケーションのリストについては、Apigee のロケーションをご覧ください。

    • ANALYTICS_REGION は、Apigee 分析データが保存される物理的なロケーションです。使用可能な Apigee API Analytics のリージョンのリストについては、Apigee のロケーションをご覧ください。

      RUNTIME_LOCATIONANALYTICS_REGION は同じリージョンにできますが、同じである必要はありません。

    • BILLING_TYPE は、作成する組織の請求タイプです。指定できる値は次のとおりです。

    データ所在地

    AUTH="$(gcloud auth print-access-token)"
    PROJECT_ID="YOUR_PROJECT_ID"
    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
    RUNTIME_LOCATION="YOUR_RUNTIME_LOCATION"
    CONTROL_PLANE_LOCATION="YOUR_CONTROL_PLANE_LOCATION"
    CONSUMER_DATA_REGION="YOUR_CONSUMER_DATA_REGION"
    BILLING_TYPE="YOUR_BILLING_TYPE"

    ここで

    • AUTH は、署名なしトークンを含む Authentication ヘッダーを定義します。このヘッダーは、Apigee API を呼び出すときに使用します。なお、トークンは一定期間経過すると期限切れになりますが、同じコマンドを使用して簡単に再生成できます。詳細については、print-access-token コマンドのリファレンス ページをご覧ください。
    • PROJECT_ID は、前提条件で作成した Cloud プロジェクト ID です。
    • PROJECT_NUMBER は、前提条件で作成した Cloud プロジェクト番号です。
    • RUNTIME_LOCATION は、後で作成する Apigee インスタンスが配置される物理的なロケーションです。使用可能なランタイム ロケーションのリストについては、Apigee のロケーションをご覧ください。

      ランタイム ロケーションは、コントロール プレーンのロケーション内に存在する必要があります。
    • CONTROL_PLANE_LOCATION は、Apigee コントロール プレーン データが保存される物理的なロケーションです。使用可能なコントロール プレーンのロケーションのリストについては、Apigee のロケーションをご覧ください。現在利用可能なコントロール プレーンのロケーション オプションは、us のみです。
    • CONSUMER_DATA_REGION は、コントロール プレーン リージョンのサブリージョンです。CONTROL_PLANE_LOCATION と CONSUMER_DATA_REGION の両方を指定する必要があります。使用可能なコンシューマー データ リージョンのリストについては、Apigee のロケーションをご覧ください。現在利用可能なコンシューマー データ リージョン オプションは、us コントロール プレーンのロケーション内でのみです。
    • BILLING_TYPE は、作成する組織の請求タイプです。指定できる値は次のとおりです。

  5. (省略可)設定した値をエコーして作業内容を確認します。コマンドで変数を使用する場合は、変数名の前にドル記号($)を付けます。

    データ所在地を使用しない場合

    echo $AUTH
    echo $PROJECT_ID
    echo $PROJECT_NUMBER
    echo $RUNTIME_LOCATION
    echo $ANALYTICS_REGION
    echo $BILLING_TYPE
    

    echo コマンドに対するレスポンスは次のようになります。

    YOUR_TOKEN
    my-cloud-project
    1234567890
    us-west1
    us-west1
    SUBSCRIPTION
    

    データ所在地

    echo $AUTH
    echo $PROJECT_ID
    echo $PROJECT_NUMBER
    echo $RUNTIME_LOCATION
    echo $CONTROL_PLANE_LOCATION
    echo $CONSUMER_DATA_REGION
    echo $BILLING_TYPE
    

    echo コマンドに対するレスポンスは次のようになります。

    YOUR_TOKEN
    my-cloud-project
    1234567890
    us-west1
    us
    us-west1
    SUBSCRIPTION
    

ステップ 2: API を有効にする

  1. Apigee では、いくつかの Google Cloud APIs を有効にする必要があります。次の services enable コマンドを実行して有効にします。

    gcloud services enable apigee.googleapis.com \
        servicenetworking.googleapis.com \
        compute.googleapis.com \
        cloudkms.googleapis.com --project=$PROJECT_ID
  2. (省略可)処理を確認するには、services list コマンドを使用して、有効な API をすべて表示します。

    gcloud services list

    レスポンスには、有効にした API を含むすべての有効なサービスが表示されます。

ステップ 3: Apigee サービス ID を作成する

  1. Apigee サービス ID を作成します。

    gcloud beta services identity create --service=apigee.googleapis.com \
      --project=$PROJECT_ID
  2. エージェントが正常に作成されたことを確認します。レスポンスに service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com の形式でエージェントの名前が表示されます。例:

    Service identity created: service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com

ステップ 4: サービス ネットワーキングを構成する

このステップでは、IP アドレス範囲(/22 と /28 CIDR 範囲)のペアを Apigee に割り振り、ネットワークと Apigee のネットワークの間の VPC ピアリングを実行します。各 Apigee インスタンスには、重複しない /22 CIDR 範囲と /28 CIDR 範囲が必要です。Apigee ランタイム プレーンには、この CIDR 範囲内の IP アドレスが割り当てられます。このため、範囲が Apigee 用に予約されており、VPC ネットワークの他のアプリケーションで使用されないようにする必要があります。詳細と重要な考慮事項については、ピアリングの範囲についてもご覧ください。

1 つの Apigee インスタンスに対して十分なネットワーク IP 範囲を作成しています。追加の Apigee インスタンスを作成する場合は、インスタンスごとにこの手順を繰り返す必要があります。インスタンス間で範囲を共有することはできません。複数リージョンへの Apigee の拡張もご覧ください。

  1. 次の環境変数を作成します。
    RANGE_NAME=YOUR_RANGE_NAME
    NETWORK_NAME=YOUR_NETWORK_NAME
    

    ここで

    • RANGE_NAME は、作成する IP アドレス範囲の名前です。範囲の名前は自由に設定できます。例: google-svcs
    • NETWORK_NAME は、アドレスが予約されたネットワーク リソースの名前です。

      Google により、新しいプロジェクトごとにデフォルト ネットワーク(名前は default)が作成されるため、このネットワークを使用できます。ただし、テスト以外のネットワークには、デフォルト ネットワークの使用はおすすめしません。

  2. CIDR /22 のネットワーク IP 範囲を作成します。
    gcloud compute addresses create $RANGE_NAME \
      --global \
      --prefix-length=22 \
      --description="Peering range for Apigee services" \
      --network=$NETWORK_NAME \
      --purpose=VPC_PEERING \
      --addresses=OPTIONAL_ADDRESSES \
      --project=$PROJECT_ID

    ここで、--addresses にアドレス範囲を指定できます(省略可)。たとえば、CIDR ブロック 192.168.0.0/22 を割り振るには、アドレスに 192.168.0.0 を指定し、接頭辞の長さに 22 を指定します。IP 割り振りを作成するもご覧ください。

    --addresses パラメータを指定しない場合、使用可能なアドレス範囲が gcloud により選択されます。

    成功すると、gcloud は次のレスポンスを返します。

    Created [https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/global/addresses/google-svcs].

    IP アドレスの範囲を作成すると、そのアドレスを解放するまで、アドレスがプロジェクトに関連付けられます。

  3. ネットワーク IP 範囲が /22 の長さの CIDR で作成されていることを確認します。
    gcloud compute addresses list --global --project=$PROJECT_ID
    gcloud compute addresses describe $RANGE_NAME --global --project=$PROJECT_ID
  4. CIDR /28 のネットワーク IP 範囲を作成します。この範囲は必須で、トラブルシューティングの目的で Apigee によって使用されます。カスタマイズや変更はできません。
    gcloud compute addresses create google-managed-services-support-1 \
      --global \
      --prefix-length=28 \
      --description="Peering range for supporting Apigee services" \
      --network=$NETWORK_NAME \
      --purpose=VPC_PEERING \
      --addresses=OPTIONAL_ADDRESSES \
      --project=$PROJECT_ID

    ここで、--addresses にアドレス範囲を指定できます(省略可)。たとえば、CIDR ブロック 192.168.0.0/28 を割り振るには、アドレスに 192.168.0.0 を指定し、接頭辞の長さに 28 を指定します。IP 割り振りを作成するもご覧ください。

    --addresses パラメータを指定しない場合、使用可能なアドレス範囲が gcloud により選択されます。

  5. ネットワーク IP 範囲が /28 の長さの CIDR で作成されていることを確認します。
    gcloud compute addresses list --global --project=$PROJECT_ID
    gcloud compute addresses describe google-managed-services-support-1 --global \
      --project=$PROJECT_ID
  6. 次のコマンドを使用して、サービスをネットワークに接続します。
    gcloud services vpc-peerings connect \
      --service=servicenetworking.googleapis.com \
      --network=$NETWORK_NAME \
      --ranges=$RANGE_NAME,google-managed-services-support-1 \
      --project=$PROJECT_ID

    このオペレーションは、完了するまでに数分かかることがあります。成功すると、gcloud から次のレスポンスが返されます。ここで OPERATION_IDLRO の UUID です。

    Operation "operations/OPERATION_ID" finished successfully.
  7. Apigee は、お客様のネットワークと Google のサービスの間の接続を作成します。具体的には、VPC ピアリングを介してプロジェクトを Service Networking API に接続します。また、Apigee は IP アドレスをプロジェクトに関連付けます。

  8. 数分後、VPC ピアリングが成功したかどうかを確認します。
    gcloud services vpc-peerings list \
      --network=$NETWORK_NAME \
      --service=servicenetworking.googleapis.com \
      --project=$PROJECT_ID

ステップ 5: 組織を作成する

組織を作成する前に、ランタイム データベース暗号鍵のキーリングと鍵(ステップ 1 を参照)を作成する必要があります。また、データ所在地を使用している場合は、コントロール プレーンの暗号化キーリングと鍵(ステップ 2 を参照)を作成する必要があります。これらの Cloud KMS 鍵は、ランタイムとコントロール プレーンのロケーション全体で保存、複製されるデータを暗号化します。Apigee はこれらのエンティティを使用して、KVM、キャッシュ、クライアント シークレットなどのアプリケーション データを暗号化し、データベースに保存します。詳細については、Apigee 暗号鍵についてをご覧ください。

  1. ランタイム データベースの暗号化キーリングと鍵を作成します。

    1. ランタイム データベースの暗号化リングと鍵のロケーションの環境変数を定義します。これにより、環境変数の作成時に整合性を保つことができ、ドキュメントの手順に沿った操作が容易になります。

      値は、ランタイム データベースの暗号化キーリングと鍵が保存される物理的なロケーションです。

      シングル リージョン

      シングル リージョン構成(1 つのリージョンに 1 つのインスタンスのみが存在): サポートされている KMS リージョン ロケーションから選択します。

      次に例を示します。

      RUNTIMEDBKEY_LOCATION="us-west1"

      $RUNTIME_LOCATION と(またリージョンとも)同じ値を設定できますが、同一である必要はありません。ただし、同じであれば、パフォーマンス上のメリットが得られることがあります。

      マルチリージョン

      マルチリージョン構成: サポートされているマルチリージョンのロケーションuseurope など)またはデュアルリージョンのロケーションから選択します。

      次に例を示します。

      RUNTIMEDBKEY_LOCATION="us"

      米国内にマルチリージョン構成がある場合は、可能であれば、ロケーションに us を使用することをおすすめします。それ以外の場合は、nam4 を使用します。

    2. データベース キーリングと鍵名の環境変数を定義します。

      キーリングの名前は組織に固有のものである必要があります。2 番目のリージョンまたは後続のリージョンを作成する場合、他のキーリングと同じ名前にすることはできません。

      RUNTIMEDB_KEY_RING_NAME=YOUR_DB_KEY_RING_NAME
      RUNTIMEDB_KEY_NAME=YOUR_DB_KEY_NAME
    3. (省略可)設定した値をエコーして作業内容を確認します。コマンドで変数を使用する場合は、変数名の前にドル記号($)を付けます。
      echo $RUNTIMEDBKEY_LOCATION
      echo $RUNTIMEDB_KEY_RING_NAME
      echo $RUNTIMEDB_KEY_NAME
    4. 新しいキーリングを作成します。
      gcloud kms keyrings create $RUNTIMEDB_KEY_RING_NAME \
        --location $RUNTIMEDBKEY_LOCATION --project $PROJECT_ID

      Apigee ランタイム データベースの暗号鍵のロケーションは、Cloud HSMCloud EKM をサポートするすべての Cloud KMS のロケーションに対応しています。

    5. 鍵を作成します。

      gcloud kms keys create $RUNTIMEDB_KEY_NAME \
        --keyring $RUNTIMEDB_KEY_RING_NAME \
        --location $RUNTIMEDBKEY_LOCATION \
        --purpose "encryption" \
        --project $PROJECT_ID

      このコマンドを実行すると、鍵が作成され、キーリングに追加されます。

      鍵 ID を取得します。

      gcloud kms keys list \
        --location=$RUNTIMEDBKEY_LOCATION \
        --keyring=$RUNTIMEDB_KEY_RING_NAME \
        --project=$PROJECT_ID

      鍵 ID の構文は次のとおりです(ファイルパスに似ています)。

      projects/PROJECT_ID/locations/RUNTIMEDBKEY_LOCATION/keyRings/RUNTIMEDB_KEY_RING_NAME/cryptoKeys/RUNTIMEDB_KEY_NAME
    6. 鍵 ID を環境変数に設定します。この変数は後のコマンドで使用します。

      RUNTIMEDB_KEY_ID=YOUR_RUNTIMEDB_KEY_ID
    7. Apigee サービス エージェントに、新しい鍵を使用するためのアクセス権を付与します。

      gcloud kms keys add-iam-policy-binding $RUNTIMEDB_KEY_NAME \
        --location $RUNTIMEDBKEY_LOCATION \
        --keyring $RUNTIMEDB_KEY_RING_NAME \
        --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project $PROJECT_ID

      このコマンドにより、鍵が Apigee サービス エージェントにバインドされます。

      このリクエストが正常に完了すると、gcloud から次のようなレスポンスが返されます。

      Updated IAM policy for key [runtime].
      bindings:
      - members:
        - serviceAccount:service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com
        role: roles/cloudkms.cryptoKeyEncrypterDecrypter
      etag: BwWqgEuCuwk=
      version: 1

      次のようなエラーが発生することがあります。

      INVALID_ARGUMENT: Role roles/cloudkms.cryptokms.cryptoKeyEncrypterDecrypter is not supported for this resource.

      サービス アカウントのメールアドレスにプロジェクト名ではなく、プロジェクト番号を使用していることを確認してください。

  2. データ所在地を使用している場合は、コントロール プレーンの暗号化キーリングと鍵を作成します。データ所在地を使用していない場合は、ステップ 3 に進みます。
  3. コントロール プレーンの暗号化キーリングと鍵を作成するには、次の操作を行います。

    1. コントロール プレーン データベースの暗号化リングと鍵のロケーションの環境変数を定義します。
      CONTROL_PLANE_LOCATION=YOUR_CONTROL_PLANE_LOCATION
      CONSUMER_DATA_REGION=YOUR_CONSUMER_DATA_REGION

      ここで

      • CONTROL_PLANE_LOCATION は、Apigee コントロール プレーン データが保存される物理的なロケーションです。使用可能なコントロール プレーンのロケーションのリストについては、Apigee のロケーションをご覧ください。
      • CONSUMER_DATA_REGION は、コントロール プレーン リージョンのサブリージョンです。CONTROL_PLANE_LOCATION と CONSUMER_DATA_REGION の両方を指定する必要があります。使用可能なコンシューマー データ リージョンのリストについては、Apigee のロケーションをご覧ください。
    2. コントロール プレーン データベースのキーリングとキー名の環境変数を定義します。

      キーリングの名前は組織に固有のものである必要があります。

      CONTROL_PLANE_KEY_RING_NAME=YOUR_CONTROL_PLANE_KEY_RING_NAME
      CONTROL_PLANE_KEY_NAME=YOUR_CONTROL_PLANE_KEY_NAME
      CONSUMER_DATA_KEY_RING_NAME=YOUR_CONSUMER_DATA_KEY_RING_NAME
      CONSUMER_DATA_KEY_NAME=YOUR_CONSUMER_DATA_REGION_KEY_NAME

      ここで

      • CONTROL_PLANE_KEY_RING_NAME は、コントロール プレーン暗号化キーリングの識別に使用するキーリングの名前です。
      • CONTROL_PLANE_KEY_NAME は、コントロール プレーンの暗号鍵の識別に使用する鍵の名前です。
      • CONSUMER_DATA_KEY_RING_NAME は、コンシューマー データ リージョンの暗号化キーリングの識別に使用するキーリングの名前です。
      • CONSUMER_DATA_KEY_NAME は、一般ユーザー向けデータ リージョンの暗号鍵の識別に使用する鍵の名前です。
    3. 新しいキーリングを作成します。
      gcloud kms keyrings create $CONTROL_PLANE_KEY_RING_NAME \
        --location $CONTROL_PLANE_LOCATION \
        --project $PROJECT_ID
      gcloud kms keyrings create $CONSUMER_DATA_KEY_RING_NAME \
        --location $CONSUMER_DATA_REGION \
        --project $PROJECT_ID
    4. 鍵を作成します。
      gcloud kms keys create $CONTROL_PLANE_KEY_NAME \
        --keyring $CONTROL_PLANE_KEY_RING_NAME \
        --location $CONTROL_PLANE_LOCATION \
        --purpose "encryption" \
        --project $PROJECT_ID
      gcloud kms keys create $CONSUMER_DATA_KEY_NAME \
        --keyring $CONSUMER_DATA_KEY_RING_NAME \
        --location $CONSUMER_DATA_REGION \
        --purpose "encryption" \
        --project $PROJECT_ID

      このコマンドを実行すると、鍵が作成され、キーリングに追加されます。

      鍵 ID を取得します。

      gcloud kms keys list \
      --location=$CONTROL_PLANE_LOCATION \
      --keyring=$CONTROL_PLANE_KEY_RING_NAME \
      --project=$PROJECT_ID
      gcloud kms keys list \
      --location=$CONSUMER_DATA_REGION \
      --keyring=$CONSUMER_DATA_KEY_RING_NAME \
      --project=$PROJECT_ID

      鍵 ID の構文は次のとおりです(ファイルパスに似ています)。

      projects/PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/CONTROL_PLANE_KEY_RING_NAME/cryptoKeys/CONTROL_PLANE_KEY_NAME
      projects/PROJECT_ID/locations/CONSUMER_DATA_REGION/keyRings/CONSUMER_DATA_KEY_RING_NAME/cryptoKeys/CONSUMER_DATA_KEY_NAME
    5. 鍵 ID を環境変数に設定します。この変数は後のコマンドで使用します。
      CONTROL_PLANE_KEY_ID=YOUR_CONTROL_PLANE_KEY_ID
      
      CONSUMER_DATA_KEY_ID=YOUR_CONSUMER_DATA_KEY_ID
    6. Apigee サービス エージェントに、新しい鍵を使用するためのアクセス権を付与します。
      gcloud kms keys add-iam-policy-binding $CONTROL_PLANE_KEY_NAME \
        --location $CONTROL_PLANE_LOCATION \
        --keyring $CONTROL_PLANE_KEY_RING_NAME \
        --member "serviceAccount:service-$PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project $PROJECT_ID
      
      gcloud kms keys add-iam-policy-binding $CONSUMER_DATA_KEY_NAME \
       --location $CONSUMER_DATA_REGION \
       --keyring $CONSUMER_DATA_KEY_RING_NAME \
       --member "serviceAccount:service-$PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \
       --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
       --project $PROJECT_ID
      

      このコマンドにより、鍵が Apigee サービス エージェントにバインドされます。このリクエストが正常に完了すると、gcloud から次のようなレスポンスが返されます。

      Updated IAM policy for key [runtime].
      bindings:
      - members:
        - serviceAccount:service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com
        role: roles/cloudkms.cryptoKeyEncrypterDecrypter
      etag: BwWqgEuCuwk=
      version: 1
      

      次のようなエラーが発生することがあります。

      INVALID_ARGUMENT: Role roles/cloudkms.cryptokms.cryptoKeyEncrypterDecrypter is not supported for this resource.
      

      サービス アカウントのメールアドレスにプロジェクト名ではなく、プロジェクト番号を使用していることを確認してください。

    CMEK のトラブルシューティングもご覧ください。

  4. 組織を作成するには、次のリクエストを Apigee organizations API に送信します。

    データ所在地を使用しない場合

    curl "https://apigee.googleapis.com/v1/organizations?parent=projects/$PROJECT_ID"  \
      -H "Authorization: Bearer $AUTH" \
      -X POST \
      -H "Content-Type:application/json" \
      -d '{
        "name":"'"$PROJECT_ID"'",
        "analyticsRegion":"'"$ANALYTICS_REGION"'",
        "runtimeType":"CLOUD",
        "billingType":"'"$BILLING_TYPE"'",
        "authorizedNetwork":"'"$NETWORK_NAME"'",
        "runtimeDatabaseEncryptionKeyName":"'"$RUNTIMEDB_KEY_ID"'"
      }'

    ここで

    • -d には、リクエストのデータ ペイロードを定義します。このペイロードには、次のものを含める必要があります。
      • name: 新しい組織を指定します。プロジェクト ID と同じ名前にする必要があります。

      • analyticsRegion: 分析データを保存する物理的な場所を指定します。

      • runtimeType: CLOUD に設定します。
      • billingType: 作成した組織の請求タイプを指定します。
      • authorizedNetwork: サービス ネットワーキングの構成で指定したピアリング ネットワークを指定します。
      • runtimeDatabaseEncryptionKeyName: 前の手順で作成したアプリケーション暗号鍵の ID。ID はファイルパスのような構造になっています。例:
        projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key

    データ所在地

    API を使用して組織を作成します。

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations?parent=projects/$PROJECT_ID"  \
      -H "Authorization: Bearer $AUTH" \
      -X POST \
      -H "Content-Type:application/json" \
      -d '{
        "name":"'"$PROJECT_ID"'",
        "runtimeType":"CLOUD",
        "billingType":"'"$BILLING_TYPE"'",
        "controlPlaneEncryptionKeyName":"'"$CONTROL_PLANE_KEY_ID"'",
        "apiConsumerDataLocation":"'"$CONSUMER_DATA_REGION"'",
        "apiConsumerDataEncryptionKeyName":"'"$CONSUMER_DATA_KEY_ID"'",
        "authorizedNetwork":"'"$NETWORK_NAME"'",
        "runtimeDatabaseEncryptionKeyName":"'"$RUNTIMEDB_KEY_ID"'"
      }'

    ここで

    -d には、リクエストのデータ ペイロードを定義します。このペイロードには、次のものを含める必要があります。

    • name: 新しい組織を指定します。プロジェクト ID と同じ名前にする必要があります。
    • runtimeType: CLOUD に設定します。
    • billingType: 作成した組織の請求タイプを指定します。
    • controlPlaneEncryptionKeyName: コントロール プレーンのキー ID。
    • apiConsumerDataLocation: 内部リソースで使用するサブリージョンも指定する必要があります。サポートされている値については、データ所在地のリージョンをご覧ください。
    • apiConsumerDataEncryptionKeyName: コンシューマー データ リージョン キー ID。
    • authorizedNetwork: サービス ネットワーキングの構成で指定したピアリング ネットワークを指定します。
    • runtimeDatabaseEncryptionKeyName: 前の手順で作成したアプリケーション暗号鍵の ID。ID はファイルパスのような構造になっています。例:
      projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key

    このコマンドを実行すると、Apigee は「長時間実行オペレーション」を開始します。完了までに数分かかることがあります。

    エラーが発生した場合は、データ ペイロード内の変数値が引用符で囲まれているかどうか確認してください。次の例のように、$PROJECT_ID 変数を二重引用符、単一引用符、二重引用符で囲んでください。

    "'"$PROJECT_ID"'"

    リクエスト値に(環境変数ではなく)書式なし文字列を使用する場合は、次の例に示すように、単一引用符で囲まれたペイロード文字列内で文字列を二重引用符で囲みます。

    '{ "name":"my-gcp-project", ... }'
  5. 数分お待ちください。
  6. 作成リクエストのステータスを確認するには、次の例のように Apigee List organizations APIGET リクエストを送信します。

    データ所在地を使用しない場合

    curl -H "Authorization: Bearer $AUTH" "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID"

    データ所在地

    curl -H "Authorization: Bearer $AUTH" "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID"

    次のレスポンスが表示された場合、組織の作成はまだ完了していません。

    {
      "error": {
        "code": 403,
        "message": "Permission denied on resource \"organizations/apigee-docs-m\" (or it may not exist)",
        "status": "PERMISSION_DENIED"
      }
    }

    Apigee で新しい組織が正常に作成された場合、次のようなレスポンスを受け取ります。

    データ所在地を使用しない場合

    {
      "name": "my-cloud-project",
      "createdAt": "1592586495539",
      "lastModifiedAt": "1592586495539",
      "environments": [],
      "properties": {
        "property": [
          {
            "name": "features.hybrid.enabled",
            "value": "true"
          },
          {
            "name": "features.mart.connect.enabled",
            "value": "true"
          }
        ]
      },
      "analyticsRegion": "us-west1",
      "runtimeType": "CLOUD",
      "subscriptionType": "PAID",
      "caCertificate": "YOUR_CERTIFICATE",
      "authorizedNetwork": "my-network",
      "projectId": "my-cloud-project"
    }

    データ所在地

      {
        "name": "my-cloud-project",
        "createdAt": "1681412783749",
        "lastModifiedAt": "1681412783749",
        "environments": [
          "test-env"
        ],
        "properties": {
          "property": [
            {
              "name": "features.mart.connect.enabled",
              "value": "true"
            },
            {
              "name": "features.hybrid.enabled",
              "value": "true"
            }
          ]
        },
        "authorizedNetwork": "default",
        "runtimeType": "CLOUD",
        "subscriptionType": "PAID",
        "caCertificate": "YOUR_CERTIFICATE",
        "runtimeDatabaseEncryptionKeyName": "projects/my-cloud-project/locations/us/keyRings/my-key-ring/cryptoKeys/my-key-name",
        "projectId": "my-cloud-project",
        "state": "ACTIVE",
        "billingType": "PAYG",
        "addonsConfig": {
          "advancedApiOpsConfig": {},
          "integrationConfig": {},
          "monetizationConfig": {},
          "connectorsPlatformConfig": {}
        },
        "apiConsumerDataEncryptionKeyName": "projects/my-cloud-project/locations/us-central1/keyRings/my-key-ring/cryptoKeys/my-key-name",
        "controlPlaneEncryptionKeyName": "projects/my-cloud-project/locations/us/keyRings/my-key-ring/cryptoKeys/my-key-name",
        "apiConsumerDataLocation": "us-central1",
        "apigeeProjectId": "i0c2a37e80f9850ab-tp"
      }
    
    

    Apigee から HTTP エラー レスポンスが返された場合は、Apigee 組織を作成するをご覧ください。

ステップ 6: ランタイム インスタンスを作成する

ランタイム インスタンスは、Apigee プロジェクトと関連サービスが保存される場所です。これは、サービスにユーザー向けのエンドポイントを提供します。新しいランタイム インスタンスを作成するには:

  1. Apigee で組織の作成が完了したかを確認します。Apigee 組織を作成するで新しい組織を作成するリクエストを送信しましたが、続行する前に、この手順を完了していることを確認する必要があります。

    確認するには、次のリクエストを Organizations API に送信します。

    データ所在地を使用しない場合

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID"

    データ所在地

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID"

    組織が存在していて、適切な権限がある場合、Apigee から組織に関する詳細情報が返されます。Apigee によってエラーが返された場合は、数分待ってから、もう一度リクエストを送信してください。

  2. 前述のデータベースに暗号鍵を作成したタスクと同様に、サーバー側でデータの暗号化に使用する Cloud KMS 鍵を作成する必要があります。はじめに、次の環境変数を定義します。
    INSTANCE_NAME=YOUR_INSTANCE_NAME
    RUNTIME_LOCATION=YOUR_RUNTIME_LOCATION
    DISK_KEY_RING_NAME=YOUR_DISK_KEY_RING_NAME
    DISK_KEY_NAME=YOUR_DISK_KEY_NAME
  3. ここで

    • INSTANCE_NAME: 新しいインスタンスの名前。例: my-runtime-instance。名前の先頭は小文字にし、長さは 32 文字以下にする必要があります。また、使用できるのは小文字、数字、ハイフンのみです。先頭または末尾をハイフンにすることはできません。また 2 文字以上にする必要があります。
    • RUNTIME_LOCATION は、クラスタがホストされている物理的な場所です。有効な値は、Compute Engine によって許可されている任意のロケーションです(使用可能なリージョンとゾーンをご覧ください)。この例では us-west1 を使用しています。
    • DISK_KEY_RING_NAME は、ディスクの暗号化キーリングの名前です。
    • DISK_KEY_NAME はディスク暗号鍵の名前です。
  4. ディスク暗号鍵を作成します。
    1. 新しいディスク キーリングを作成します。
      gcloud kms keyrings create $DISK_KEY_RING_NAME \
        --location $RUNTIME_LOCATION \
        --project $PROJECT_ID

      ディスク キーリングは、インスタンスと同じロケーションに設定する必要があります。各インスタンスとキーリングには、それぞれ独自のロケーションが必要です。

    2. 新しいディスク鍵を作成します。
      gcloud kms keys create $DISK_KEY_NAME \
        --keyring $DISK_KEY_RING_NAME \
        --location $RUNTIME_LOCATION \
        --purpose "encryption" \
        --project $PROJECT_ID

      鍵は、鍵のパスで参照できます。鍵パスは、次のコマンドで取得できます。

      gcloud kms keys list \
        --location=$RUNTIME_LOCATION \
        --keyring=$DISK_KEY_RING_NAME \
        --project=$PROJECT_ID

      鍵パスは次のようになります。

      projects/PROJECT_ID/locations/RUNTIME_LOCATION/keyRings/my-disk-key-ring/cryptoKeys/my-disk-key
    3. 鍵パスを環境変数に設定します。この変数は後のコマンドで使用します。

      DISK_KEY_ID=YOUR_DISK_KEY_ID

      例: DISK_KEY_ID=projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key

    4. Apigee サービス エージェントに、新しい鍵を使用するためのアクセス権を付与します。

      gcloud kms keys add-iam-policy-binding $DISK_KEY_NAME \
        --location $RUNTIME_LOCATION \
        --keyring $DISK_KEY_RING_NAME \
        --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project $PROJECT_ID

      このコマンドにより、鍵が Apigee サービス エージェントにバインドされます。

    詳細については、Apigee 暗号鍵についてをご覧ください。

  5. Apigee インスタンスの作成に使用する IP 範囲を予約します。
  6. Apigee Instances APIPOST リクエストを送信して、プロジェクトの新しいランタイム インスタンスを作成します。

    データ所在地を使用しない場合

    curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances" \
      -X POST -H "Authorization: Bearer $AUTH" \
      -H "Content-Type:application/json" \
      -d '{
        "name":"'"$INSTANCE_NAME"'",
        "location":"'"$RUNTIME_LOCATION"'",
        "diskEncryptionKeyName":"'"$DISK_KEY_ID"'",
        "consumerAcceptList":["'"$PROJECT_ID"'"]
      }'

    データ所在地

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances" \
      -X POST -H "Authorization: Bearer $AUTH" \
      -H "Content-Type:application/json" \
      -d '{
        "name":"'"$INSTANCE_NAME"'",
        "location":"'"$RUNTIME_LOCATION"'",
        "diskEncryptionKeyName":"'"$DISK_KEY_ID"'",
        "consumerAcceptList":["'"$PROJECT_ID"'"]
      }'

    ここで

    • consumerAcceptList(省略可)Apigee VPC のサービス アタッチメントにプライベート接続できる Google Cloud プロジェクト ID のリストを指定します。サービス アタッチメントは、Google Cloud Private Service Connect で使用されるエンティティであり、サービス プロデューサー(この場合は Apigee)がサービスをコンシューマー(この場合は、所有している 1 つ以上のクラウド プロジェクト)に公開できるようにします。デフォルトでは、Apigee 組織にすでに関連付けられている Cloud プロジェクトが使用されます。例: "consumerAcceptList": ["project1", "project2", "project3"]

      インスタンス UI で、承認済みプロジェクトのリストを設定および変更することもできます。詳細については、インスタンスの管理をご覧ください。

    この注意事項は、VPC ピアリングを使用しない場合のトピックには含まれていません。 この注意事項は、VPC ピアリングを使用しない場合のトピックには含まれていません。

    Apigee で新しい Kubernetes クラスタを作成して起動し、そのクラスタに Apigee リソースをインストールして、ロード バランシングを設定する必要があるため、このリクエストには 20 分ほどかかることがあります。

    Apigee からエラーが返された場合は、新しいインスタンスの作成をご覧ください。

  7. ランタイム インスタンスの作成リクエストのステータスを確認するには、次のコマンドを実行します。ステータスが ACTIVE の場合、次のステップに進みます。

    データ所在地を使用しない場合

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME"

    データ所在地

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME"

ステップ 7: 環境を作成する

環境を作成し、コマンドラインで環境をランタイムに接続するには:

  1. このセクションで使用する環境変数を定義します。作成する特定の環境変数は、サブスクリプションまたは従量制の組織に環境を作成するかどうかによって異なります。

    サブスクリプション

    サブスクリプション環境の場合は、次の変数を作成します。

    ENVIRONMENT_NAME="YOUR_ENV_NAME"
    ENV_GROUP_NAME="YOUR_ENV_GROUP_NAME"
    ENV_GROUP_HOSTNAME="YOUR_ENV_GROUP_HOSTNAME"

    ここで

    • ENVIRONMENT_NAME は文字列名です。例: test
    • ENV_GROUP_NAME は文字列名です。例: test-group
    • ENV_GROUP_HOSTNAME は、有効なドメインホスト名です。例: foo.example.com

    従量課金制

    従量課金制環境の場合は、次の変数を作成します。

    ENVIRONMENT_NAME="YOUR_ENV_NAME"
    ENVIRONMENT_TYPE="YOUR_ENV_TYPE"
    ENV_GROUP_NAME="YOUR_ENV_GROUP_NAME"
    ENV_GROUP_HOSTNAME="YOUR_ENV_GROUP_HOSTNAME"

    ここで

    • ENVIRONMENT_NAME は文字列名です。例: test
    • ENVIRONMENT_TYPE は、この環境の環境タイプで、従量課金制(更新された属性)ユーザーにのみ適用されます。このユーザーは BASEINTERMEDIATECOMPREHENSIVE のいずれかの値を指定する必要があります。他のユーザーは環境タイプを省略します。
    • ENV_GROUP_NAME は文字列名です。例: test-group
    • ENV_GROUP_HOSTNAME は、有効なドメインホスト名です。例: foo.example.com
  2. Environments API を使用して新しい環境を作成します。使用する特定のコマンドは、作成する環境がサブスクリプション組織用か従量課金制の組織用かによって異なります。

    サブスクリプション

    新しいサブスクリプション環境の場合は、次のコマンドを使用します。

    データ所在地を使用しない場合

    curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments" \
        -H "Authorization: Bearer $AUTH" \
        -X POST \
        -H "Content-Type:application/json" \
        -d '{
          "name":"'"$ENVIRONMENT_NAME"'"
      }'

    データ所在地

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments" \
        -H "Authorization: Bearer $AUTH" \
        -X POST \
        -H "Content-Type:application/json" \
        -d '{
          "name":"'"$ENVIRONMENT_NAME"'"
      }'

    Apigee により新しい環境が作成されます。

    従量課金制

    新しい従量課金制環境の場合は、次のコマンドを使用します。

    データ所在地を使用しない場合

    curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments" \
        -H "Authorization: Bearer $AUTH" \
        -X POST \
        -H "Content-Type:application/json" \
        -d '{
          "name":"'"$ENVIRONMENT_NAME"'",
          "type":"'"$ENVIRONMENT_TYPE"'"
      }'

    データ所在地

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments" \
        -H "Authorization: Bearer $AUTH" \
        -X POST \
        -H "Content-Type:application/json" \
        -d '{
          "name":"'"$ENVIRONMENT_NAME"'",
          "type":"'"$ENVIRONMENT_TYPE"'"
      }'

    Apigee により新しい環境が作成されます。

  3. 続行する前に、Environments API を呼び出して、Apigee によって新しい環境の作成が完了したことを確認します。

    データ所在地を使用しない場合

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments"

    データ所在地

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments"

    Apigee により使用可能な環境のリストが返されます。たとえば、環境名が test の場合、Apigee により次のレスポンスが返されます。

    [
      "test"
    ]
  4. 新しい環境をランタイム インスタンスに接続します。

    データ所在地を使用しない場合

    curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME/attachments" \
        -X POST -H "Authorization: Bearer $AUTH" \
        -H "content-type:application/json" \
        -d '{
          "environment":"'"$ENVIRONMENT_NAME"'"
        }'

    データ所在地

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME/attachments" \
        -X POST -H "Authorization: Bearer $AUTH" \
        -H "content-type:application/json" \
        -d '{
          "environment":"'"$ENVIRONMENT_NAME"'"
        }'

    このオペレーションは、完了するまでに数分かかることがあります。接続が完了したかどうかを確認するには、次のコマンドを実行します。

    データ所在地を使用しない場合

    curl -i -H "Authorization: Bearer $AUTH" \
      "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME/attachments"

    データ所在地

    curl -i -H "Authorization: Bearer $AUTH" \
      "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME/attachments"

    次のような出力が表示されたら、次のステップに進みます。

    {
      "attachments": [
        {
          "name": "ed628782-c893-4095-b71c-f4731805290a",
          "environment": "test",
          "createdAt": "1641604447542"
        }
      ]
    }
  5. 次のコマンドを使用して新しい環境グループを作成します。詳細については、環境と環境グループについてをご覧ください。

    データ所在地を使用しない場合

    curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups" \
        -H "Authorization: Bearer $AUTH" \
        -X POST \
        -H "Content-Type:application/json" \
        -d '{
          "name": "'"$ENV_GROUP_NAME"'",
          "hostnames":["'"$ENV_GROUP_HOSTNAME"'"]
      }'

    データ所在地

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups" \
        -H "Authorization: Bearer $AUTH" \
        -X POST \
        -H "Content-Type:application/json" \
        -d '{
          "name": "'"$ENV_GROUP_NAME"'",
          "hostnames":["'"$ENV_GROUP_HOSTNAME"'"]
      }'
  6. オペレーションが完了するのを待ちます。新しいグループのステータスは、次のようなリクエストを使用して確認できます。

    データ所在地を使用しない場合

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME"

    データ所在地

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME"
  7. 次のコマンドを使用して、新しい環境を新しい環境グループに接続します。

    データ所在地を使用しない場合

    curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME/attachments" \
        -X POST \
        -H "Authorization: Bearer $AUTH" \
        -H "content-type:application/json" \
        -d '{
          "environment":"'"$ENVIRONMENT_NAME"'"
      }'

    データ所在地

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME/attachments" \
        -X POST \
        -H "Authorization: Bearer $AUTH" \
        -H "content-type:application/json" \
        -d '{
          "environment":"'"$ENVIRONMENT_NAME"'"
      }'
  8. オペレーションのステータスを確認するには、次の API を呼び出します。

    データ所在地を使用しない場合

    curl -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME/attachments"

    データ所在地

    curl -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME/attachments"

ステップ 8: ルーティングを構成する

このステップでは、クライアント アプリケーションが Apigee と通信する方法を構成します。クライアントから Apigee へのトラフィックは「ノースバウンド」トラフィックとも呼ばれます。ノースバウンドの構成オプションには次が含まれます。使用する構成オプションに移動し、そのオプションの手順を実施します。

アクセスタイプ 構成とデプロイ プロセスの説明
VPC ピアリングを使用する内部アクセス

API プロキシへの内部アクセスのみを許可します。

ネットワーク内に新しい VM を作成して接続する必要があります。新しい VM から Apigee API プロキシにリクエストを送信できます。

MIG を使用する外部アクセス

API プロキシへの外部アクセスを許可します。

マネージド インスタンス グループ(MIG)を使用して、グローバル ロードバランサのバックエンド サービスから Apigee に API トラフィックを送信します。この構成では、Apigee はピアリングした VPC にのみ接続できます。この構成では、任意のネットワーク対応マシンから Apigee API プロキシ リクエストを送信できます。

PSC を使用する内部アクセス(新規)

Private Service Connect(PSC)を使用して、任意の Google Cloud プロジェクトから API プロキシへの内部アクセスのみを許可します。

PSC を使用すると、サービス プロデューサー(Apigee)とサービス コンシューマー(ピアリングされた VPC プロジェクトと自身が制御する 1 つ以上の他の Cloud プロジェクト)間のプライベート接続が可能になります。この方式では、リクエストはサービス エンドポイントまたはリージョンの内部ロードバランサを経由して、サービス アタッチメントという単一のアタッチメント ポイントに到達します。この構成により、内部クライアントは、ネットワークが有効になっている任意のマシンから Apigee API プロキシ リクエストを送信できます。

PSC を使用する外部アクセス(新規)

Private Service Connect(PSC)を使用して API プロキシへの外部アクセスを許可します。

Private Service Connect(PSC)を使用して、サービス プロデューサー(Apigee)とサービス コンシューマー(ピアリングされた VPC プロジェクトと自身が制御する 1 つ以上の他のクラウド プロジェクト)間のプライベート接続を有効にします。この方式では、リクエストはグローバル外部ロードバランサまたはリージョン外部ロードバランサを経由して、サービス アタッチメントという単一のアタッチメント ポイントに到達します。この構成では、ネットワークが有効になっている任意のマシンから Apigee API プロキシ リクエストを送信できます。

それぞれのルーティング アプローチについて、以下で説明します。

内部ルーティング(VPC)

内部クライアントから Apigee へのトラフィックのルーティングでは、TLS 終端を使用するかどうかを選択できます。

  • TLS オプション: TLS を有効にして内部クライアントから API プロキシ呼び出しを行う場合は、次の 2 つの選択肢があります。
  • 非 TLS オプション: TLS 終端を有効にする必要がない場合は、クライアントが TLS を無効にする API プロキシを呼び出すことができます。たとえば、cURL で -k オプションを使用すると、TLS を無効にできます。内部専用アクセスで API プロキシを呼び出すをご覧ください。

外部ルーティング(MIG)

このセクションでは、マネージド インスタンス グループ(MIG)を使用して、グローバル ロードバランサのバックエンド サービスを Apigee に送信するように、API プロキシへの外部アクセスを許可するルーティングを構成する方法について説明します。外部クライアントから Apigee ランタイム インスタンスにリクエストを送信する前に、この操作を行う必要があります。

一般的なプロセスは以下のとおりです。

ステップ 8a: VPC ネットワークのサブネットに対して限定公開の Google アクセスを有効にする
ステップ 8b: 環境変数を設定する
ステップ 8c: マネージド インスタンス グループを作成する
ステップ 8d: ロードバランサの SSL 証明書と鍵を作成する
ステップ 8e: グローバル ロードバランサを作成する
ステップ 8f: 予約済みの IP アドレスを取得してファイアウォール ルールを作成する

それぞれの手順は、次のセクションで説明します。

ステップ 8a: VPC ネットワークのサブネットに対して限定公開の Google アクセスを有効にする

VPC ネットワークのサブネットで限定公開の Google アクセスを有効にするには、限定公開の Google アクセスを有効にするに記載された手順に沿ってください。

ステップ 8b: 環境変数を設定する

このセクションの手順では、環境変数を使用して、繰り返し使用される文字列を参照します。続行する前に、これらを設定することをおすすめします。

MIG_NAME=apigee-mig-MIG_NAME   # You can choose a different name if you like
VPC_NAME=default       # If you are using a shared VPC, use the shared VPC name
VPC_SUBNET=default     # Private Google Access must be enabled for this subnet
REGION=RUNTIME_REGION        # The same region as your Apigee runtime instance
APIGEE_ENDPOINT=APIGEE_INSTANCE_IP     # See the tip below for details on getting this IP address value

これらの変数は、残りのプロセスで複数回使用します。複数のリージョンを構成する場合は、固有の値を持つ変数を各リージョンに作成します。

ステップ 8c: マネージド インスタンス グループを作成する

この手順では、マネージド インスタンス グループ(MIG)を作成して構成します。後のステップで、グローバル ロードバランサに接続されたバックエンド サービスに MIG を追加します。MIG は、グローバル ロードバランサのバックエンド サービスから Apigee に API トラフィックを送信するために必要です。

MIG を作成するには:

  1. 次のコマンドを実行して、インスタンス テンプレートを作成します。
    gcloud compute instance-templates create $MIG_NAME \
    --project $PROJECT_ID \
    --region $REGION \
    --network $VPC_NAME \
    --subnet $VPC_SUBNET \
    --tags=https-server,apigee-mig-proxy,gke-apigee-proxy \
    --machine-type e2-medium --image-family debian-10 \
    --image-project debian-cloud --boot-disk-size 20GB \
    --no-address \
    --metadata ENDPOINT=$APIGEE_ENDPOINT,startup-script-url=gs://apigee-5g-saas/apigee-envoy-proxy-release/latest/conf/startup-script.sh

    このコマンドからわかるように、マシンのタイプは e2-medium です。Debian 10 を実行し、20 GB のディスク容量があります。startup-script.sh スクリプトは、ロードバランサから Apigee インスタンスにインバウンド トラフィックを転送するように MIG を構成します。

  2. 次のコマンドを実行して、マネージド インスタンス グループを作成します。
    gcloud compute instance-groups managed create $MIG_NAME \
    --project $PROJECT_ID --base-instance-name apigee-mig \
    --size 2 --template $MIG_NAME --region $REGION
  3. 次のコマンドを実行して、グループの自動スケーリングを構成します。
    gcloud compute instance-groups managed set-autoscaling $MIG_NAME \
    --project $PROJECT_ID --region $REGION --max-num-replicas 3 \
    --target-cpu-utilization 0.75 --cool-down-period 90
  4. 次のコマンドを実行して、名前付きポートを定義します。
    gcloud compute instance-groups managed set-named-ports $MIG_NAME \
    --project $PROJECT_ID --region $REGION --named-ports https:443

ステップ 8d: ロードバランサの SSL 証明書と鍵を作成する

単一リージョンとマルチリージョンのどちらにインストールする場合でも、認証情報を作成する必要があるのは 1 回だけです。後のステップで、これらの認証情報をロードバランサのターゲット HTTPS プロキシに関連付けます。

認証情報は以下を使用して作成できます。

Google Cloud ロードバランサの SSL 証明書の作成と使用の詳細については、SSL 証明書SSL 証明書の概要をご覧ください。

次の例では、Google マネージド SSL 証明書を作成します。

  1. 次の環境変数を作成します。
    CERTIFICATE_NAME=YOUR_CERT_NAME
    DOMAIN_HOSTNAME=YOUR_DOMAIN_HOSTNAME 

    登録した有効なドメインホスト名に、DOMAIN_HOSTNAME を設定します。後のステップでは、ロードバランサの IP アドレスを取得し、そのアドレスを指すようにドメイン A レコードを更新します。たとえば、ドメインホスト名は foo.example.com のようになります。

  2. gcloud compute ssl-certificates create コマンドを実行します。
    gcloud compute ssl-certificates create $CERTIFICATE_NAME \
      --domains=$DOMAIN_HOSTNAME \
      --project $PROJECT_ID \
      --global

    証明書のプロビジョニングには最長で 1 時間かかることがあります。プロビジョニングのステータスを確認するには、次のコマンドを実行します。

    gcloud compute ssl-certificates describe $CERTIFICATE_NAME \
     --global \
     --format="get(name,managed.status, managed.Status)"

ステップ 8e: グローバル ロードバランサを作成する

  1. ヘルスチェックを作成します。
    gcloud compute health-checks create https HEALTH_CHECK_NAME \
    --project $PROJECT_ID --port 443 --global \
    --request-path /healthz/ingress

    このヘルスチェックを使用して、バックエンド サービスが実行されていることを確認します。特定のプロキシに対してより高度なヘルスチェックを構成する方法については、ヘルスチェックの実施をご覧ください。

  2. バックエンド サービスを作成します。
    gcloud compute backend-services create PROXY_BACKEND_NAME \
    --project $PROJECT_ID \
    --protocol HTTPS \
    --health-checks HEALTH_CHECK_NAME \
    --port-name https \
    --timeout 302s \
    --connection-draining-timeout 300s \
    --global
  3. 次のコマンドを使用して、バックエンド サービスに MIG を追加します。
    gcloud compute backend-services add-backend PROXY_BACKEND_NAME \
    --project $PROJECT_ID --instance-group $MIG_NAME \
    --instance-group-region $REGION \
    --balancing-mode UTILIZATION --max-utilization 0.8 --global
  4. 次のコマンドを使用して、ロード バランシング URL マップを作成します。
    gcloud compute url-maps create MIG_PROXY_MAP_NAME \
    --project $PROJECT_ID --default-service PROXY_BACKEND_NAME
  5. 次のコマンドを使用して、ロード バランシングのターゲット HTTPS プロキシを作成します。
    gcloud compute target-https-proxies create MIG_HTTPS_PROXY_NAME \
    --project $PROJECT_ID --url-map MIG_PROXY_MAP_NAME \
    --ssl-certificates $CERTIFICATE_NAME

ステップ 8f: 予約済みの IP アドレスを取得してファイアウォール ルールを作成する

ロードバランサに IP アドレスを割り当ててから、ロードバランサが MIG へのアクセスを許可するルールを作成する必要があります。この手順は、インストールするリージョンが 1 つのリージョンかマルチリージョンかにかかわらず、1 回のみ行う必要があります。

  1. ロードバランサの IP アドレスを予約します。
    gcloud compute addresses create ADDRESSES_NAME \
    --project $PROJECT_ID \
    --ip-version=IPV4 \
    --global
  2. 次のコマンドを使用して、グローバル転送ルールを作成します。
    gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
    --project $PROJECT_ID --address ADDRESSES_NAME --global \
    --target-https-proxy MIG_HTTPS_PROXY_NAME --ports 443
  3. 次のコマンドを実行して、予約済みの IP アドレスを取得します。
    gcloud compute addresses describe ADDRESSES_NAME \
    --project $PROJECT_ID --format="get(address)" --global
  4. 重要な手順: DNS レコードが管理されているサイト、DNS ホスト、または ISP に移動し、ドメインの DNS レコードが Google Cloud ロードバランサの IP アドレスに解決されることを確認します。このアドレスは、最後のステップで返された IP 値です。詳細については、ロードバランサの IP アドレスを指すように DNS A および AAAA レコードを更新するをご覧ください。
  5. 次のコマンドを使用して、ロードバランサが MIG へのアクセスを許可するファイアウォール ルールを作成します。
    gcloud compute firewall-rules create FIREWALL_RULE_NAME \
    --description "Allow incoming from GLB on TCP port 443 to Apigee Proxy" \
    --project $PROJECT_ID --network $VPC_NAME --allow=tcp:443 \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 --target-tags=gke-apigee-proxy

    IP アドレス範囲 130.211.0.0/2235.191.0.0/16 は、Google Cloud Load Balancing の送信元 IP アドレス範囲です。このファイアウォール ルールにより、Google Cloud Load Balancing から MIG へのヘルスチェック リクエストが可能になります。

Apigee のプロビジョニングが完了しました。サンプル プロキシをデプロイするに移動します。

内部ルーティング(PSC)

このセクションでは、Private Service Connect(PSC)を使用して、任意の Google Cloud プロジェクトから API プロキシへの内部アクセスのみを許可する方法について説明します。

PSC を使用して内部アクセスを構成するには、次の 2 つのオプションがあります。

ご使用の構成に応じて以下のタブを選択し、次の操作を行います。

サービス エンドポイント

サービス アタッチメントに PSC サービス エンドポイントを作成する

  1. 前の手順で作成したインスタンスからサービス アタッチメントを取得します。

    データ所在地を使用しない場合

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
    "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    データ所在地

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
    "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    次のサンプル出力では、serviceAttachment 値が太字で表示されています。

    {
      "instances": [
        {
          "name": "us-west1",
          "location": "us-west1",
          "host": "10.82.192.2",
          "port": "443",
          "createdAt": "1645731488019",
          "lastModifiedAt": "1646504754219",
          "diskEncryptionKeyName": "projects/my-project/locations/us-west1/keyRings/us-west1/cryptoKeys/dek",
          "state": "ACTIVE",
          "peeringCidrRange": "SLASH_22",
          "runtimeVersion": "1-7-0-20220228-190814",
          "ipRange": "10.82.192.0/22,10.82.196.0/28",
          "consumerAcceptList": [
            "875609189304"
          ],
          "serviceAttachment": "projects/bfac74a67a320c43a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw1"
        }
      ]
    }
  2. Private Service Connect エンドポイントを作成するの説明に従って、前の手順でインスタンス レスポンスの本文から取得したサービス アタッチメントを指す PSC サービス エンドポイントを作成します。
  3. 設定をテストするには、内部専用アクセスで API プロキシを呼び出すをご覧ください。

内部リージョン LB

ステップ 8a: 環境変数を設定する

このセクションの手順では、環境変数を使用して、繰り返し使用される文字列を参照します。環境変数を定義するで変数が設定されていることを確認してください。

さらに、次の環境変数を設定します。

NEG_NAME=YOUR_NEG_NAME"
TARGET_SERVICE=YOUR_TARGET_SERVICE"
NETWORK_NAME=YOUR_NETWORK_NAME"
SUBNET_NAME=YOUR_SUBNET_NAME"

ここで

  • NEG_NAME: ネットワーク エンドポイント グループの名前。
  • TARGET_SERVICE: 接続するサービス アタッチメント。例: projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7
  • NETWORK_NAME: (省略可)NEG を作成するネットワークの名前。このパラメータを省略すると、default プロジェクト ネットワークが使用されます。
  • SUBNET_NAME: プロデューサーへのプライベート接続に使用されるサブネットの名前。サブネット サイズは小さくできます。PSC NEG にはサブネットから 1 つの IP のみが必要です。Apigee の場合、リージョンごとに必要な PSC NEG は 1 つだけです。サブネットは、VM または他のエンティティによって共有され、使用できます。サブネットが指定されていない場合、ネットワーク エンドポイントは、ネットワーク エンドポイント グループが作成されたリージョン内の任意のサブネットワークに属している可能性があります。

ステップ 8b: プロキシ専用サブネットを作成する

gcloud compute networks subnets create testproxyonlysubnet \
--purpose=REGIONAL_MANAGED_PROXY --role=ACTIVE --region=$RUNTIME_REGION --network=$NETWORK_NAME \
--range=100.0.0.0/24 --project=$PROJECT_ID

ステップ 8c: ネットワーク エンドポイント グループ(NEG)を作成する

  1. 前の手順で作成したインスタンスからサービス アタッチメントを取得します。

    データ所在地を使用しない場合

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
    "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    データ所在地

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
    "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    次のサンプル出力では、serviceAttachment 値が太字で表示されています。

    {
    "instances": [
      {
        "name": "us-west1",
        "location": "us-west1",
        "host": "10.82.192.2",
        "port": "443",
        "createdAt": "1645731488019",
        "lastModifiedAt": "1646504754219",
        "diskEncryptionKeyName": "projects/my-project/locations/us-west1/keyRings/us-west1/cryptoKeys/dek",
        "state": "ACTIVE",
        "peeringCidrRange": "SLASH_22",
        "runtimeVersion": "1-7-0-20220228-190814",
        "ipRange": "10.82.192.0/22,10.82.196.0/28",
        "consumerAcceptList": [
          "875609189304"
        ],
      "serviceAttachment": "projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7"
      }
    ]
    }
  2. 前の手順でインスタンスのレスポンス本文から取得したサービス アタッチメントを参照する Private Service Connect NEG を作成します。

    gcloud compute network-endpoint-groups create $NEG_NAME \
    --network-endpoint-type=private-service-connect \
    --psc-target-service=$TARGET_SERVICE \
    --region=$RUNTIME_LOCATION \
    --project=$PROJECT_ID
    

    ここで、$PROJECT_ID はすでに Apigee 組織に関連付けられている Cloud プロジェクト、または Apigee ランタイム インスタンスが作成されたときに consumerAcceptlist に含まれている Cloud プロジェクトにできます。

ステップ 8d: リージョン内部ロードバランサを構成する

  1. ロードバランサに内部 IPv4 アドレスを予約します。
    gcloud compute addresses create ADDRESS_NAME \
    --ip-version=IPV4 --subnet=$SUBNET_NAME \
    --region=$RUNTIME_LOCATION --project=$PROJECT_ID

    ADDRESS_NAME は、IP アドレス リソースの名前に置き換えます。

    予約済み IP アドレスを表示するには、次のコマンドを実行します。

    gcloud compute addresses describe ADDRESS_NAME \
    --format="get(address)" --region=$RUNTIME_LOCATION --project=$PROJECT_ID
  2. NEG のバックエンド サービスを作成します。
    gcloud compute backend-services create BACKEND_SERVICE_NAME \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --protocol=HTTPS \
    --region=$RUNTIME_REGION \
    --project=$PROJECT_ID
  3. BACKEND_SERVICE_NAME は、バックエンド サービスの名前に置き換えます。

  4. バックエンド サービスを NEG に追加します。
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
    --network-endpoint-group=$NEG_NAME \
    --region=$RUNTIME_LOCATION \
    --project=$PROJECT_ID

    次のように置き換えます。

    • NEG_NAME: ネットワーク エンドポイント グループの名前。
    • BACKEND_SERVICE_NAME: バックエンド サービスの名前。
  5. HTTPS ロードバランサを作成するには、HTTPS ターゲット プロキシで使用する SSL 証明書リソースが必要です。

    セルフマネージド SSL 証明書リソースを作成するには、次のコマンドを使用します。セルフマネージド SSL 証明書を作成するには、ローカル秘密鍵ファイルとローカル証明書ファイルが必要です。これらのファイルを作成する必要がある場合は、セルフマネージド SSL 証明書の使用の手順 1 をご覧ください。

    gcloud compute ssl-certificates create CERTIFICATE \
    --certificate LB_CERT \
    --private-key LB_PRIVATE_KEY
    --region=$RUNTIME_LOCATION --project=$PROJECT_ID

    次のように置き換えます。

    • CERTIFICATE: 証明書の名前。
    • LB_CERT: セルフ マネージド証明書の PEM 形式の証明書ファイルのパス。
    • LB_PRIVATE_KEY: セルフ マネージド証明書の PEM 形式の秘密鍵ファイルのパス。
  6. ロードバランサの URL マップを作成します。

    URL マップでは、デフォルトのバックエンド サービスを参照する必要があります。作成したバックエンド サービスをデフォルトとして設定します。

    gcloud compute url-maps create URL_MAP_NAME \
    --default-service=DEFAULT_BACKEND_SERVICE_NAME \
    --global --project=$PROJECT_ID

    次のように置き換えます。

    • URL_MAP_NAME: URL マップの名前。
    • DEFAULT_BACKEND_SERVICE_NAME: ロードバランサのデフォルト バックエンド サービスの名前。このデフォルトは、指定されたホスト名に一致するホストルールがない場合に使用されます。
  7. SSL 証明書リソースを使用して、ターゲット HTTPS プロキシを作成します。

    gcloud compute target-https-proxies create PROXY_NAME \
    --url-map=URL_MAP_NAME \
    --ssl-certificates=CERTIFICATE \
    --region=$RUNTIME_LOCATION --project=$PROJECT_ID

    次のように置き換えます。

    • PROXY_NAME: ターゲット HTTPS プロキシの名前。
    • URL_MAP_NAME: URL マップの名前。
    • CERTIFICATE: 証明書リソースの名前。
  8. 転送ルールを作成します。
    gcloud compute forwarding-rules create FWD_RULE \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --address=ADDRESS_NAME \
    --target-https-proxy=PROXY_NAME \
    --ports=443 \
    --target-https-proxy-region=$RUNTIME_REGION \
    --region=$RUNTIME_REGION
    --project=$PROJECT_ID

    次のように置き換えます。

    • FWD_RULE: 転送ルールの名前。
    • ADDRESS_NAME: 転送ルールに使用するために予約した IP アドレス リソース。
    • PROXY_NAME: ターゲット HTTPS プロキシの名前。
  9. Apigee のプロビジョニングが完了しました。サンプル プロキシをデプロイするに移動します。

外部ルーティング(PSC)

このセクションでは、Apigee と管理している VPC 間の通信を許可するために Private Service Connect(PSC)を使用して外部ルーティングを構成する方法について説明します。外部クライアントから Apigee ランタイム インスタンスにリクエストを送信する前に、この操作を行う必要があります。

ステップ 8b: NEG を作成してロードバランサを構成する

グローバル ロードバランサまたはリージョン ロードバランサを作成できます。

グローバル外部 LB

グローバル外部 HTTP(S) ロードバランサEXTERNAL_MANAGED に設定されたロード バランシング スキーム)を構成します。

Private Service Connect NEG はリージョナルですが、この構成の他のロード バランシング コンポーネントはグローバルです。

  1. 環境変数を定義するで、環境変数が設定されていることを確認します。
  2. 前の手順で作成したインスタンスからサービス アタッチメントを取得します。

    データ所在地を使用しない場合

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    データ所在地

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    次のサンプル出力では、serviceAttachment 値が太字で表示されています。

    {
      "instances": [
        {
          "name": "us-west1",
          "location": "us-west1",
          "host": "10.82.192.2",
          "port": "443",
          "createdAt": "1645731488019",
          "lastModifiedAt": "1646504754219",
          "diskEncryptionKeyName": "projects/my-project/locations/us-west1/keyRings/us-west1/cryptoKeys/dek",
          "state": "ACTIVE",
          "peeringCidrRange": "SLASH_22",
          "runtimeVersion": "1-7-0-20220228-190814",
          "ipRange": "10.82.192.0/22,10.82.196.0/28",
          "consumerAcceptList": [
            "875609189304"
          ],
          "serviceAttachment": "projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7"
        }
      ]
    }
  3. 前の手順でインスタンスのレスポンス本文から取得したサービス アタッチメントを参照する Private Service Connect NEG を作成します。

      gcloud compute network-endpoint-groups create NEG_NAME \
        --network-endpoint-type=private-service-connect \
        --psc-target-service=TARGET_SERVICE \
        --region=$RUNTIME_LOCATION \
        --network=NETWORK_NAME \
        --subnet=SUBNET_NAME \
        --project=$PROJECT_ID
    

    次のように置き換えます。

    • NEG_NAME: ネットワーク エンドポイント グループの名前。
    • TARGET_SERVICE: 接続するサービス アタッチメント。前のコマンドで返されたサービス アタッチメントの値を使用します。例: projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7
    • NETWORK_NAME:(省略可)NEG を作成するネットワークの名前。このパラメータを省略すると、default プロジェクト ネットワークが使用されます。
    • SUBNET_NAME: プロデューサーへのプライベート接続に使用されるサブネットの名前。サブネット サイズは小さくすることができます。PSC NEG にはサブネットから 1 つの IP のみが必要です。Apigee の場合、リージョンごとに必要な PSC NEG は 1 つだけです。サブネットは、VM または他のエンティティによって共有され、使用できます。サブネットが指定されていない場合、ネットワーク エンドポイントは、ネットワーク エンドポイント グループが作成されたリージョン内の任意のサブネットワークに属している可能性があります。
    • $PROJECT_ID。すでに Apigee 組織に関連付けられている Cloud プロジェクト、または Apigee ランタイム インスタンスが作成されたときに consumerAcceptlist に含まれている Cloud プロジェクト。プロジェクト ID を保持する環境変数は、次のコマンドの大部分で使用されるので、まだ作成していない場合は作成します。
  4. ロードバランサにグローバル外部 IPv4 アドレスを予約します。
    gcloud compute addresses create ADDRESS_NAME \
        --ip-version=IPV4 --global --project=$PROJECT_ID

    ADDRESS_NAME は、IP アドレス リソースの名前に置き換えます。

    予約済み IP アドレスを表示するには、次のコマンドを実行します。

    gcloud compute addresses describe ADDRESS_NAME \
        --format="get(address)" --global --project=$PROJECT_ID
  5. NEG のバックエンド サービスを作成します。
    gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=HTTPS \
        --global --project=$PROJECT_ID
  6. BACKEND_SERVICE_NAME は、バックエンド サービスの名前に置き換えます。

  7. バックエンド サービスを NEG に追加します。
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --network-endpoint-group=NEG_NAME \
        --network-endpoint-group-region=REGION \
        --global --project=$PROJECT_ID

    次のように置き換えます。

    • BACKEND_SERVICE_NAME: バックエンド サービスの名前。
    • NEG_NAME: ネットワーク エンドポイント グループの名前。
    • REGION: ネットワーク エンドポイント グループのリージョン。
  8. ロードバランサの URL マップを作成します。

    URL マップでは、デフォルトのバックエンド サービスを参照する必要があります。作成したバックエンド サービスをデフォルトとして設定します。

    gcloud compute url-maps create URL_MAP_NAME \
        --default-service=DEFAULT_BACKEND_SERVICE_NAME \
        --global --project=$PROJECT_ID

    次のように置き換えます。

    • URL_MAP_NAME: URL マップの名前。
    • DEFAULT_BACKEND_SERVICE_NAME: ロードバランサのデフォルト バックエンド サービスの名前。このデフォルトは、指定されたホスト名に一致するホストルールがない場合に使用されます。
  9. ターゲット HTTPS プロキシを作成します。

    HTTPS ロードバランサを作成するには、HTTPS ターゲット プロキシで使用する SSL 証明書リソースが必要です。SSL 証明書リソースは、Google マネージド SSL 証明書またはセルフマネージド SSL 証明書を使用して作成できます。このうち、Google Cloud が自動的に取得、管理、更新する Google マネージド証明書をおすすめします。

    Google マネージド証明書を作成するには、ドメインが必要です

    次のコマンドを使用して、Google マネージド SSL 証明書リソースを作成します。

    gcloud compute ssl-certificates create CERTIFICATE \
        --domains DOMAIN --project=$PROJECT_ID

    次のように置き換えます。

    • CERTIFICATE: 証明書の名前。
    • DOMAIN: ロードバランサのドメイン名。

    セルフマネージド SSL 証明書リソースを作成するには、次のコマンドを使用します。セルフマネージド SSL 証明書を作成するには、ローカル秘密鍵ファイルとローカル証明書ファイルが必要です。これらのファイルを作成する必要がある場合は、セルフマネージド SSL 証明書の使用の手順 1 をご覧ください。

    gcloud compute ssl-certificates create CERTIFICATE \
        --certificate LB_CERT \
        --private-key LB_PRIVATE_KEY --project=$PROJECT_ID

    次のように置き換えます。

    • CERTIFICATE: 証明書の名前。
    • LB_CERT: セルフ マネージド証明書の PEM 形式の証明書ファイルのパス。
    • LB_PRIVATE_KEY: セルフ マネージド証明書の PEM 形式の秘密鍵ファイルのパス。

    SSL 証明書リソースを使用して、ターゲット HTTPS プロキシを作成します。

    gcloud compute target-https-proxies create PROXY_NAME \
        --url-map=URL_MAP_NAME \
        --ssl-certificates=CERTIFICATE --project=$PROJECT_ID

    次のように置き換えます。

    • PROXY_NAME: ターゲット HTTPS プロキシの名前。
    • URL_MAP_NAME: URL マップの名前。
    • CERTIFICATE: 証明書リソースの名前。
  10. 転送ルールを作成します。
    gcloud compute forwarding-rules create FWD_RULE \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --network-tier=PREMIUM \
        --address=ADDRESS_NAME \
        --target-https-proxy=PROXY_NAME \
        --ports=443 \
        --global --project=$PROJECT_ID

    次のように置き換えます。

    • FWD_RULE: 転送ルールの名前。
    • ADDRESS_NAME: 転送ルールに使用するために予約した IP アドレス リソース。
    • PROXY_NAME: ターゲット HTTPS プロキシの名前。

リージョン外部 LB

リージョン外部 HTTP(S) ロードバランサを構成します。外部 HTTP(S) ロードバランサの概要もご覧ください。

  1. 環境変数を定義するで変数が設定されていることを確認してください。
  2. プロキシ専用サブネットを作成します。
    gcloud compute networks subnets create SUBNET_NAME \
          --purpose=REGIONAL_MANAGED_PROXY --role=ACTIVE \
          --region=$RUNTIME_LOCATION --network=NETWORK_NAME \
          --range=100.0.0.0/24 --project=$PROJECT_ID

    次のように置き換えます。

    • SUBNET_NAME: サブネットの名前。
    • (省略可)NETWORK_NAME: サブネットが作成されるネットワークの名前。このパラメータを省略すると、デフォルトのプロジェクト ネットワークが使用されます。
  3. 前の手順で作成したインスタンスからサービス アタッチメントを取得します。

    データ所在地を使用しない場合

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    データ所在地

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    次のサンプル出力では、serviceAttachment 値が太字で表示されています。

    {
      "instances": [
        {
          "name": "us-west1",
          "location": "us-west1",
          "host": "10.82.192.2",
          "port": "443",
          "createdAt": "1645731488019",
          "lastModifiedAt": "1646504754219",
          "diskEncryptionKeyName": "projects/my-project/locations/us-west1/keyRings/us-west1/cryptoKeys/dek",
          "state": "ACTIVE",
          "peeringCidrRange": "SLASH_22",
          "runtimeVersion": "1-7-0-20220228-190814",
          "ipRange": "10.82.192.0/22,10.82.196.0/28",
          "consumerAcceptList": [
            "875609189304"
          ],
          "serviceAttachment": "projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7"
        }
      ]
    }
  4. ネットワーク エンドポイント グループを作成します。
    gcloud compute network-endpoint-groups create NEG_NAME \
        --network-endpoint-type=private-service-connect \
        --psc-target-service=TARGET_SERVICE \
        --region=$RUNTIME_LOCATION --project=$PROJECT_ID

    次のように置き換えます。

    • NEG_NAME: ネットワーク エンドポイント グループの名前。
    • TARGET_SERVICE: 接続するサービス アタッチメントの名前。例: projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7
  5. NEG のバックエンド サービスを作成します。
    gcloud compute backend-services create BACKEND_SERVICE_NAME \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --protocol=HTTPS \
      --region=$RUNTIME_LOCATION  \
      --project=$PROJECT_ID
  6. BACKEND_SERVICE_NAME は、バックエンド サービスの名前に置き換えます。

  7. バックエンド サービスを NEG に追加します。
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --network-endpoint-group=NEG_NAME \
      --region=$RUNTIME_LOCATION  \
      --project=$PROJECT_ID

    次のように置き換えます。

    • BACKEND_SERVICE_NAME: バックエンド サービスの名前。
    • NEG_NAME: ネットワーク エンドポイント グループの名前。
  8. ロードバランサの URL マップを作成します。

    URL マップでは、デフォルトのバックエンド サービスを参照する必要があります。作成したバックエンド サービスをデフォルトとして設定します。

    gcloud compute url-maps create URL_MAP_NAME \
      --default-service=DEFAULT_BACKEND_SERVICE_NAME \
      --region=$RUNTIME_LOCATION  \
      --project=$PROJECT_ID

    次のように置き換えます。

    • URL_MAP_NAME: URL マップの名前。
    • DEFAULT_BACKEND_SERVICE_NAME: ロードバランサのデフォルト バックエンド サービスの名前。このデフォルトは、指定されたホスト名に一致するホストルールがない場合に使用されます。
  9. ターゲット HTTPS プロキシを作成します。

    HTTPS ロードバランサを作成するには、HTTPS ターゲット プロキシで使用する SSL 証明書リソースが必要です。

    セルフマネージド SSL 証明書リソースを作成するには、次のコマンドを使用します。セルフマネージド SSL 証明書を作成するには、ローカル秘密鍵ファイルとローカル証明書ファイルが必要です。これらのファイルを作成する必要がある場合は、セルフマネージド SSL 証明書の使用の手順 1 をご覧ください。

    gcloud compute ssl-certificates create CERTIFICATE \
      --certificate LB_CERT \
      --private-key LB_PRIVATE_KEY --region=$RUNTIME_LOCATION \
      --project=$PROJECT_ID

    次のように置き換えます。

    • CERTIFICATE: 証明書の名前。
    • LB_CERT: セルフ マネージド証明書の PEM 形式の証明書ファイルのパス。
    • LB_PRIVATE_KEY: セルフ マネージド証明書の PEM 形式の秘密鍵ファイルのパス。

    SSL 証明書リソースを使用して、ターゲット HTTPS プロキシを作成します。

    gcloud compute target-https-proxies create PROXY_NAME \
      --url-map=URL_MAP_NAME --region=$RUNTIME_LOCATION \
      --ssl-certificates=CERTIFICATE --project=$PROJECT_ID

    次のように置き換えます。

    • PROXY_NAME: ターゲット HTTPS プロキシの名前。
    • URL_MAP_NAME: URL マップの名前。
    • CERTIFICATE: 証明書リソースの名前。
  10. ロードバランサにリージョン外部アドレスを予約します。ネットワーク階層は STANDARD に設定する必要があります。
    gcloud compute addresses create ADDRESS_NAME \
          --region=$RUNTIME_LOCATION --network-tier=STANDARD \
          --project=$PROJECT_ID

    ADDRESS_NAME は、IP アドレス リソースの名前に置き換えます。

    予約済み IP アドレスを表示するには、次のコマンドを実行します。

    gcloud compute addresses describe ADDRESS_NAME \
          --format="get(address)" --region=$RUNTIME_LOCATION \
          --project=$PROJECT_ID
  11. 転送ルールを作成します。
    gcloud compute forwarding-rules create FWD_RULE \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --network-tier=STANDARD \
      --address=ADDRESS_NAME \
      --target-https-proxy=PROXY_NAME \
      --ports=443  --region=$RUNTIME_LOCATION \
      --target-https-proxy-region=$RUNTIME_LOCATION --project=$PROJECT_ID

    次のように置き換えます。

    • FWD_RULE: 転送ルールの名前。
    • ADDRESS_NAME: 転送ルールに使用するために予約した IP アドレス リソース。
    • PROXY_NAME: ターゲット HTTPS プロキシの名前。

Apigee のプロビジョニングが完了しました。サンプル プロキシをデプロイするに移動します。

ステップ 9: サンプル プロキシをデプロイする

  1. GitHub からサンプル プロキシをダウンロードします。プロキシのターゲットは httpbin.org サービスでよく使用されるパブリック リクエストおよびレスポンス サービスです。
  2. Apigee apis API を使用して、API プロキシ バンドルをランタイムにアップロードします。

    データ所在地を使用しない場合

    curl -i -X POST -H "Authorization: Bearer $AUTH" \
        -H "Content-Type:multipart/form-data" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/apis?name=httpbin&action=import" \
        -F 'file=@PATH_TO_ZIP_FILE/httpbin_rev1_2020_02_02.zip'

    データ所在地

    curl -i -X POST -H "Authorization: Bearer $AUTH" \
        -H "Content-Type:multipart/form-data" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/apis?name=httpbin&action=import" \
        -F 'file=@PATH_TO_ZIP_FILE/httpbin_rev1_2020_02_02.zip'

    ここで、PATH_TO_ZIP_FILE は、ダウンロードした ZIP ファイルを含むディレクトリのパスです。

  3. 前の手順で作成した環境に API プロキシをデプロイします。

    データ所在地を使用しない場合

    curl -i -H "Authorization: Bearer $AUTH" -X POST \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENVIRONMENT_NAME/apis/httpbin/revisions/1/deployments"

    データ所在地

    curl -i -H "Authorization: Bearer $AUTH" -X POST \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENVIRONMENT_NAME/apis/httpbin/revisions/1/deployments"
  4. 次の API 呼び出しを使用して、デプロイが正常に完了したことを確認します。

    データ所在地を使用しない場合

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENVIRONMENT_NAME/apis/httpbin/revisions/1/deployments"

    データ所在地

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENVIRONMENT_NAME/apis/httpbin/revisions/1/deployments"
  5. API プロキシを呼び出します。

    次のコマンドを実行して、ネットワークが有効になっている任意のマシンから API プロキシにリクエストを送信します。

    curl -i -H "Host: ENV_GROUP_HOSTNAME" \
        "https://ENV_GROUP_HOSTNAME/httpbin/headers"

    必要に応じて、この API を使用して ENV_GROUP_HOSTNAME 値を取得できます。

    データ所在地を使用しない場合

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups"

    データ所在地

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups"

    CONNECT_CR_SRVR_HELLO:sslv3 alert handshake failure」のようなエラーが発生した場合、以前に作成した SSL 証明書がプロビジョニングされていることを確認します。このコマンドを使用して、プロビジョニングのステータスを確認します。証明書がプロビジョニングされると、ステータスは ACTIVE になります。

    gcloud compute ssl-certificates describe CERTIFICATE \
        --global \
        --format="get(name,managed.status, managed.Status)"

    成功すると、サンプル API プロキシから次のようなレスポンスが返されます。

    {
        "headers": {
          "Accept": "*/*",
          "Grpc-Trace-Bin": "AAD/8WC/I4AUSrMEch0E9yj+AYck1x9afwckAgA",
          "Host": "httpbin.org",
          "Traceparent": "00-fff160bf2380144ab304721d04f728fe-8724d71f5a7f0724-00",
          "User-Agent": "curl/7.77.0",
          "X-Amzn-Trace-Id": "Root=1-61d785ef-7613aa8a7fde7a910441fab9",
          "X-B3-Sampled": "0",
          "X-B3-Spanid": "8724d71f5a7f0724",
          "X-B3-Traceid": "fff160bf2380144ab304721d04f728fe",
          "X-Cloud-Trace-Context": "fff160bf2380144ab304721d04f728fe/9738144823944087332;o=0",
          "X-Envoy-Attempt-Count": "1"
        }
    }

その他のトラブルシューティング情報など、プロキシのデプロイについて詳しくは、API プロキシのデプロイをご覧ください。