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

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

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

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

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

プロビジョニングのオプションもご覧ください。

制限事項

このドキュメントで説明する VPC 以外のピアリングのインストール オプションにはいくつかの制限があります。

VPC 以外のピアリングでサポートされている機能とネットワーク アプローチの一覧については、ネットワーキング オプションの選択方法をご覧ください。

ステップの概要

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

ステップ 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 \
        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: 組織を作成する

組織を作成する前に、ランタイム データベース暗号鍵のキーリングと鍵(ステップ 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"'",
        "disableVpcPeering":"true",
        "runtimeDatabaseEncryptionKeyName":"'"$RUNTIMEDB_KEY_ID"'"
      }'

    ここで

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

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

      • runtimeType: CLOUD に設定します。
      • billingType: 作成した組織の請求タイプを指定します。
      • disableVpcPeering: VPC ピアリングを使用しない場合は、true に設定します。デフォルト: false
      • 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"'",
        "disableVpcPeering":"true",
        "runtimeDatabaseEncryptionKeyName":"'"$RUNTIMEDB_KEY_ID"'"
      }'

    ここで

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

    • name: 新しい組織を指定します。プロジェクト ID と同じ名前にする必要があります。
    • runtimeType: CLOUD に設定します。
    • billingType: 作成した組織の請求タイプを指定します。
    • controlPlaneEncryptionKeyName: コントロール プレーンのキー ID。
    • apiConsumerDataLocation: 内部リソースで使用するサブリージョンも指定する必要があります。サポートされている値については、データ所在地のリージョンをご覧ください。
    • apiConsumerDataEncryptionKeyName: コンシューマー データ リージョン キー ID。
    • disableVpcPeering: VPC ピアリングを使用しない場合は、true に設定します。デフォルト: false
    • 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"
      }
    }

    成功した場合、レスポンス オブジェクトに "state": "ACTIVE" が表示されます。次の手順に進みます。

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

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

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

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

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

  6. ランタイム インスタンスの作成リクエストのステータスを確認するには、次のコマンドを実行します。ステータスが 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"

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

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

  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"

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

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

アクセスタイプ 構成とデプロイ プロセスの説明
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 プロキシ リクエストを送信できます。

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

内部ルーティング(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",
          "createdAt": "1645731488019",
          "lastModifiedAt": "1646504754219",
          "diskEncryptionKeyName": "projects/my-project/locations/us-west1/keyRings/us-west1/cryptoKeys/dek",
          "state": "ACTIVE",
          "runtimeVersion": "1-7-0-20220228-190814",
          "consumerAcceptList": [
            "my-project"
          ],
          "serviceAttachment": "projects/bfac74a67a320c43a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw1"
        }
      ]
    }
  2. Private Service Connect エンドポイントを作成するの説明に従って、前の手順でインスタンス レスポンスの本文から取得したサービス アタッチメントを指す PSC サービス エンドポイントを作成します。
  3. Apigee のプロビジョニングが完了しました。サンプル プロキシをデプロイするに移動します。

内部リージョン 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",
          "createdAt": "1645731488019",
          "lastModifiedAt": "1646504754219",
          "diskEncryptionKeyName": "projects/my-project/locations/us-west1/keyRings/us-west1/cryptoKeys/dek",
          "state": "ACTIVE",
          "runtimeVersion": "1-7-0-20220228-190814",
          "consumerAcceptList": [
            "my-project"
          ],
          "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 のプロビジョニングが完了しました。サンプル プロキシをデプロイするに移動します。

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

  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 プロキシのデプロイをご覧ください。