デフォルトでは、Cloud Run サービスは、動的 IP アドレスプールを使用してインターネットの外部エンドポイントに接続します。Cloud Run サービスが、IP アドレスベースのファイアウォールを使用してデータベースや API などの静的 IP アドレスを必要とする外部エンドポイントに接続する場合は、静的 IP アドレスを使用してリクエストを転送するように Cloud Run サービスを構成する必要があります。
このページでは、静的 IP アドレスを使用して Cloud Run サービスからリクエストを送信できるようにする方法について説明します。
ダイレクト VPC 下り(外向き)を使用して VPC ネットワークにトラフィックを送信するように Cloud Run を構成することをおすすめします。ただし、コネクタを作成することもできます。
タスクの概要
Cloud Run サービスが静的 IP アドレスを使用してリクエストを転送できるようにするには、Cloud NAT ゲートウェイに静的 IP アドレスが構成されている VPC ネットワーク経由ですべてのアウトバウンド トラフィックを転送するように、Cloud Run サービスの VPC 下り(外向き)を構成します。
Cloud NAT ゲートウェイと Cloud Router はコントロール プレーンのみを提供し、パケットが NAT ゲートウェイまたは Cloud Router を通過しないため、Cloud NAT 経由で転送しても、ネットワーク スタックで追加のホップは行われません。
ネットワーク アドレス変換(NAT)を構成する
ダイレクト VPC 下り(外向き)またはサーバーレス VPC アクセス コネクタを使用すると、Cloud Run サービスからのリクエストは VPC ネットワークに到達します。静的 IP を使用して外部エンドポイントにアウトバウンド リクエストを転送する場合は、Cloud NAT ゲートウェイを構成します。
gcloud
Cloud NAT ゲートウェイをプログラムする新しい Cloud Router を作成します。
gcloud compute routers create ROUTER_NAME \ --network=NETWORK_NAME \ --region=REGION
このコマンドで次の値を置き換えます。
ROUTER_NAME
は、作成する Cloud Router リソースの名前に置き換えます。NETWORK_NAME
は、先ほど確認した VPC ネットワークの名前に置き換えます。REGION
は、Cloud NAT ゲートウェイを作成するリージョンに置き換えます。
静的 IP アドレスを予約します。予約済み IP アドレス リソースは、関連付けられているリソースが削除されて再作成されるときに、元の IP アドレスを保持します。
gcloud compute addresses create ORIGIN_IP_NAME --region=REGION
このコマンドで次の値を置き換えます。
ORIGIN_IP_NAME
は、IP アドレス リソースに割り当てる名前で置き換えます。REGION
は、Cloud NAT ルーターを実行するリージョンに置き換えます。レイテンシとネットワーク コストを最小限に抑えるには、Cloud Run サービスと同じリージョンを使用します。
作成した静的 IP アドレスを使用して VPC ネットワークからのトラフィックを転送するように、このルーターに Cloud NAT ゲートウェイの構成を作成します。
gcloud compute routers nats create NAT_NAME \ --router=ROUTER_NAME \ --region=REGION \ --nat-custom-subnet-ip-ranges=SUBNET_NAME \ --nat-external-ip-pool=ORIGIN_IP_NAME
このコマンドで次の値を置き換えます。
NAT_NAME
は、作成する Cloud NAT ゲートウェイ リソースの名前に置き換えます。ROUTER_NAME
は、Cloud Router の名前に置き換えます。REGION
は、Cloud NAT ゲートウェイを作成するリージョンに置き換えます。SUBNET_NAME
は、サブネットの名前に置き換えます。ORIGIN_IP_NAME
は、前の手順で作成した予約済み IP アドレス リソースの名前に置き換えます。
Terraform
Cloud NAT ゲートウェイをプログラムする新しい Cloud Router を作成します。
cr-static-ip-router
は、使用するサブネット名に置き換えます。静的 IP アドレスを予約します。予約済み IP アドレス リソースは、関連付けられているリソースが削除されて再作成されるときに、元の IP アドレスを保持します。
cr-static-ip-addr
は、使用するサブネット名に置き換えます。作成した静的 IP アドレスを使用して VPC ネットワークからのトラフィックを転送するように、このルーターに Cloud NAT ゲートウェイの構成を作成します。
cr-static-nat
は、Cloud NAT ゲートウェイ名に置き換えます。
VPC ネットワーク経由で Cloud Run トラフィックを転送する
Cloud NAT が構成されたら、ダイレクト VPC 下り(外向き)またはサーバーレス VPC アクセス コネクタを使用して Cloud Run サービスをデプロイまたは更新し、すべてのトラフィックを VPC ネットワーク経由で転送するように VPC 下り(外向き)を設定します。
gcloud
ダイレクト VPC 下り(外向き)
ダイレクト VPC 下り(外向き)を使用してすべての下り(外向き)トラフィックを転送する Cloud Run サービスをデプロイまたは更新するには、次のコマンドを実行します。
gcloud run deploy SERVICE_NAME
--image=IMAGE_URL
--network=NETWORK
--subnet=SUBNET
--region=REGION
--vpc-egress=all-traffic
このコマンドで次の値を置き換えます。
- SERVICE_NAME は、デプロイする Cloud Run サービスの名前に置き換えます。
- IMAGE_URL は、コンテナ イメージへの参照(
us-docker.pkg.dev/cloudrun/container/hello:latest
など)に置き換えます。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式はLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
です。 - NETWORK: VPC ネットワークの名前。
- SUBNET: サブネットの名前。
- REGION: サービスのリージョン。
サーバーレス VPC アクセス コネクタ
サーバーレス VPC アクセス コネクタを使用してすべての下り(外向き)トラフィックを転送する Cloud Run サービスをデプロイまたは更新するには、次のコマンドを実行します。
gcloud run deploy SERVICE_NAME
--image=IMAGE_URL
--vpc-connector=CONNECTOR_NAME
--region=REGION
--vpc-egress=all-traffic
このコマンドで次の値を置き換えます。
* SERVICE_NAME: デプロイする Cloud Run サービスの名前。* IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest
など)。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式は LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
です。* CONNECTOR_NAME: サーバーレス VPC アクセス コネクタの名前。* REGION: サービスのリージョン。
YAML
ダイレクト VPC 下り(外向き)
新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。
gcloud run services describe SERVICE --format export > service.yaml
必要に応じて更新します。
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET"}]' run.googleapis.com/vpc-access-egress: all-traffic spec: containers: - image: IMAGE_URL
次のように置き換えます。
- SERVICE: Cloud Run サービスの名前。
- NETWORK: VPC ネットワークの名前。
- SUBNET: サブネットの名前。
- IMAGE_URL: サービス コンテナ イメージの URL。
次のコマンドを使用して、サービスを作成または更新します。
gcloud run services replace service.yaml
サーバーレス VPC アクセス コネクタ
新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。
gcloud run services describe SERVICE --format export > service.yaml
必要に応じて更新します。
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/vpc-access-connector: CONNECTOR_NAME spec: containers: - image: IMAGE_URL
次のように置き換えます。
- SERVICE: Cloud Run サービスの名前。
- CONNECTOR_NAME: サーバーレス VPC アクセス ネットワークの名前。
- IMAGE_URL: サービス コンテナ イメージの URL。
次のコマンドを使用して、サービスを作成または更新します。
gcloud run services replace service.yaml
Terraform
この Cloud Run サービスは、VPC コネクタを使用してすべての下り(外向き)トラフィックをルーティングします。
us-docker.pkg.dev/cloudrun/container/hello
は、コンテナ イメージへの参照に置き換えます。
静的外部 IP アドレスを確認する
上記の手順を完了すると、VPC ネットワーク上の Cloud NAT に事前定義の静的 IP アドレスが設定され、Cloud Run サービスのすべてのアウトバウンド トラフィックが VPC ネットワークに転送されます。Cloud Run サービスからのリクエストは VPC ネットワークを通過し、静的 IP アドレスを使用して外部エンドポイントに到達します。
この動作を確認して、サービスで使用されている送信元 IP アドレスを確認するには、元の IP アドレスを表示する API またはウェブサイト(curlmyip.org など)に対してリクエストを送信します。
静的外部 IP アドレスを削除する
静的外部 IP アドレスが不要になった場合は、静的外部 IP アドレスを解放するをご覧ください。