サーバーレス VPC アクセス コネクタなしでダイレクト VPC 下り(外向き)を使用することで、Cloud Run サービス、関数、ジョブ、ワーカープール が VPC ネットワークにトラフィックを送信できるようにします。
Cloud Run サービスとジョブは、ダイレクト VPC 上り(内向き)をサポートしていません。ワーカープールにのみダイレクト VPC 上り(内向き)を構成するには、Cloud Run ワーカープールの上り(内向き)をご覧ください。
始める前に
プロジェクトに VPC ネットワークがない場合は作成します。
Cloud Run のサービスまたはジョブで共有 VPC を使用する場合は、共有 VPC ネットワークへの接続をご覧ください。
次の IP アドレス構成セクションを確認します。
IP アドレスの割り振り: サブネットから IP アドレスを割り振る際のガイダンス。
代替の IP アドレス範囲を使用するIP アドレスの枯渇戦略。
制限事項
Cloud Run のサービスとジョブ には、次の制限が適用されます。
- ダイレクト VPC 下り(外向き)を使用すると、インスタンスの起動時に接続の確立が 1 分以上遅れることがあります。HTTP 起動プローブを構成することをおすすめします。起動プローブは、アプリケーションがリクエストを受け入れる前に、アプリケーションが使用する下り(外向き)宛先への接続をテストします。この下り(外向き)接続テストで再試行を実装するか、起動プローブが再試行として機能するように適切な期間としきい値を構成する必要があります。
- Cloud Run ジョブの実行時間が 1 時間を超えると、接続が切断される可能性があります。これは、マシン間でジョブを移行するメンテナンス イベント中に発生する可能性があります。コンテナは、イベントの 10 秒前に
SIGTSTPシグナルを受け取り、イベント後にSIGCONTシグナルを受け取ります。コンテナがSIGCONTシグナルを受信したら、接続を再試行してください。 - Cloud NAT を使用すると、ダイレクト VPC 下り(外向き)を使用するインスタンスの起動時に、コールド スタートの遅延が 30 秒以上発生することがあります。起動��フォーマンスを向上させるには、Cloud NAT でサーバーレス VPC アクセス コネクタを使用することをおすすめします。
- Cloud Run は、インスタンスあたり最大 1 Gbps のスループットをサポートしています。この上限を超えると、パフォーマンスがスロットリングされます。
Cloud Run の使用量割り当てにより、ダイレクト VPC 下り(外向き)を使用するように構成できるインスタンスの最大数を制限します。最大数は、Cloud Run のリビジョンまたはジョブ実行ごとに構成されます。デフォルトの上限を増やすには、割り当てを増やす方法をご覧ください。
- Cloud Run サービス、ジョブ、ワーカープール では、ネットワーク インフラストラクチャのメンテナンス イベント中に接続が切断される可能性があります。ときどき発生する接続リセットを処理できるクライアント ライブラリを使用することをおすすめします。
- Network Intelligence Center は、IPv4 と IPv6 のサブネット範囲に対して接続テストと Flow Analyzer のみをサポートしています。
- Cloud Run サービスとジョブは、ダイレクト VPC 上り(内向き)をサポートしていません。ワーカープールは、ダイレクト VPC 下り(外向き)とダイレクト VPC 上り(内向き)の両方をサポートしています。
- ワーカープールはダイレクト VPC 上り(内向き)をサポートしていますが、ネットワーク タグを使用して上り(内向き)ファイアウォール ルールのターゲットを定義することはできません。
- ワーカープールへの上り(内向き)は、サーバーレス VPC アクセス コネクタではなく、ダイレクト VPC を使用してのみサポートされます。コネクタは上り(内向き)をサポートしていません。
ダイレクト VPC 下り(外向き)では、次のものはサポートされていません。
- VPC Flow Logs では、Cloud Run リビジョンの名前は提供されません。
- ファイアウォール ルール ロギング
- Packet Mirroring
- 上り(内向き)ファイアウォール ルールのネットワーク タグまたはサービス ID。
- ファイアウォール ルールでは、Cloud Run ワークロードに適用されている Resource Manager タグを使用できません。
IP アドレスの割り振り
VPC ネットワークに Cloud Run サービス、ジョブ、ワーカープール を配置するには、VPC ネットワークとサブネットのいずれかまたは両方を指定します。ネットワークのみを指定した場合、サブネットにはネットワークと同じ名前が使用されます。Cloud Run はサブネットから IP アドレスを割り振ります。
この IP アドレスは一時的なものであるため、個別の IP に基づくポリシーは作成しないでください。IP に基づくポリシー(ファイアウォール ルールなど)を作成する必要がある場合は、サブネット全体の IP アドレス範囲を使用する必要があります。
サービス、ジョブ、ワーカープール が使用するネットワークまたはサブネットを変更するには、新しいリビジョンをデプロイするか、新しいネットワークとサブネット値を使用して新しいジョブタスクを実行します。
スケールアップとスケールダウン
トラフィックの急増時に迅速にスケールアップできるように、Cloud Run は 16 個(28 サブネット マスク)のブロックで IP アドレスを予約します。Cloud Run が割り振った IP アドレスを確認する。Cloud Run 全体で使用できる十分な IPv4 アドレスを確保するには、サブネットの IPv4 アドレス範囲を /26 以上にする必要があります。
IP の割り振りを効率的に行うと同時に管理を容易にするには、複数のリソースを同じサブネットに配置します。IPv4 アドレス空間が限定されている場合は、サポートされている IPv4 範囲で他の選択肢をご確認ください。
サブネットを削除するには、Cloud Run のサービス、ジョブ、ワーカープール を削除するか再デプロイして、サブネットの使用を停止した後、1 ~ 2 時間待ちます。
サービスとワーカープールの IP アドレス使用量
安定した状態で、Cloud Run はインスタンス数の 2 倍の IP アドレスを使用します。リビジョンがスケールダウンされると、Cloud Run は最大 20 分間 IP アドレスを保持します。合計で、IP アドレス数の 2 倍以上を予約し、リビジョンの更新を考慮してバッファを追加します。
たとえば、revision 1 でインスタンス数が 100 から 0 にスケールダウンされ、revision 2 で 0 から 100 にスケールアップされるようにリビジョンをアップグレードすると、スケールダウン後、最大 20 分間 Cloud Run は revision 1 の IP アドレスを保持します。20 分間の保持期間中は、400 個以上の IP アドレス((100 + 100) * 2)を予約する必要があります。
ジョブの IP 使用量
Cloud Run ジョブの場合、各タスクは実行時間と完了後の 7 分間、1 つの IP アドレスを使用します。サブネットが、すべてのジョブタスクの同時実行に対応できる十分な大きさであることを確認します。最小予約 /26 サブネットが必要です。
例:
- 1 日 1 回実行され、次の実行の 7 分以上前に常に完了する単一タスクのジョブは、サブネットで最大 1 つの IP アドレスを使用します。
- 次の例に示すように、10 分ごとに実行され、各タスクが 15 分間実行される 10 タスクのジョブでは、タスクごとに 1 つの IP アドレスが 22 分間使用されます(3 つの実行が同時に IP アドレスを使用します)。したがって、このジョブは定常状態で 30 個の IP アドレスを使用します。
- 実行に 1 分かかり、1 分あたり 100 回実行される単一タスクジョブには、実行の正確な時間に応じて約 800 個の IP アドレスが必要です。
サポートされている IPv4 範囲
Cloud Run では、サブネットで次の IPv4 範囲をサポートしています。
IAM 権限を設定する
次のいずれかの方法で、Cloud Run が VPC ネットワークにアクセスできるようにします。
Cloud Run サービス エージェントのロール: デフォルトでは、Cloud Run サービス エージェントには、必要な権限を含む Cloud Run サービス エージェントのロール(
roles/run.serviceAgent)が付与されています。カスタム権限: より詳細に制御するには、プロジェクトに対する次の追加権限を Cloud Run サービス エージェントに付与します。
compute.networks.getcompute.subnetworks.get- プロジェクトまたは特定のサブネットに対する
compute.subnetworks.use compute.addresses.getcompute.addresses.listcompute.addresses.create(外部 IPv6 を使用するデュアルスタック サブネットの場合にのみ必要)compute.addresses.delete(外部 IPv6 を使用するデュアルスタック サブネットの場合にのみ必要)compute.addresses.createInternalcompute.addresses.deleteInternalcompute.regionOperations.get
Compute ネットワーク ユーザー ロール: デフォルトの Cloud Run サービス エージェント ロールまたはカスタム権限を使用しない場合は、Cloud Run サービス エージェント サービス アカウントに Compute ネットワーク ユーザー ロール(
roles/compute.networkUser)を付与します。外部 IPv6 を使用するサブネットには、Compute パブリック IP 管理者ロール(roles/compute.publicIpAdmin)も必要です。たとえば、Compute ネットワーク ユーザーのロールを付与するには、次のコマンドを実行します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com" \ --role "roles/compute.networkUser"
次のように置き換えます。
- PROJECT_ID: 実際のプロジェクトの ID。
- PROJECT_NUMBER: Cloud Run リソースをデプロイするプロジェクト番号。
Cloud Run リソースを VPC ネットワークに接続する
使用する Cloud Run リソースに応じて、次のいずれかのセクションにある手順をご覧ください。
サービスを VPC ネットワークに接続する
ダイレクト VPC 下り(外向き)を使用すると、Cloud Run サービスはサーバーレス VPC アクセス コネクタを使用せずに VPC ネットワークにトラフィックを送信できます。サービス自体と同様に、ネットワーク費用もゼロにスケーリングされます。また、Cloud Run サービス リビジョンに直接ネットワーク タグを追加して、VPC ファイアウォール ルールの適用など、よりきめ細かいネットワーク セキュリティを実現することもできます。
サービスにダイレクト VPC 下り(外向き)を構成するには、Google Cloud コンソール、Google Cloud CLI、YAML、または Terraform を使用します。
コンソール
デプロイ先の新しいサービスを構成する場合は、[サービスを作成] をクリックします。既存のサービスを構成してデプロイする場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。
新しいサービスを構成する場合は、必要に応じて最初のサービス設定のページに入力してから、[コンテナ、ネットワーキング、セキュリティ] をクリックしてサービス構成ページを開きます。
[ネットワーキング] タブをクリックします。
[アウトバウンド トラフィック用の VPC に接続する] をクリックします。
[VPC に直接トラフィックを送信] をクリックします。
[ネットワーク] フィールドで、トラフィックを送信する VPC ネットワークを選択します。
[サブネット] フィールドで、サービスが IP アドレスを受信するサブネットを選択します。 同じサブネットに複数のサービスをデプロイできます。
省略可: サービスに関連付けるネットワーク タグの名前を入力します。ネットワーク タグは、リビジョン レベルで指定されます。サービス リビジョンには、
network-tag-2などの異なるネットワーク タグを設定できます。[トラフィック ルーティング] で、次のいずれかを選択します。
- プライベート IP へのリクエストだけを VPC に転送し、VPC ネットワーク経由で内部アドレスにのみトラフィックを送信します。
- すべてのトラフィックを VPC にルーティングする。すべてのアウトバウンド トラフィックを VPC ネットワーク経由で送信します。
[作成] または [デプロイ] をクリックします。
サービスが VPC ネットワーク上にあることを確認するには、サービスをクリックして、[ネットワーキング] タブをクリックします。ネットワークとサブネットが [VPC] カードに一覧表示されます。
これで、ファイアウォール ルールで許可されるように、Cloud Run サービスから VPC ネットワーク上の任意のリソースにリクエストを送信できます。
gcloud
Google Cloud CLI からコネクタなしで Cloud Run サービスをデプロイするには:
gcloudコンポーネントを最新バージョンに更新します。gcloud components update
プロジェクトで Compute Engine API が有効になっていることを確認します。
gcloud services enable compute.googleapis.com
次のコマンドを使用して Cloud Run サービスをデプロイします。
gcloud run deploy SERVICE_NAME \ --image=IMAGE_URL \ --network=NETWORK \ --subnet=SUBNET \ --network-tags=NETWORK_TAG_NAMES \ --vpc-egress=EGRESS_SETTING \ --region=REGION
次のように置き換えます。
- 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 ネットワークの名前。VPC ネットワークまたはサブネット、あるいはその両方を指定します。ネットワークのみを指定した場合、サブネットにはネットワークと同じ名前が使用されます。
- SUBNET: サブネットの名前。VPC ネットワークとサブネットのいずれかまたは両方を指定します。ネットワークのみを指定した場合、サブネットにはネットワークと同じ名前が使用されます。複数の サービス、ジョブ、ワーカープール を同じサブネットにデプロイまたは実行できます。
- (省略可)NETWORK_TAG_NAMES: サービスに関連付けるネットワーク タグのカンマ区切り名。サービスの場合、ネットワーク タグはリビジョン レベルで指定されます。サービス リビジョンには、
network-tag-2などの異なるネットワーク タグを設定できます。 - EGRESS_SETTING: 下り(外向き)設定値。
all-traffic: すべてのアウトバウンド トラフィックを VPC ネットワーク経由で送信します。private-ranges-only: VPC ネットワーク経由で内部アドレスにのみトラフィックを送信します。
- REGION: サービスのリージョン。
サービスが VPC ネットワーク上にあることを確認するには、次のコマンドを実行します。
gcloud run services describe SERVICE_NAME \ --region=REGION
次のように置き換えます。
SERVICE_NAMEは、実際のサービスの名前に置き換えます。REGION: 前の手順で指定したサービスのリージョン。
出力には、ネットワークの名前、サブネット、下り(外向き)設定が含まれます。次に例を示します。
VPC access: Network: default Subnet: subnet Egress: private-ranges-only
これで、ファイアウォール ルールで許可されるように、Cloud Run サービスから VPC ネットワーク上の任意のリソースにリクエストを送信できます。
YAML
新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。
gcloud run services describe SERVICE --format export > service.yaml
次の属性を更新します。
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE_NAME labels: cloud.googleapis.com/location: REGION spec: template: metadata: annotations: run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]' run.googleapis.com/vpc-access-egress: EGRESS_SETTING spec: containers: - image: IMAGE
次のように置き換えます。
- SERVICE_NAME: Cloud Run サービスの名前。サービス名は 49 文字以下で、リージョンとプロジェクトごとに一意である必要があります。
- REGION: Cloud Run サービスのリージョン。サブネットのリージョンと一致する必要があります。
- NETWORK: VPC ネットワークの名前。VPC ネットワークまたはサブネット、あるいはその両方を指定します。ネットワークのみを指定した場合、サブネットにはネットワークと同じ名前が使用されます。
- SUBNET: サブネットの名前。VPC ネットワークとサブネットのいずれかまたは両方を指定します。ネットワークのみを指定した場合、サブネットにはネットワークと同じ名前が使用されます。複数の サービス、ジョブ、ワーカープール を同じサブネットにデプロイまたは実行できます。
- (省略可)NETWORK_TAG_NAMES: サービスに関連付けるネットワーク タグの名前。サービスの場合、ネットワーク タグはリビジョン レベルで指定されます。サービス リビジョンには、
network-tag-2などの異なるネットワーク タグを設定できます。 - EGRESS_SETTING: 下り(外向き)設定値。
all-traffic: すべてのアウトバウンド トラフィックを VPC ネットワーク経由で送信します。private-ranges-only: VPC ネットワーク経由で内部アドレスにのみトラフィックを送信します。
- IMAGE: サービス コンテナ イメージの URL。
環境変数やメモリ上限など他の構成を指定することもできます。
次のコマンドを使用して、サービスを作成または更新します。
gcloud run services replace service.yaml
Terraform
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
次のコードを
main.tfファイルに追加します。
(省略可能)サービスへの未認証アクセスを許可したい場合は、サービスを一般公開にします。
ジョブを VPC ネットワークに接続する
ダイレクト VPC 下り(外向き)を使用すると、Cloud Run ジョブはサーバーレス VPC アクセス コネクタを使用せずに VPC ネットワークにトラフィックを送信できます。また、Cloud Run ジョブに直接ネットワーク タグを追加して、VPC ファイアウォール ルールの適用など、よりきめ細かいネットワーク セキュリティを実現することもできます。
ジョブにダイレクト VPC 下り(外向き)を構成するには、Google Cloud コンソール、Google Cloud CLI、または YAML を使用します。
コンソール
新しいジョブを構成する場合は、[ジョブ] タブをクリックし、必要に応じて初期ジョブ設定ページを入力します。既存のジョブを構成する場合は、ジョブをクリックして [編集] をクリックします。
[コンテナ、変数とシークレット、接続、セキュリティ] をクリックして、ジョブのプロパティ ページを開きます。
[接続] タブをクリックします。
[アウトバウンド トラフィック用の VPC に接続する] をクリックします。
[VPC に直接トラフィックを送信] をクリックします。
[ネットワーク] フィールドで、トラフィックを送信する VPC ネットワークを選択します。
[サブネット] フィールドで、ジョブが IP アドレスを受信するサブネットを選択します。同じサブネットで複数のジョブを実行できます。
[トラフィック ルーティング] で、次のいずれかを選択します。
- プライベート IP へのリクエストだけを VPC に転送し、VPC ネットワーク経由で内部アドレスにのみトラフィックを送信します。
- すべてのトラフィックを VPC にルーティングする。すべてのアウトバウンド トラフィックを VPC ネットワーク経由で送信します。
省略可: サービスに関連付けるネットワーク タグの名前を入力します。ネットワーク タグは、リビジョン レベルで指定されます。サービス リビジョンには、
network-tag-2などの異なるネットワーク タグを設定できます。省略可: ジョブに関連付けるネットワーク タグの名前を入力します。ジョブの場合、ネットワーク タグは実行レベルで指定されます。ジョブ実行ごとに異なるネットワーク タグ(
network-tag-2など)を設定できます。[作成] または [更新] をクリックします。
ジョブが VPC ネットワーク上にあることを確認するには、ジョブをクリックして [構成] タブをクリックし���す。ネットワークとサブネットが [VPC] カードに一覧表示されます。
これで、ファイアウォール ルールで許可されているように、Cloud Run ジョブを実行して、VPC ネットワーク上の任意のリソースにリクエストを送信できます。
gcloud
Google Cloud CLI からコネクタなしで Cloud Run ジョブを作成するには:
gcloudコンポーネントを最新バージョンに更新します。gcloud components update
プロジェクトで Compute Engine API が有効になっていることを確認します。
gcloud services enable compute.googleapis.com
次のコマンドを使用して Cloud Run ジョブを作成します。
gcloud run jobs create JOB_NAME \ --image=IMAGE_URL \ --network=NETWORK \ --subnet=SUBNET \ --network-tags=NETWORK_TAG_NAMES \ --vpc-egress=EGRESS_SETTING \ --region=REGION
次のように置き換えます。
- JOB_NAME: Cloud Run ジョブの名前。
- IMAGE_URL: コンテナ イメージへの参照(
us-docker.pkg.dev/cloudrun/container/job:latestなど)。 - NETWORK: VPC ネットワークの名前。VPC ネットワークまたはサブネット、あるいはその両方を指定します。ネットワークのみを指定した場合、サブネットにはネットワークと同じ名前が使用されます。
- SUBNET: サブネットの名前。VPC ネットワークとサブネットのいずれかまたは両方を指定します。ネットワークのみを指定した場合、サブネットにはネットワークと同じ名前が使用されます。複数の サービス、ジョブ、ワーカープール を同じサブネットにデプロイまたは実行できます。
- (省略可)NETWORK_TAG_NAMES: ジョブに関連付けるネットワーク タグの名前。ジョブの場合、ネットワーク タグは実行レベルで指定されます。ジョブ実行ごとに異なるネットワーク タグ(
network-tag-2など)を設定できます。 - EGRESS_SETTING: 下り(外向き)設定値。
all-traffic: すべてのアウトバウンド トラフィックを VPC ネットワーク経由で送信します。private-ranges-only: VPC ネットワーク経由で内部アドレスにのみトラフィックを送信します。
- REGION: ジョブのリージョン。
ジョブが VPC ネットワーク上にあることを確認するには、次のコマンドを実行します。
gcloud run jobs describe JOB_NAME \ --region=REGION
次のように置き換えます。
JOB_NAMEは、ジョブの名前に置き換えます。REGION: 前の手順で指定したジョブのリージョン。
出力には次のようなネットワークまたはサブネットの名前が表示されます。
VPC network: Network: default Subnet: default
これで、ファイアウォール ルールで許可されているように、Cloud Run ジョブを実行して、VPC ネットワーク上の任意のリソースにリクエストを送信できます。
YAML
新しいジョブを作成する場合は、この手順をスキップします。既存のジョブを更新する場合は、その YAML 構成をダウンロードします。
gcloud run jobs describe JOB_NAME --format export > job.yaml
次の属性を更新します。
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME labels: cloud.googleapis.com/location: REGION spec: template: metadata: annotations: run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]' run.googleapis.com/vpc-access-egress: EGRESS_SETTING spec: containers: - image: IMAGE
次のように置き換えます。
- JOB_NAME: Cloud Run ジョブの名前。ジョブ名は 49 文字以下で、リージョンとプロジェクトごとに一意である必要があります。
- REGION: Cloud Run ジョブのリージョン。サブネットのリージョンと一致する必要があります。
- NETWORK: VPC ネットワークの名前。VPC ネットワークまたはサブネット、あるいはその両方を指定します。ネットワークのみを指定した場合、サブネットにはネットワークと同じ名前が使用されます。
- SUBNET: サブネットの名前。VPC ネットワークとサブネットのいずれかまたは両方を指定します。ネットワークのみを指定した場合、サブネットにはネットワークと同じ名前が使用されます。複数の サービス、ジョブ、ワーカープール を同じサブネットにデプロイまたは実行できます。
- (省略可)NETWORK_TAG_NAMES: ジョブに関連付けるネットワーク タグの名前。ジョブの場合、ネットワーク タグは実行レベルで指定されます。ジョブ実行ごとに異なるネットワーク タグ(
network-tag-2など)を設定できます。 - EGRESS_SETTING: 下り(外向き)設定値。
all-traffic: すべてのアウトバウンド トラフィックを VPC ネットワーク経由で送信します。private-ranges-only: VPC ネットワーク経由で内部アドレスにのみトラフィックを送信します。
- IMAGE: ジョブのコンテナ イメージの URL。
次のコマンドを使用して、ジョブを作成または更新します。
gcloud run jobs replace job.yaml
ワーカープールを VPC ネットワークに接続する
ダイレクト VPC を使用すると、Cloud Run ワーカープールは VPC との間でトラフィックを送受信できます。各ワーカープール インスタンスは、構成されたネットワークとサブネットでプライベート IP アドレスを受け取ります。
サービスやジョブとは異なり、ワーカープールのダイレクト VPC 接続では下り(外向き)と上り(内向き)が許可されます。つまり、ワーカープール インスタンスは VPC ネットワーク上のリソースにアクセスでき、VPC ネットワーク上のリソースも IP アドレスを使用してワーカープール インスタンスにアクセスできます。インスタンスがメタデータ サーバーを使用してプライベート IP アドレスを取得する方法をご覧ください。
また、ダイレクト VPC 下り(外向き)を使用して Cloud Run ワーカープール リビジョンにネットワーク タグを直接追加して、VPC ファイアウォール ルールの適用など、よりきめ細かいネットワーク セキュリティを実現することもできます。
ダイレクト VPC 下り(外向き)を構成するには、 Google Cloud コンソール、Google Cloud CLI、または YAML を使用します。
コンソール
メニューから [ワーカープール] を選択し、[コンテナをデプロイ] をクリックして新しいワーカープールを構成します。既存のワーカープールを構成する場合は、ワーカープールをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。
新しいワーカープールを構成する場合は、最初のワーカープール ページに入力してから、[コンテナ、ボリューム、ネットワーキング、セキュリティ] をクリックしてワーカープール構成ページを開きます。
[ネットワーキング] タブをクリックします。
[VPC に接続] を選択します。
[作成] または [デプロイ] をクリックします。
これで、ファイアウォール ルールで許可されるように、Cloud Run ワーカープールから VPC ネットワーク上の任意のリソースにリクエストを送信できます。
gcloud
Google Cloud CLI からコネクタなしで Cloud Run ワーカープールをデプロイするには:
gcloudコンポーネントを最新バージョンに更新します。gcloud components update
プロジェクトで Compute Engine API が有効になっていることを確認します。
gcloud services enable compute.googleapis.com
次のコマンドを使用して、Cloud Run ワーカープールをデプロイします。
gcloud run worker-pools deploy WORKER_POOL \ --image=IMAGE_URL \ --network=NETWORK \ --subnet=SUBNET \ --network-tags=NETWORK_TAG_NAMES \ --vpc-egress=EGRESS_SETTING \ --region=REGION
次のように置き換えます。
- WORKER_POOL: Cloud Run ワーカープールの名前。ワーカープール名は 49 文字以下で、リージョンとプロジェクトごとに一意の名前を使用する必要があります。また、プロジェクトの既存のサービス名と同じ名前は使用できません。ワーカープールがまだ存在しない場合、このコマンドはデプロイ中にワーカープールを作成します。このパラメータは省略できますが、省略するとワーカープール名の入力を求められます。
- IMAGE_URL: ワーカープールを含むコンテナ イメージへの参照(
us-docker.pkg.dev/cloudrun/container/worker-pool:latestなど) - NETWORK: VPC ネットワークの名前。VPC ネットワークまたはサブネット、あるいはその両方を指定します。ネットワークのみを指定した場合、サブネットにはネットワークと同じ名前が使用されます。
- SUBNET: サブネットの名前。VPC ネットワークとサブネットのいずれかまたは両方を指定します。ネットワークのみを指定した場合、サブネットにはネットワークと同じ名前が使用されます。複数の サービス、ジョブ、ワーカープール を同じサブネットにデプロイまたは実行できます。
- (省略可)(ダイレクト VPC 下り(外向き)のみ)NETWORK_TAG_NAMES: ワーカープールに関連付けるネットワーク タグのカンマ区切り名。サービスの場合、ネットワーク タグはリビジョン レベルで指定されます。ワーカープール リビジョンごとに異なるネットワーク タグ(
network-tag-2など)を設定できます。 - EGRESS_SETTING: 下り(外向き)設定値。
all-traffic: すべてのアウトバウンド トラフィックを VPC ネットワーク経由で送信します。private-ranges-only: VPC ネットワーク経由で内部アドレスにのみトラフィックを送信します。
- REGION: ワーカープールのリージョン。
ワーカープールが VPC ネットワーク上にあることを確認するには、次のコマンドを実行します。
gcloud run worker-pools describe WORKER_POOL \ --region=REGION
次のように置き換えます。
WORKER_POOL: ワーカープールの名前。REGION: 前の手順で指定したワーカープールのリージョン。
出力には、ネットワークの名前、サブネット、下り(外向き)設定が含まれます。次に例を示します。
VPC access: Network: default Subnet: subnet Egress: private-ranges-only
これで、ファイアウォール ルールで許可されるように、Cloud Run ワーカープールから VPC ネットワーク上の任意のリソースにリクエストを送信できます。
YAML
新しいワーカープールを作成する場合は、この手順をスキップします。既存のワーカープールを更新する場合は、その YAML 構成をダウンロードします。
gcloud run worker-pools describe WORKER_POOL --format export > worker-pool.yaml
次の属性を更新します。
apiVersion: run.googleapis.com/v1 kind: WorkerPool metadata: name: WORKER_POOL labels: cloud.googleapis.com/location: REGION spec: template: metadata: annotations: run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]' run.googleapis.com/vpc-access-egress: EGRESS_SETTING spec: containers: - image: IMAGE_URL
次のように置き換えます。
- WORKER_POOL: Cloud Run ワーカープールの名前。
- REGION: Cloud Run ワーカープールのリージョン。サブネットのリージョンと一致する必要があります。
- NETWORK: VPC ネットワークの名前。VPC ネットワークまたはサブネット、あるいはその両方を指定します。ネットワークのみを指定した場合、サブネットにはネットワークと同じ名前が使用されます。
- SUBNET: サブネットの名前。VPC ネットワークとサブネットのいずれかまたは両方を指定します。ネットワークのみを指定した場合、サブネットにはネットワークと同じ名前が使用されます。複数の サービス、ジョブ、ワーカープール を同じサブネットにデプロイまたは実行できます。
- 省略可(ダイレクト VPC 下り(外向き)のみ): NETWORK_TAG_NAMES: ワーカープールに関連付けるネットワーク タグの名前。ワーカープールの場合、ネットワーク タグはリビジョン レベルで指定されます。ワーカープール リビジョンごとに異なるネットワーク タグ(
network-tag-2など)を設定できます。 - EGRESS_SETTING: 下り(外向き)設定値。
all-traffic: すべてのアウトバウンド トラフィックを VPC ネットワーク経由で送信します。private-ranges-only: VPC ネットワーク経由で内部アドレスにのみトラフィックを送信します。
- IMAGE_URL: ワーカープールを含むコンテナ イメージへの参照(
us-docker.pkg.dev/cloudrun/container/worker-pool:latestなど)。
環境変数やメモリ上限など他の構成を指定することもできます。
次のコマンドを使用して、ワーカープールを作成または更新します。
gcloud run worker-pools replace worker-pool.yaml
gcloud run worker-pools replaceコマンドは、worker-pool.yamlファイルが存在する場合はデフォルトでそのファイルを使用します。
管理者は、run.allowedVPCEgress 組織のポリシーを設定することで、デベロッパーが選択可能な下り(外向き)設定を制限できます。
メタデータ サーバーを使用してプライベート IP アドレスを取得する
VPC ネットワーク内のインスタンス間のプライベート IP アドレスにアクセスして、安全な内部通信を行うことができます。メタデータ サーバーからワーカープール インスタンスのプライベート IP アドレスを取得するには、コンテナ内で次のコマンドを実行します。
IPv4 アドレスを取得するには、
/computeMetadata/v1/instance/network-interfaces/0/ipエンドポイントのメタデータ サーバーにリクエストを送信します。curl "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip" -H "Metadata-Flavor: Google"IPv6 アドレスを取得するには、デュアルスタック サブネットを使用してインスタンスを作成し、
/computeMetadata/v1/instance/network-interfaces/0/ipv6エンドポイントのメタデータ サーバーにリクエストを送信します。curl "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ipv6" -H "Metadata-Flavor: Google"ワーカープール インスタンスが VPC ネットワークに接続されていることを確認するには、次のネットワーク インターフェース メタデータ パスをクエリします。
# Verify the existence of the network interface directory curl "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/" -H "Metadata-Flavor: Google" # Verify the existence of the first network interface curl "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/" -H "Metadata-Flavor: Google"
メタデータ サーバーエラーを処理する
メタデータ サーバーは、次のシナリオで 404: Not Found エラーを返します。
- IPv4 のみのサブネットで IPv6 アドレスをクエリする場合。
ワーカープール インスタンスを VPC ネットワークに接続しない場合。この場合、メタデータ サーバーは次のパスに対してエラーを返します。
/computeMetadata/v1/instance/network-interfaces/computeMetadata/v1/instance/network-interfaces/0/computeMetadata/v1/instance/network-interfaces/0/ip/computeMetadata/v1/instance/network-interfaces/0/ipv6
デュアルスタック(IPv4 と IPv6)を設定する
Cloud Run リソースに IPv6 範囲を持つデュアルスタック サブネットを追加するには、デュアルスタックを設定するをご覧ください。
ファイアウォール ルールでアクセスを制限する
VPC ファイアウォール ルールを使用して、VPC ネットワーク内のリソースへのアクセスを制限します。これらの制限を追加するには、次のいずれかの方法を使用します。
- サブネットの IP 範囲を使用して、サービスまたはジョブを参照する上り(内向き)ファイアウォール ルールを作成します。
サービスまたはジョブを参照する下り(外向き)ファイアウォール ルールを作成します。
下り(外向き)ファイアウォール ルールで、リンクされたサービス アカウントのサービス ID、サブネットの IP 範囲、または関連するネットワーク タグを使用して、サービスまたはジョブを参照します。
下り(外向き)ネットワーク タグ
下り(外向き)ファイアウォール ルールでネットワーク タグを使用して、ネットワーク セキュリティを強化します。
コンソール
ネットワーク タグをサービスまたはジョブに関連付けるには:
Google Cloud コンソールで、[Cloud Run] ページに移動します。
ネットワーク タグを関連付けるサービスまたはジョブをクリックし、[新しいリビジョンの編集とデプロイ](サービスの場合)または [編集](ジョブの場合)をクリックします。
[ネットワーキング] タブ(サービスの場合)または [接続] タブ(ジョブの場合)をクリックします。
[アウトバウンド トラフィック用の VPC に接続する] と [VPC に直接トラフィックを送信] が選択されていることを確認します。
[サブネット] ���ィールドで、サービスが IP アドレスを受信するサブネットを選択します。複数のサービスまたはジョブを同じサブネットにデプロイまたは実行できます。
[ネットワーク タグ] フィールドに、サービスまたはジョブに関連付けるネットワーク タグの名前を入力します。
[デプロイ] または [更新] をクリックします。
サービスの場合、ネットワーク タグはリビジョン レベルで指定されるため、サービス リビジョンごとに異なるネットワーク タグのセットを使用できます。ジョブの場合、ジョブ実行の作成時にジョブに設定されていた同じネットワーク タグがジョブ実行に設定されます。
gcloud
ネットワーク タグをサービスまたはジョブに関連付けるには、gcloud run deploy コマンドを使用します。
gcloud run deploy SERVICE_JOB_NAME \ --image=IMAGE_URL \ --network=NETWORK \ --subnet=SUBNET \ --network-tags=NETWORK_TAG_NAMES \ --region=REGION
次のように置き換えます。
- SERVICE_JOB_NAME: サービスまたはジョブの名前。
- IMAGE_URL: サービスまたはジョブのイメージ URL。
- NETWORK: VPC ネットワークの名前。
- SUBNET: サブネットの名前。VPC ネットワークとサブネットのいずれかまたは両方を指定します。ネットワークのみを指定した場合、サブネットにはネットワークと同じ名前が使用されます。複数の サービス、ジョブ、ワーカープール を同じサブネットにデプロイまたは実行できます。
- NETWORK_TAG_NAMES: ネットワーク タグの名前またはネットワーク タグのカンマ区切りリスト。
- REGION: リージョンの名前。
サービスの場合、ネットワーク タグはリビジョン レベルで指定されるため、サービス リビジョンごとに異なるネットワーク タグのセットを使用できます。ジョブの場合、ジョブ実行の作成時にジョブに設定されていた同じネットワーク タグがジョブ実行に設定されます。
Cloud Run リソースの接続を解除する
使用する Cloud Run リソースに応じて、次のいずれかのセクションにある手順をご覧ください。
サービスを接続解除する
コンソール
VPC ネットワークからサービスを削除するには:
削除するサービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。
[ネットワーキング] タブをクリックします。
[アウトバウンド トラフィック用の VPC に接続する] をクリアします。
[デプロイ] をクリックします。
サービスが VPC ネットワークに存在しなくなったことを確認するには、[ネットワーキング] タブをクリックします。ネットワークとサブネットが [VPC] カードに表示されなくなります。
サービスを VPC ネットワークに接続したまま、ネットワーク タグのみを削除するには:
削除するネットワーク タグを含むサービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。
[ネットワーキング] タブをクリックします。
サービスとの関連付けを解除したいネットワーク タグの名前をクリアします。
[デプロイ] をクリックします。
gcloud
VPC ネットワークからサービスを削除するには、次のコマンドを実行します。
gcloud run services update SERVICE_NAME --region=REGION \ --clear-network
VPC ネットワークに接続したままネットワーク タグのみを削除するには、次のコマンドを実行します。
gcloud run services update SERVICE_NAME --region=REGION \ --clear-network-tags
次のように置き換えます。
- SERVICE_NAME: Cloud Run サービスの名前。
- REGION: Cloud Run サービスのリージョン。
YAML
VPC ネットワークからサービスを削除するには:
サービスの YAML 構成をダウンロードします。
gcloud run services describe SERVICE_NAME --format export > service.yaml
service.yamlファイルから次の内容を削除します。run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]'
ここで
- NETWORK: VPC ネットワークの名前。
- SUBNET: サブネットの名前。
- (省略可��NETWORK_TAG_NAMES: サービスに関連付けられているネットワーク タグの名前。
次のコマンドを実行して、サービス リビジョンをデプロイします。
gcloud run services replace service.yaml
サービスを VPC ネットワークに接続したまま、ネットワーク タグのみを削除するには:
サービスの YAML 構成をダウンロードします。
gcloud run services describe SERVICE_NAME --format export > service.yaml
次の例に示すように、
service.yamlファイルの内容からtags変数を削除します。network変数とsubnetwork変数はそのままにします。run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET"}]'
ここで
- NETWORK: VPC ネットワークの名前。
- SUBNET: サブネットの名前。
次のコマンドを実行して、サービス リビジョンをデプロイします。
gcloud run services replace service.yaml
ジョブを切断する
コンソール
VPC ネットワークからジョブを削除するには:
削除するジョブをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。
[接続] タブをクリックします。
[アウトバウンド トラフィック用の VPC に接続する] をクリアします。
[更新] をクリックします。
ジョブが VPC ネットワークに存在しないことを確認するには、[構成] タブをクリックします。ネットワークとサブネットが [VPC] カードに表示されなくなります。
ジョブを VPC ネットワークに接続したまま、ネットワーク タグのみを削除するには:
削除するネットワーク タグを含むジョブをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。
[接続] タブをクリックします。
ジョブとの関連付けを解除したいネットワーク タグの名前をクリアします。
[更新] をクリックします。
gcloud
VPC ネットワークからジョブを削除するには、次のコマンドを実行します。
gcloud run jobs update JOB_NAME --region=REGION \ --clear-network
ジョブを VPC ネットワークに接続したままネットワーク タグのみを削除するには、次のコマンドを実行します。
gcloud run jobs update JOB_NAME --region=REGION \ --clear-network-tags
次のように置き換えます。
- JOB_NAME: Cloud Run ジョブの名前。
- REGION: Cloud Run ジョブのリージョン。
YAML
VPC ネットワークからジョブを削除するには:
ジョブの YAML 構成をダウンロードします。
gcloud run jobs describe JOB_NAME --format export > job.yaml
job.yamlファイルから次の内容を削除します。run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]'
次のように置き換えます。
- NETWORK: VPC ネットワークの名前。
- SUBNET: サブネットの名前。
- (省略可)NETWORK_TAG_NAMES: ジョブをネットワーク タグに関連付けている場合、ネットワーク タグの名前。
次のコマンドを実行して、ジョブを更新します。
gcloud run jobs replace job.yaml
ジョブを VPC ネットワークに接続したまま、ネットワーク タグのみを削除するには:
ジョブの YAML 構成をダウンロードします。
gcloud run jobs describe JOB_NAME --format export > job.yaml
次の例に示すように、
job.yamlファイルの内容からtags変数を削除します。network変数とsubnetwork変数はそのままにします。run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET"}]'
次のように置き換えます。
- NETWORK: VPC ネットワークの名前。
- SUBNET: サブネットの名前。
次のコマンドを実行して、ジョブを更新します。
gcloud run jobs replace job.yaml
ワーカープールを接続解除する
gcloud
VPC ネットワークからワーカープールを削除するには、次のコマンドを実行します。
gcloud run worker-pools update WORKER_POOL --region=REGION \ --clear-network
ワーカープールを VPC ネットワークに接続したままネットワーク タグのみを削除するには、次のコマンドを実行します。
gcloud run worker-pools update WORKER_POOL --region=REGION \ --clear-network-tags
次のように置き換えます。
- WORKER_POOL: Cloud Run ワーカープールの名前。
- REGION: Cloud Run ワーカープールのリージョン。
トラブルシューティング
サブネットを削除できない
サブネットを削除するには、そのサブネットを使用するすべてのリソースを先に削除する必要があります。Cloud Run がサブネットを使用している場合は、Cloud Run のサービスまたはジョブを VPC ネットワークから切断します。サブネットを削除する前に別のサブネットに移動することもできます。
ダイレクト VPC 下り(外向き)サブネットで IPv4 アドレスが不足する
デプロイしようとすると、次のエラーが発生��ます。
Instance failed to start because of insufficient free IP addresses in the subnetwork SUBNET_ID when attempting to create an address in the subnetwork. Please consider moving to a subnetwork with more available IP addresses.
VPC ネットワークのサブネットで IPv4 アドレスが不足した場合、Cloud Logging によってログに記録されます。この場合、Cloud Run は追加の IPv4 アドレスが利用可能になるまで、サービス インスタンスやジョブタスクを開始できません。
この問題を解決するには、IP アドレスの枯渇に関する戦略に沿って対応してください。
割り振られた IP アドレスを表示する
Cloud Run が割り振った IP アドレスを確認するには、 Google Cloud コンソールの [IP アドレス] ページに移動するか、Google Cloud CLI から次のコマンドを実行します。
gcloud compute addresses list
カスタム MTU に関する問題
カスタム MTU で問題が発生した場合は、Cloud Run のデフォルトの MTU 設定を使用していることを確認してください。