このページの内容は Apigee に適用されます。Apigee ハイブリッドには適用されません。
Apigee Edge のドキュメントを表示する。
このドキュメントでは、VPC ピアリングを使用せずにコマンドラインから Apigee をインストールして構成する方法について説明します。これらの手順は、データ所在地が有効であるかどうかにかかわらず、有料組織のサブスクリプション モデルと従量課金制モデルの両方に適用されます。
プロビジョニングのオプションもご覧ください。制限事項
このドキュメントで説明する VPC 以外のピアリングのインストール オプションにはいくつかの制限があります。
- VPC Service Controls はサポートされていません。
- 限定公開 DNS ピアリングはサポートされていません。
VPC 以外のピアリングでサポートされている機能とネットワーク アプローチの一覧については、ネットワーキング オプションの選択方法をご覧ください。
ステップの概要
プロビジョニングの手順は次のとおりです。
- ステップ 1: 環境変数を定義する:
gcloud
を設定して環境変数を定義します。Google Cloud CLI は、認証、ローカルの構成、デベロッパー ワークフロー、Google Cloud APIs の操作を管理します。 - ステップ 2: API を有効にする: Apigee では、いくつかの Google Cloud API を有効にする必要があります。
- ステップ 3: Apigee サービス ID を作成する: このサービス アカウントは、Google Cloud クライアント ライブラリが Google Cloud APIs で認証するために使用します。
- ステップ 4: 組織を作成する: Apigee 組織(組織とも呼ばれます)は、Apigee の最上位コンテナです。すべての環境と環境グループ、ユーザー、API プロキシ、関連リソースが含まれています。
- ステップ 5: ランタイム インスタンスを作成する: インスタンス(ランタイム)は、プロジェクトと関連サービスが保存される場所です。ランタイムは、サービスでユーザー向けのエンドポイントを提供します。
- ステップ 6: 環境を作成する: ネットワーク経由で API にアクセスできるようにする前に、API プロキシを環境にデプロイし、環境グループに追加する必要があります。
- ステップ 7: ルーティングを構成する: API への外部アクセスまたは内部専用アクセスを許可します。
- ステップ 8: サンプル プロキシをデプロイする: API プロキシをデプロイして呼び出し、プロビジョニングをテストします。
ステップ 1: 環境変数を定義する
gcloud
を設定し、後の手順で使用する環境変数を定義します。
- 始める前にに記載されている設定要件を満たしていることを確認してください。
- Cloud SDK がインストールされている必要があります。インストールする必要がある場合は、Cloud SDK のインストールをご覧ください。
- gcloud CLI の初期化の説明に従って Cloud SDK を初期化するか、前提条件で作成した Google Cloud プロジェクトが
gcloud
のデフォルト プロジェクトであることを確認します。 - コマンド ターミナルで次の環境変数を定義します。必要な組織のタイプに対応するタブ、[データ所在地なし] または [データ所在地] ありを選択します。
データ所在地を使用しない場合
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_LOCATION と ANALYTICS_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 のロケーションをご覧ください。
- CONSUMER_DATA_REGION は、コントロール プレーン リージョンのサブリージョンです。CONTROL_PLANE_LOCATION と CONSUMER_DATA_REGION の両方を指定する必要があります。使用可能なコンシューマー データ リージョンのリストについては、Apigee のロケーションをご覧ください。
-
BILLING_TYPE は、作成する組織の請求タイプです。指定できる値は次のとおりです。
-
AUTH は、署名なしトークンを含む
- (省略可)設定した値をエコーして作業内容を確認します。コマンドで変数を使用する場合は、変数名の前にドル記号($)を付けます。
データ所在地を使用しない場合
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 を有効にする
-
Apigee では、いくつかの Google Cloud APIs を有効にする必要があります。次の
services enable
コマンドを実行して有効にします。gcloud services enable apigee.googleapis.com \ compute.googleapis.com \ cloudkms.googleapis.com --project=$PROJECT_ID
(省略可)処理を確認するには、
services list
コマンドを使用して、有効な API をすべて表示します。gcloud services list
レスポンスには、有効にした API を含むすべての有効なサービスが表示されます。
ステップ 3: Apigee サービス ID を作成する
-
Apigee サービス ID を作成します。
gcloud beta services identity create --service=apigee.googleapis.com \ --project=$PROJECT_ID
エージェントが正常に作成されたことを確認します。レスポンスに
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 つのインスタンスのみが存在): サポートされている KMS リージョン ロケーションから選択します。
次に例を示します。
RUNTIMEDBKEY_LOCATION="us-west1"
$RUNTIME_LOCATIONと(かつリージョンとも)同じ値を設定できますが、同一である必要はありません。ただし、同一であればパフォーマンス上のメリットが得られる可能性があります。
マルチリージョン
マルチリージョン構成: サポートされているマルチリージョンのロケーション(
us
、europe
など)またはデュアルリージョンのロケーションから選択します。次に例を示します。
RUNTIMEDBKEY_LOCATION="us"
米国内にマルチリージョン構成がある場合は、可能であれば、ロケーションに
us
を使用することをおすすめします。それ以外の場合は、nam4
を使用します。 - データベース キーリングと鍵名の環境変数を定義します。
キーリングの名前は組織に固有のものである必要があります。2 番目のリージョンまたは後続のリージョンを作成する場合、他のキーリングと同じ名前にすることはできません。
RUNTIMEDB_KEY_RING_NAME=YOUR_DB_KEY_RING_NAME
RUNTIMEDB_KEY_NAME=YOUR_DB_KEY_NAME
- (省略可)設定した値をエコーして作業内容を確認します。コマンドで変数を使用する場合は、変数名の前にドル記号($)を付けます。
echo $RUNTIMEDBKEY_LOCATION
echo $RUNTIMEDB_KEY_RING_NAME
echo $RUNTIMEDB_KEY_NAME
- 新しいキーリングを作成します。
gcloud kms keyrings create $RUNTIMEDB_KEY_RING_NAME \ --location $RUNTIMEDBKEY_LOCATION --project $PROJECT_ID
Apigee ランタイム データベースの暗号鍵のロケーションは、Cloud HSM と Cloud EKM をサポートするすべての Cloud KMS のロケーションに対応しています。
鍵を作成します。
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
鍵 ID を環境変数に設定します。この変数は後のコマンドで使用します。
RUNTIMEDB_KEY_ID=YOUR_RUNTIMEDB_KEY_ID
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.
サービス アカウントのメールアドレスにプロジェクト名ではなく、プロジェクト番号を使用していることを確認してください。
-
- データ所在地を使用している場合は、コントロール プレーンの暗号化キーリングと鍵を作成します。データ所在地を使用していない場合は、ステップ 3 に進みます。
- コントロール プレーン データベースの暗号化リングと鍵のロケーションの環境変数を定義します。
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 のロケーションをご覧ください。
コントロール プレーン データベースのキーリングとキー名の環境変数を定義します。
キーリングの名前は組織に固有のものである必要があります。
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
ここで
- 新しいキーリングを作成します。
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
- 鍵を作成します。
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
- 鍵 ID を環境変数に設定します。この変数は後のコマンドで使用します。
CONTROL_PLANE_KEY_ID=YOUR_CONTROL_PLANE_KEY_ID
CONSUMER_DATA_KEY_ID=YOUR_CONSUMER_DATA_KEY_ID
- 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.
サービス アカウントのメールアドレスにプロジェクト名ではなく、プロジェクト番号を使用していることを確認してください。
-
組織を作成するには、次のリクエストを 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", ... }'
- 数分お待ちください。
- 作成リクエストのステータスを確認するには、次の例のように Apigee List organizations API に
GET
リクエストを送信します。データ所在地を使用しない場合
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 組織を作成するをご覧ください。
コントロール プレーンの暗号化キーリングと鍵を作成するには、次の操作を行います。
CMEK のトラブルシューティングもご覧ください。
ステップ 5: ランタイム インスタンスを作成する
ランタイム インスタンスは、Apigee プロジェクトと関連サービスが保存される場所です。これは、サービスにユーザー向けのエンドポイントを提供します。新しいランタイム インスタンスを作成するには:
-
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 によってエラーが返された場合は、数分待ってから、もう一度リクエストを送信してください。
- データベースに暗号鍵を作成した前述のタスクと同様に、サーバー側でデータの暗号化に使用する 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
- INSTANCE_NAME: 新しいインスタンスの名前。例:
my-runtime-instance
。名前の先頭は小文字にし、長さは 32 文字以下にする必要があります。また、使用できるのは小文字、数字、ハイフンのみです。先頭または末尾をハイフンにすることはできません。また 2 文字以上にする必要があります。 - RUNTIME_LOCATION は、クラスタがホストされている物理的な場所です。有効な値は、Compute Engine によって許可されている任意のロケーションです(使用可能なリージョンとゾーンをご覧ください)。この例では
us-west1
を使用しています。 - DISK_KEY_RING_NAME は、ディスクの暗号化キーリングの名前です。
- DISK_KEY_NAME はディスク暗号鍵の名前です。
- ディスク暗号鍵を作成します。
- 新しいディスク キーリングを作成します。
gcloud kms keyrings create $DISK_KEY_RING_NAME \ --location $RUNTIME_LOCATION \ --project $PROJECT_ID
ディスク キーリングは、インスタンスと同じロケーションに設定する必要があります。各インスタンスとキーリングには、それぞれ独自のロケーションが必要です。
- 新しいディスク鍵を作成します。
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
鍵パスを環境変数に設定します。この変数は後のコマンドで使用します。
DISK_KEY_ID=YOUR_DISK_KEY_ID
例:
DISK_KEY_ID=projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key
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 暗号鍵についてをご覧ください。
- 新しいディスク キーリングを作成します。
- Apigee Instances API に
POST
リクエストを送信して、プロジェクトの新しいランタイム インスタンスを作成します。データ所在地を使用しない場合
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 からエラーが返された場合は、新しいインスタンスの作成をご覧ください。
ランタイム インスタンスの作成リクエストのステータスを確認するには、次のコマンドを実行します。ステータスが 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: 環境を作成する
環境を作成し、コマンドラインで環境をランタイムに接続するには:
- このセクションで使用する環境変数を定義します。作成する特定の環境変数は、サブスクリプションまたは従量制組織用の環境を作成するかどうかによって異なります。
サブスクリプション
サブスクリプション環境の場合は、次の変数を作成します。
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"
ここで
- 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 により新しい環境が作成されます。
- 続行する前に、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" ]
- 新しい環境をランタイム インスタンスに接続します。
データ所在地を使用しない場合
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" } ] }
- 次のコマンドを使用して新しい環境グループを作成します。詳細については、環境と環境グループについてをご覧ください。
データ所在地を使用しない場合
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"'"] }'
- オペレーションが完了するのを待ちます。新しいグループのステータスは、次のようなリクエストを使用して確認できます。
データ所在地を使用しない場合
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"
- 次のコマンドを使用して、新しい環境を新しい環境グループに接続します。
データ所在地を使用しない場合
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"'" }'
- オペレーションのステータスを確認するには、次の 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 つのオプションがあります。
- サービス エンドポイント: リクエストは、サービス エンドポイントを通過し、サービス アタッチメントという単一のアタッチメント ポイントに送信されます。
- 内部リージョン ロードバランサ: リクエストは、リージョン内部 HTTP(S) ロードバランサを通過します。グローバル ロード バランシングとリージョン ロード バランシングもご覧ください。
ご使用の構成に応じて以下のタブを選択し、次の操作を行います。
サービス エンドポイント
サービス アタッチメントに PSC サービス エンドポイントを作成する
- 前の手順で作成したインスタンスからサービス アタッチメントを取得します。
データ所在地を使用しない場合
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" } ] }
- Private Service Connect エンドポイントを作成するの説明に従って、前の手順でインスタンス レスポンスの本文から取得したサービス アタッチメントを指す PSC サービス エンドポイントを作成します。
- 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)を作成する
- 前の手順で作成したインスタンスからサービス アタッチメントを取得します。
データ所在地を使用しない場合
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" } ] }
前の手順でインスタンスのレスポンス本文から取得したサービス アタッチメントを参照する 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: リージョン内部ロードバランサを構成する
- ロードバランサに内部 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
- NEG のバックエンド サービスを作成します。
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTPS \ --region=$RUNTIME_REGION \ --project=$PROJECT_ID
- 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: バックエンド サービスの名前。
-
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 形式の秘密鍵ファイルのパス。
-
ロードバランサの URL マップを作成します。
URL マップでは、デフォルトのバックエンド サービスを参照する必要があります。作成したバックエンド サービスをデフォルトとして設定します。
gcloud compute url-maps create URL_MAP_NAME \ --default-service=DEFAULT_BACKEND_SERVICE_NAME \ --region=$RUNTIME_REGION \ --project=$PROJECT_ID
次のように置き換えます。
- URL_MAP_NAME: URL マップの名前。
- DEFAULT_BACKEND_SERVICE_NAME: ロードバランサのデフォルト バックエンド サービスの名前。 このデフォルトは、リクエストされたホスト名に一致するホストルールがない場合に使用されます。
-
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: 証明書リソースの名前。
- 転送ルールを作成します。
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 \ --network=$NETWORK_NAME \ --subnet=$SUBNET_NAME
以下を置き換えます。
- FWD_RULE: 転送ルールの名前。
- ADDRESS_NAME: 転送ルールに使用するために予約した IP アドレス リソース。
- PROXY_NAME: ターゲット HTTPS プロキシの名前。
- NETWORK_NAME: (省略可)NEG を作成するネットワークの名前。このパラメータを省略すると、
default
プロジェクト ネットワークが使用されます。 - SUBNET_NAME: プロデューサーへのプライベート接続に使用されるサブネットの名前。
- Apigee のプロビジョニングが完了しました。サンプル プロキシをデプロイするに移動します。
BACKEND_SERVICE_NAME は、バックエンド サービスの名前に置き換えます。
外部ルーティング(PSC)
このセクションでは、Apigee と管理している VPC 間の通信を許可するために Private Service Connect(PSC)を使用して外部ルーティングを構成する方法について説明します。外部クライアントから Apigee ランタイム インスタンスにリクエストを送信する前に、この操作を行う必要があります。
ステップ 8b: NEG を作成してロードバランサを構成する
グローバル ロードバランサまたはリージョン ロードバランサを作成できます。
グローバル外部 LB
グローバル外部 HTTP(S) ロードバランサ(EXTERNAL_MANAGED
に設定されたロード バランシング スキーム)を構成します。
Private Service Connect NEG はリージョナルですが、この構成の他のロード バランシング コンポーネントはグローバルです。
- 環境変数を定義するで、環境変数が設定されていることを確認します。
- 前の手順で作成したインスタンスからサービス アタッチメントを取得します。
データ所在地を使用しない場合
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" } ] }
前の手順でインスタンスのレスポンス本文から取得したサービス アタッチメントを参照する 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 を保持する環境変数は、次のコマンドの大部分で使用されるので、まだ作成していない場合は作成します。
- ロードバランサにグローバル外部 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
- NEG の新しいバックエンド サービスを作成します。
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --global --project=$PROJECT_ID
- 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: ネットワーク エンドポイント グループのリージョン。
ロードバランサの 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: ロードバランサのデフォルト バックエンド サービスの名前。 このデフォルトは、リクエストされたホスト名に一致するホストルールがない場合に使用されます。
ターゲット 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: 証明書リソースの名前。
- 転送ルールを作成します。
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 プロキシの名前。
BACKEND_SERVICE_NAME は、バックエンド サービスの名前に置き換えます。
リージョン外部 LB
リージョン外部 HTTP(S) ロードバランサを構成します。外部 HTTP(S) ロードバランサの概要もご覧ください。
- 環境変数を定義するで変数が設定されていることを確認してください。
- プロキシ専用サブネットを作成します。
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: サブネットが作成されるネットワークの名前。このパラメータを省略すると、デフォルトのプロジェクト ネットワークが使用されます。
- 前の手順で作成したインスタンスからサービス アタッチメントを取得します。
データ所在地を使用しない場合
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" } ] }
- ネットワーク エンドポイント グループを作成します。
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
- NEG の新しいバックエンド サービスを作成します。
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --region=$RUNTIME_LOCATION \ --project=$PROJECT_ID
- 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: ネットワーク エンドポイント グループの名前。
ロードバランサの 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: ロードバランサのデフォルト バックエンド サービスの名前。 このデフォルトは、リクエストされたホスト名に一致するホストルールがない場合に使用されます。
ターゲット 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: 証明書リソースの名前。
- ロードバランサにリージョン外部 IP アドレスを予約します。ネットワーク階層は
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
- 転送ルールを作成します。
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 プロキシの名前。
BACKEND_SERVICE_NAME は、バックエンド サービスの名前に置き換えます。
Apigee のプロビジョニングが完了しました。サンプル プロキシをデプロイするに移動します。
ステップ 8: サンプル プロキシをデプロイする
- GitHub からサンプル プロキシをダウンロードします。プロキシのターゲットは httpbin.org サービスでよく使用されるパブリック リクエストおよびレスポンス サービスです。
- 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 ファイルを含むディレクトリのパスです。
- 前の手順で作成した環境に 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"
- 次の 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"
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 プロキシのデプロイをご覧ください。