デフォルトでは、Cloud Run サービスは、動的 IP アドレスプールを使用してインターネットの外部エンドポイントに接続します。Cloud Run サービスが、IP アドレスベースのファイアウォールを使用するデータベースや API などの静的 IP アドレスを必要とする外部エンドポイントに接続する場合は、静的 IP アドレスを使用してリクエストをルーティングするように Cloud Run サービスを構成する必要があります。
このページでは、静的 IP アドレスを使用して Cloud Run サービスからリクエストを送信できるようにする方法について説明します。
タスクの概要
Cloud Run サービスが静的 IP アドレスを使用してリクエストをルーティングできるようにするには、Cloud NAT ゲートウェイに静的 IP アドレスが構成されている VPC ネットワーク経由ですべての送信トラフィックをルーティングするように、Cloud Run サービスの VPC 下り(外向き)を構成します。
Cloud NAT ゲートウェイと Cloud Router はコントロール プレーンのみを提供し、パケットが NAT ゲートウェイまたは Cloud Router を通過しないため、Cloud NAT 経由でルーティングしても、ネットワーク スタックで追加のホップは行われません。
同じ VPC ネットワークに接続しているすべての Cloud Run サービスは同じ下り(外向き)IP アドレスを共有します。個別の Cloud Run サービスに対して異なる下り(外向き)IP アドレスを使用するには、このページの手順に沿って個別のサブネットと、必要に応じてサーバーレス VPC アクセス コネクタを作成してください。
サブネットの作成
コネクタをホストするには、専用の /28
サブネットを作成する必要があります。ダイレクト VPC 下り(外向き)を使用している場合は、既存のサブネットを使用するか、別のサブネットを作成します。コネクタを使用すると、インターネットにアクセスするためにサーバーレス VPC アクセスを構成している場合に、専用サブネットにより、Compute Engine VM や Google Kubernetes Engine クラスタなど、VPC ネットワーク内の他のコンピューティング リソースが静的 IP アドレスを誤って使用することがなくなります。
gcloud
VPC ネットワークの名前を確認します。
gcloud compute networks list
次のような出力が表示されます。
NAME SUBNET_MODE BGP_ROUTING_MODE default AUTO REGIONAL
サーバーレス VPC アクセス コネクタに接続するネットワークを特定します。
サーバーレス VPC アクセス コネクタ用の VPC にサブネットを作成します。
gcloud compute networks subnets create SUBNET_NAME \ --range=RANGE --network=NETWORK_NAME --region=REGION
このコマンドで次の値を置き換えます。
SUBNET_NAME
は、サブネットに付ける名前に置き換えます。RANGE
は、このサブネットに割り当てる CIDR 形式の IP 範囲(10.124.0.0/28
など)に置き換えます。NETWORK_NAME
は VPC ネットワークの名前に置き換えます。REGION
は、サーバーレス VPC アクセス コネクタを作成するリージョンに置き換えます。
Terraform
使用する VPC ネットワークを作成します。
cr-static-ip-network
は、サブネット名に置き換えます。サーバーレス VPC アクセス コネクタ用の VPC にサブネットを作成します。
次のように置き換えます。
cr-static-ip
は、サブネット名に置き換えます。10.124.0.0/28
は、CIDR 範囲に置き換えます。us-central1
は、Google Cloud リージョンに置き換えます。
サーバーレス VPC アクセス コネクタを作成する
ダイレクト VPC 下り(外向き)を使用する場合は、コネクタを作成する必要はありません。ダイレクト VPC 下り(外向き)を使用しない場合は、Cloud Run サービスのアウトバウンド トラフィックを VPC ネットワークに転送するために、サーバーレス VPC アクセス コネクタが必要です。
サーバーレス VPC アクセス コネクタを作成するには:
gcloud
事前に作成されたサブネットでサーバーレス VPC アクセス コネクタを作成します。
gcloud compute networks vpc-access connectors create CONNECTOR_NAME \ --region=REGION \ --subnet-project=PROJECT_ID \ --subnet=SUBNET_NAME
このコマンドで次の値を置き換えます。
CONNECTOR
は、このリソースに付ける名前に置き換えます。PROJECT_ID
は、サブネットをホストする名前に置き換えます。SUBNET_NAME
は、作成したサブネットの名前に置き換えます。REGION
は、Cloud NAT ゲートウェイを作成するリージョンに置き換えます。
Terraform
サーバーレス VPC アクセス コネクタを作成します。
cr-conn
は、サーバーレス VPC アクセス コネクタの名前に置き換えます。
ネットワーク アドレス変換(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: サービスのリージョン。
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 アドレスを解放するをご覧ください。