このページでは、サーバーレス VPC アクセスを使用して、Cloud Run サービスまたはジョブを VPC ネットワークに直接接続する方法を説明しています。これにより、Compute Engine VM インスタンス、Memorystore インスタンスなどのリソースに内部 IP アドレスでアクセスできます。
始める前に
プロジェクトに VPC ネットワークがない場合は作成します。
共有 VPC を使用する場合は、共有 VPC ネットワークへの接続をご覧ください。
サーバーレス VPC アクセス コネクタを作成する
公共のインターネットを使用せずに VPC ネットワークにリクエストを送信して対応するレスポンスを受信するには、サーバーレス VPC アクセス コネクタを使用する必要があります。
コネクタは、Google Cloud コンソール、Google Cloud CLI、または Terraform を使用して作成できます。
コンソール
プロジェクトで Serverless VPC Access API が有効になっていることを確認します。
サーバーレス VPC アクセスの概要ページに移動します。
[コネクタを作成] をクリックします。
[名前] フィールドに、コネクタの名前を入力します。これは Compute Engine の命名規則に従う必要がありますが、ハイフン(-)は 2 文字とカウントし、21 文字未満にする必要があります。
[リージョン] フィールドで、コネクタのリージョンを選択します。これは、サーバーレス サービスのリージョンと一致する必要があります。
サービスまたはジョブが
us-central
またはeurope-west
リージョンにある場合は、us-central1
またはeurope-west1
を使用します。[ネットワーク] フィールドで、コネクタを接続する VPC ネットワークを選択します。
[サブネットワーク] プルダウン メニューをクリックします。
独自のサブネットを必要とする共有 VPC を使用している場合は、未使用の
/28
サブネットを選択します。- サブネットはコネクタ専用にする必要があります。VM、Private Service Connect、ロードバランサなどの他のリソースでは使用できません。
- サブネットが Private Service Connect や Cloud Load Balancing で使用されていないことを確認するには、gcloud CLI で次のコマンドを実行して、サブネットの
purpose
がPRIVATE
であることを確認します。gcloud compute networks subnets describe SUBNET_NAME
次のように置き換えます。- SUBNET_NAME: サブネットの名前
共有 VPC を使用していない場合、サブネットを明示的に作成するのではなく、コネクタでサブネットを作成するようにしたい場合は、プルダウンから [カスタム IP 範囲] を選択して、予約されていない CIDR
/28
内部 IP 範囲の最初のアドレスを [IP 範囲] フィールドに入力します。この IP 範囲は、VPC ネットワーク内の既存の IP アドレス予約と重複してはいけません。たとえば、10.8.0.0
(/28
)はほとんどの新しいプロジェクトで機能します。
(省略可)コネクタを詳細に制御するためのスケーリング オプションを設定するには、[スケーリング設定を表示] をクリックしてスケーリング フォームを表示します。
- コネクタのインスタンスの最小数と最大数を設定するか、デフォルト値(最小 2、最大 10)を使用します。コネクタは、トラフィックの使用量に応じて指定された最大値にスケールアウトしますが、トラフィックが減少してもスケールインしません。
2
~10
の範囲の値を使用する必要があります。 - [インスタンス タイプ] プルダウン メニューで、コネクタに使用するマシンタイプを選択するか、デフォルトの
e2-micro
を使用します。インスタンス タイプを選択すると、右側にコスト サイドバーが表示され、帯域幅とコストの見積もりが表示されます。
- コネクタのインスタンスの最小数と最大数を設定するか、デフォルト値(最小 2、最大 10)を使用します。コネクタは、トラフィックの使用量に応じて指定された最大値にスケールアウトしますが、トラフィックが減少してもスケールインしません。
[作成] をクリックします。
コネクタの使用準備が整うと、コネクタ名の横に緑色のチェックマークが表示されます。
gcloud
-
Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。
Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
gcloud
コンポーネントを最新バージョンに更新します。gcloud components update
プロジェクトで Serverless VPC Access API が有効になっていることを確認します。
gcloud services enable vpcaccess.googleapis.com
独自のサブネットを必要とする共有 VPC を使用している場合は、次のコマンドでコネクタを作成します。
gcloud compute networks vpc-access connectors create CONNECTOR_NAME \ --region REGION \ --subnet SUBNET \ # If you are not using Shared VPC, omit the following line. --subnet-project HOST_PROJECT_ID \ # Optional: specify minimum and maximum instance values between 2 and 10, default is 2 min, 10 max. --min-instances MIN \ --max-instances MAX \ # Optional: specify machine type, default is e2-micro --machine-type MACHINE_TYPE
次のように置き換えます。
CONNECTOR_NAME
: コネクタの名前。これは Compute Engine の命名規則に従う必要がありますが、ハイフン(-)は 2 文字とカウントして、21 文字未満にする必要があります。REGION
: コネクタのリージョン。これは、サーバーレス サービスまたはジョブのリージョンと一致する必要があります。サービスまたはジョブがus-central
またはeurope-west
リージョンにある場合は、us-central1
またはeurope-west1
を使用します。SUBNET
: 未使用の/28
サブネットの名前。- サブネットはコネクタ専用にする必要があります。VM、Private Service Connect、ロードバランサなどの他のリソースでは使用できません。
- サブネットが Private Service Connect や Cloud Load Balancing で使用されていないことを確認するには、gcloud CLI で次のコマンドを実行して、サブネットの
purpose
がPRIVATE
であることを確認します。gcloud compute networks subnets describe SUBNET_NAME
次のように置き換えます。- SUBNET_NAME: サブネットの名前。
HOST_PROJECT_ID
: ホスト プロジェクトの ID。共有 VPC を使用する場合にのみ指定します。MIN
: コネクタに使用するインスタンスの最小数。2
~9
の整数を使用してください。デフォルトは2
です。コネクタのスケーリングの詳細については、スループットとスケーリングをご覧ください。MAX
: コネクタに使用するインスタンスの最大数。3
~10
の整数を使用してください。デフォルトは10
です。トラフィックで必要な場合、コネクタは[MAX]
インスタンスにスケールアウトしますが、再スケーリングは行われません。コネクタのスケーリングの詳細については、スループットとスケーリングをご覧ください。MACHINE_TYPE
:f1-micro
、e2-micro
、またはe2-standard-4
。マシンタイプやスケーリングなど、コネクタのスループットの詳細については、スループットとスケーリングをご覧ください。
より詳しい情報とオプションの引数については、
gcloud
のリファレンスをご覧ください。共有 VPC を使用していない場合、サブネットを使用せずにカスタム IP 範囲を指定するには、次のコマンドでコネクタを作成します。
gcloud compute networks vpc-access connectors create CONNECTOR_NAME \ --network VPC_NETWORK \ --region REGION \ --range IP_RANGE
次のように置き換えます。
CONNECTOR_NAME
: コネクタの名前。これは Compute Engine の命名規則に従う必要がありますが、ハイフン(-
)を 2 文字とカウントして、21 文字未満にする必要があります。VPC_NETWORK
: コネクタを接続する VPC ネットワークREGION
: コネクタのリージョン。これは、サーバーレス サービスまたはジョブのリージョンと一致する必要があります。サービスまたはジョブがus-central
またはeurope-west
リージョンにある場合は、us-central1
またはeurope-west1
を使用します。IP_RANGE
: 予約されていない内部 IP ネットワーク。未割り振りスペースの/28
が必要です。指定された値は、CIDR 表記(10.8.0.0/28
)で示されたネットワークです。この IP 範囲は、VPC ネットワーク内の既存の IP アドレス予約と重複してはいけません。たとえば、10.8.0.0/28
はほとんどの新しいプロジェクトで機能します。
スループット制御などの詳細とオプションの引数については、
gcloud
のリファレンスをご覧ください。使用する前に、コネクタが
READY
状態になっていることを確認します。gcloud compute networks vpc-access connectors describe CONNECTOR_NAME \ --region REGION
次のように置き換えます。
CONNECTOR_NAME
: コネクタの名前。これは、前のステップで指定した名前です。REGION
: コネクタのリージョン。これは、前の手順で指定したリージョンです。
出力には、
state: READY
という行が含まれます。
Terraform
Terraform リソースを使用して、vpcaccess.googleapis.com
API を有効にできます。
Terraform モジュールを使用して VPC ネットワークとサブネットを作成し、コネクタを作成できます。
コネクタを使用するサービスを構成する
サーバーレス VPC アクセス コネクタを作成したら、そのコネクタを使用するように Cloud Run サービスを構成する必要があります。これは、新しいサービスを作成するか新しいリビジョンをデプロイするときに、Google Cloud コンソール、Google Cloud CLI、または YAML ファイルを使用して行うことができます。
コンソール
デプロイ先の新しいサービスを構成する場合は、[サービスの作成] をクリックします。既存のサービスを構成する場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。
新しいサービスを構成する場合は、最初のサービス設定のページに入力してから、[Container, Networking, Security] をクリックしてサービス構成ページを開きます。
[接続] タブをクリックします。
[VPC ネットワーク] フィールドで、使用するコネクタを選択するか、[なし] を選択してサービスを VPC ネットワークから切断します。
[作成] または [保存] をクリックします。
gcloud
デプロイ中にコネクタを指定するには、--vpc-connector
フラグを使用します。
gcloud run deploy SERVICE --image IMAGE_URL --vpc-connector CONNECTOR_NAME
次のように置き換えます。
SERVICE
: 実際のサービスの名前。- IMAGE_URL: コンテナ イメージへの参照(
us-docker.pkg.dev/cloudrun/container/hello:latest
など)。 CONNECTOR_NAME
: コネクタの名前。
既存のサービスのコネクタを接続、更新、削除するには、必要に応じて次のいずれかのフラグを指定して gcloud run services update
コマンドを使用します。
たとえば、コネクタを接続または更新するには、次のコマンドを使用します。
gcloud run services update SERVICE --vpc-connector CONNECTOR_NAME
次のように置き換えます。
SERVICE
: 実際のサービスの名前。CONNECTOR_NAME
: コネクタの名前。
YAML
既存のサービス構成をダウンロードして表示するには、gcloud run services describe --format export
コマンドを使用します。読みやすく整えられた結果が YAML 形式で出力されます。次に、下記の手順に沿ってフィールドを変更し、gcloud run services replace
コマンドを使用して変更後の YAML ファイルをアップロードします。必ず説明されているとおりにフィールドを変更してください。
次のコマンドで、構成を表示してダウンロードします。
gcloud run services describe SERVICE --format export > service.yaml
最上位の
spec
属性の下のannotations
属性にあるrun.googleapis.com/vpc-access-connector
属性を追加または更新します。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/vpc-access-connector: CONNECTOR_NAME name: REVISION
次のように置き換えます。
- SERVICE は、Cloud Run サービスの名前に置き換えます。
- CONNECTOR_NAME は、コネクタの名前に置き換えます。
- REVISION は、新しいリビジョン名に置き換えるか、削除(存在する場合)します。新しいリビジョン名を指定する場合は、次の条件を満たす必要があります。
SERVICE-
で始まる- 小文字、数字、
-
のみが使用されている - 末尾が
-
ではない - 63 文字以内である
次のコマンドを使用して、サービスを新しい構成に置き換えます。
gcloud run services replace service.yaml
Terraform
Terraform リソースを使用してサービスを作成し、コネクタを使用するように構成できます。
コネクタを使用するジョブを構成する
サーバーレス VPC アクセス コネクタを作成したら、そのコネクタを使用するように Cloud Run ジョブを構成する必要があります。これは、新しいジョブを作成するときに、Google Cloud コンソール、Google Cloud CLI、または YAML を使用して行うことができます。
コンソール
新しいジョブを構成する場合は、[ジョブ] タブをクリックし、必要に応じて初期ジョブ設定ページを入力します。既存のジョブを構成する場合は、ジョブをクリックして [編集] をクリックします。
[コンテナ、変数とシークレット、接続、セキュリティ] をクリックして、ジョブのプロパティ ページを開きます。
[接続] タブをクリックします。
[VPC ネットワーク] フィールドで、使用するコネクタを選択するか、[なし] を選択してジョブを VPC ネットワークから切断します。
[作成] または [更新] をクリックします。
gcloud
ジョブのデプロイ時にコネクタを指定するには、--vpc-connector
フラグを使用します。
gcloud run jobs create JOB --image IMAGE_URL --vpc-connector CONNECTOR_NAME
次のように置き換えます。
JOB
: ジョブの名前。- IMAGE_URL: コンテナ イメージへの参照(
us-docker.pkg.dev/cloudrun/container/hello:latest
など)。 CONNECTOR_NAME
: コネクタの名前。
既存のサービスのコネクタを接続、更新、削除するには、必要に応じて次のいずれかのフラグを指定して gcloud run jobs update
コマンドを使用します。
たとえば、コネクタを接続または更新するには、次のコマンドを使用します。
gcloud run jobs update JOB --vpc-connector CONNECTOR_NAME
次のように置き換えます。
JOB
: ジョブの名前。CONNECTOR_NAME
: コネクタの名前。
YAML
既存のジョブ構成をダウンロードして表示するには、gcloud run jobs describe --format export
コマンドを使用します。読みやすく整えられた結果が YAML 形式で出力されます。次に、下記の手順に沿ってフィールドを変更し、gcloud run jobs replace
コマンドを使用して変更後の YAML ファイルをアップロードします。必ず説明されているとおりにフィールドを変更してください。
次のコマンドで、構成を表示してダウンロードします。
gcloud run jobs describe JOB --format export > job.yaml
最上位の
spec
属性の下のannotations
属性にあるrun.googleapis.com/vpc-access-connector
属性を追加または更新します。apiVersion: serving.knative.dev/v1 kind: Job metadata: name: JOB spec: template: metadata: annotations: run.googleapis.com/vpc-access-connector: CONNECTOR_NAME
次のように置き換えます。
- JOB: Cloud Run ジョブの名前。
- CONNECTOR_NAME は、コネクタの名前に置き換えます。
run.googleapis.com/vpc-access-connector
属性は、下り(外向き)設定を指定するときに必要です。
次のコマンドを使用して、ジョブを新しい構成に置き換えます。
gcloud run jobs replace job.yaml
VPC リソースへのアクセスを制限する
VPC ファイアウォール ルールまたはファイアウォール ポリシーのルールを使用して、コネクタによる VPC ネットワークへのアクセスを制限できます。
サービス プロジェクトでコネクタを使用して共有 VPC ネットワークに接続する場合、ファイアウォール ルールは自動的に作成されません。ホスト プロジェクトのネットワーク管理者ロールを持つユーザーが、ホスト プロジェクトの構成時にファイアウォール ルールを設定します。
サーバーレス インフラストラクチャからコネクタへの上り(内向き)を許可する
コネクタ VM では、NAT 範囲 107.178.230.64/26
と 35.199.224.0/19
からの上り(内向き)を許可する必要があります。これらの範囲は、Cloud Run、Cloud Functions、App Engine のサービスがコネクタにパケットを送信できるように、基盤となる Google サーバーレス インフラストラクチャによって使用されます。
これらの範囲からの上り(内向き)を許可するには、次のコマンドを実行します。
gcloud compute firewall-rules create RULE_NAME \ --action=ALLOW \ --rules=TCP \ --source-ranges=107.178.230.64/26,35.199.224.0/19 \ --target-tags=VPC_CONNECTOR_NETWORK_TAG \ --direction=INGRESS \ --network=VPC_NETWORK \ --priority=PRIORITY
以下を置き換えます。
- RULE_NAME: 新しいファイアウォール ルールの名前。例:
allow-nat-ingress
。 - VPC_CONNECTOR_NETWORK_TAG: すべてのコネクタ(今後作成されるコネクタを含む)のアクセス権を制限する場合はユニバーサル コネクタ ネットワーク タグ。または、特定のコネクタのアクセス権を制限する場合は一意のネットワーク タグ。
- VPC_NETWORK: VPC ネットワークの名前
- PRIORITY: 0 ~ 65535 の整数。たとえば、最も高い優先度が 0 に設定されます。
スタンドアロン VPC ネットワーク、またはコネクタがホスト プロジェクトにある共有 VPC ネットワークに接続すると、サーバーレス VPC アクセスは、前のコマンドに示した設定を使用して上り(内向き)許可ファイアウォール ルールを作成します。このルールの優先度は 1,000 です。ファイアウォール ルールは Google Cloud コンソールに表示はされませんが、関連するコネクタが存在する限り存在します。コネクタが VPC ネットワーク内のすべての宛先に到達できないようにするには、コネクタのアクセスを制限します。
宛先リソースに上り(内向き)ルールを作成するか、VPC コネクタで下り(外向き)ルールを作成することで、コネクタのアクセスを制限できます。
上り(内向き)ルールを使用してアクセスを制限する
ネットワーク タグまたは CIDR 範囲を選択して、VPC ネットワークへの受信トラフィックを制御します。
ネットワーク タグ
次の手順は、コネクタのネットワーク タグに基づいて、VPC ネットワークへのアクセスを制限する上り(内向き)ルールを作成する方法を示しています。
ファイアウォール ルールを挿入するために必要な権限を付与されていることを確認してください。次のいずれかの Identity and Access Management(IAM)ロールを付与されている必要があります。
- Compute セキュリティ管理者のロール
compute.firewalls.create
権限が有効にされているカスタム IAM ロール
VPC ネットワーク間のコネクタのトラフィックを拒否します。
コネクタのネットワーク タグからの上り(内向き)を拒否するには、VPC ネットワークで優先度 1000 未満の上り(内向き)ファイアウォール ルールを作成します。これによって、デフォルトでサーバーレス VPC アクセスが VPC ネットワークに作成する暗黙的なファイアウォール ルールがオーバーライドされます。
gcloud compute firewall-rules create RULE_NAME \ --action=DENY \ --rules=PROTOCOL \ --source-tags=VPC_CONNECTOR_NETWORK_TAG \ --direction=INGRESS \ --network=VPC_NETWORK \ --priority=PRIORITY
次のように置き換えます。
RULE_NAME: 新しいファイアウォール ルールの名前。例:
deny-vpc-connector
PROTOCOL: VPC コネクタから許可する 1 つ以上のプロトコル。サポートされているプロトコルは
tcp
またはudp
です。たとえば、tcp:80,udp
は、ポート 80 経由の TCP トラフィックと UDP トラフィックを許可します。詳細については、allow
フラグのドキュメントをご覧ください。セキュリティと検証のために、次のサポートされていないプロトコルのトラフィックをブロックする拒否ルールを構成することもできます。
ah
、all
、esp
、icmp
、ipip
、sctp
。VPC_CONNECTOR_NETWORK_TAG: すべてのコネクタ(今後作成されるコネクタを含む)のアクセス権を制限する場合はユニバーサル コネクタ ネットワーク タグ。または、特定のコネクタのアクセス権を制限する場合は一意のネットワーク タグ。
- ユニバーサル ネットワーク タグ:
vpc-connector
一意のネットワーク タグ:
vpc-connector-REGION-CONNECTOR_NAME
次のように置き換えます。
- REGION: 制限するコネクタのリージョン
- CONNECTOR_NAME: 制限するコネクタの名前
コネクタ ネットワーク タグの詳細については、ネットワーク タグをご覧ください。
- ユニバーサル ネットワーク タグ:
VPC_NETWORK: VPC ネットワークの名前
PRIORITY: 0 ~ 65535 の整数。たとえば、最も高い優先度が 0 に設定されます。
コネクタ トラフィックを受信する必要があるリソースに対するコネクタのトラフィックを許可します。
allow
フラグとtarget-tags
フラグを使用して、VPC コネクタでアクセスする VPC ネットワーク内のリソースに対して上り(内向き)ファイアウォール ルールを作成します。このルールの優先度は、前の手順で作成したルールの優先度よりも低い値に設定します。gcloud compute firewall-rules create RULE_NAME \ --allow=PROTOCOL \ --source-tags=VPC_CONNECTOR_NETWORK_TAG \ --direction=INGRESS \ --network=VPC_NETWORK \ --target-tags=RESOURCE_TAG \ --priority=PRIORITY
次のように置き換えます。
RULE_NAME: 新しいファイアウォール ルールの名前。例:
allow-vpc-connector-for-select-resources
PROTOCOL: VPC コネクタから許可する 1 つ以上のプロトコル。サポートされているプロトコルは
tcp
またはudp
です。たとえば、tcp:80,udp
は、ポート 80 経由の TCP トラフィックと UDP トラフィックを許可します。詳細については、allow
フラグのドキュメントをご覧ください。VPC_CONNECTOR_NETWORK_TAG: すべてのコネクタ(今後作成されるコネクタを含む)のアクセス権を制限する場合はユニバーサル コネクタ ネットワーク タグ。または、特定のコネクタのアクセス権を制限する場合は一意のネットワーク タグ。これは、前のステップで指定したネットワーク タグと一致する必要があります。
- ユニバーサル ネットワーク タグ:
vpc-connector
一意のネットワーク タグ:
vpc-connector-REGION-CONNECTOR_NAME
次のように置き換えます。
- REGION: 制限するコネクタのリージョン
- CONNECTOR_NAME: 制限するコネクタの名前
コネクタ ネットワーク タグの詳細については、ネットワーク タグをご覧ください。
- ユニバーサル ネットワーク タグ:
VPC_NETWORK: VPC ネットワークの名前
RESOURCE_TAG: VPC コネクタがアクセスする VPC リソースのネットワーク タグ。
PRIORITY: 前のステップで設定した優先度よりも小さい整数。たとえば、前のステップで作成したルールの優先度を 990 に設定した場合は、980 を試してください。
ファイアウォール ルールの作成に必須のフラグとオプション フラグの詳細については、gcloud compute firewall-rules create
のドキュメントをご覧ください。
CIDR 範囲
次の手順は、コネクタの CIDR 範囲に基づいて、VPC ネットワークへのアクセスを制限する上り(内向き)ルールを作成する方法を示しています。
ファイアウォール ルールを挿入するために必要な権限を付与されていることを確認してください。次のいずれかの Identity and Access Management(IAM)ロールを付与されている必要があります。
- Compute セキュリティ管理者のロール
compute.firewalls.create
権限が有効にされているカスタム IAM ロール
VPC ネットワーク間のコネクタのトラフィックを拒否します。
コネクタの CIDR 範囲からの上り(内向き)を拒否するには、VPC ネットワークで優先度 1000 未満の上り(内向き)ファイアウォール ルールを作成します。これによって、デフォルトでサーバーレス VPC アクセスが VPC ネットワークに作成する暗黙的なファイアウォール ルールがオーバーライドされます。
gcloud compute firewall-rules create RULE_NAME \ --action=DENY \ --rules=PROTOCOL \ --source-ranges=VPC_CONNECTOR_CIDR_RANGE \ --direction=INGRESS \ --network=VPC_NETWORK \ --priority=PRIORITY
次のように置き換えます。
RULE_NAME: 新しいファイアウォール ルールの名前。例:
deny-vpc-connector
PROTOCOL: VPC コネクタから許可する 1 つ以上のプロトコル。サポートされているプロトコルは
tcp
またはudp
です。たとえば、tcp:80,udp
は、ポート 80 経由の TCP トラフィックと UDP トラフィックを許可します。詳細については、allow
フラグのドキュメントをご覧ください。セキュリティと検証のために、次のサポートされていないプロトコルのトラフィックをブロックする拒否ルールを構成することもできます。
ah
、all
、esp
、icmp
、ipip
、sctp
。VPC_CONNECTOR_CIDR_RANGE: アクセスを制限するコネクタの CIDR 範囲
VPC_NETWORK: VPC ネットワークの名前
PRIORITY: 0 ~ 65535 の整数。たとえば、最も高い優先度が 0 に設定されます。
コネクタ トラフィックを受信する必要があるリソースに対するコネクタのトラフィックを許可します。
allow
フラグとtarget-tags
フラグを使用して、VPC コネクタでアクセスする VPC ネットワーク内のリソースに対して上り(内向き)ファイアウォール ルールを作成します。このルールの優先度は、前の手順で作成したルールの優先度よりも低い値に設定します。gcloud compute firewall-rules create RULE_NAME \ --allow=PROTOCOL \ --source-ranges=VPC_CONNECTOR_CIDR_RANGE \ --direction=INGRESS \ --network=VPC_NETWORK \ --target-tags=RESOURCE_TAG \ --priority=PRIORITY
次のように置き換えます。
RULE_NAME: 新しいファイアウォール ルールの名前。例:
allow-vpc-connector-for-select-resources
PROTOCOL: VPC コネクタから許可する 1 つ以上のプロトコル。サポートされているプロトコルは
tcp
またはudp
です。たとえば、tcp:80,udp
は、ポート 80 経由の TCP トラフィックと UDP トラフィックを許可します。詳細については、allow
フラグのドキュメントをご覧ください。VPC_CONNECTOR_CIDR_RANGE: アクセスを制限するコネクタの CIDR 範囲
VPC_NETWORK: VPC ネットワークの名前
RESOURCE_TAG: VPC コネクタがアクセスする VPC リソースのネットワーク タグ。
PRIORITY: 前のステップで設定した優先度よりも小さい整数。たとえば、前のステップで作成したルールの優先度を 990 に設定した場合は、980 を試してください。
ファイアウォール ルールの作成に必要なフラグとオプション フラグの詳細については、gcloud compute firewall-rules create
のドキュメントをご覧ください。
下り(外向き)ルールを使用してアクセスを制限する
次の手順は、コネクタのアクセスを制限する下り(外向き)ルールを作成する方法を示しています。
ファイアウォール ルールを挿入するために必要な権限を付与されていることを確認してください。次のいずれかの Identity and Access Management(IAM)ロールを付与されている必要があります。
- Compute セキュリティ管理者のロール
compute.firewalls.create
権限が有効にされているカスタム IAM ロール
コネクタからの下り(外向き)トラフィックを拒否します。
サーバーレス VPC アクセス コネクタに下り(外向き)ファイアウォール ルールを作成し、確立済みのレスポンスを除き、発信先に送信トラフィックを送ることができないようにします。
gcloud compute firewall-rules create RULE_NAME \ --action=DENY \ --rules=PROTOCOL \ --direction=EGRESS \ --target-tags=VPC_CONNECTOR_NETWORK_TAG \ --network=VPC_NETWORK \ --priority=PRIORITY
以下を置き換えます。
RULE_NAME: 新しいファイアウォール ルールの名前。例:
deny-vpc-connector
PROTOCOL: VPC コネクタから許可する 1 つ以上のプロトコル。サポートされているプロトコルは
tcp
またはudp
です。たとえば、tcp:80,udp
は、ポート 80 経由の TCP トラフィックと UDP トラフィックを許可します。詳細については、allow
フラグのドキュメントをご覧ください。セキュリティと検証のために、次のサポートされていないプロトコルのトラフィックをブロックする拒否ルールを構成することもできます。
ah
、all
、esp
、icmp
、ipip
、sctp
。VPC_CONNECTOR_NETWORK_TAG: 既存のすべての VPC コネクタと今後作成される VPC コネクタにルールを適用する場合は、ユニバーサル VPC コネクタのネットワーク タグを使用します。または、特定のコネクタを制御する場合は、一意の VPC コネクタのネットワーク タグを使用します。
VPC_NETWORK: VPC ネットワークの名前
PRIORITY: 0 ~ 65535 の整数。たとえば、最も高い優先度が 0 に設定されます。
コネクタがアクセスするように設定した CIDR 範囲内に宛先が存在する場合に、下り(外向き)トラフィックを許可します。
allow
フラグとdestination-ranges
フラグを使用して、特定の宛先範囲でコネクタからの下り(外向き)トラフィックを許可するファイアウォール ルールを作成します。宛先範囲には、コネクタにアクセスを許可する VPC ネットワーク内のリソースの CIDR 範囲を設定します。このルールの優先度は、前の手順で作成したルールの優先度よりも低い値に設定します。gcloud compute firewall-rules create RULE_NAME \ --allow=PROTOCOL \ --destination-ranges=RESOURCE_CIDR_RANGE \ --direction=EGRESS \ --network=VPC_NETWORK \ --target-tags=VPC_CONNECTOR_NETWORK_TAG \ --priority=PRIORITY
次のように置き換えます。
RULE_NAME: 新しいファイアウォール ルールの名前。例:
allow-vpc-connector-for-select-resources
PROTOCOL: VPC コネクタから許可する 1 つ以上のプロトコル。サポートされているプロトコルは
tcp
またはudp
です。たとえば、tcp:80,udp
は、ポート 80 経由の TCP トラフィックと UDP トラフィックを許可します。詳細については、allow
フラグのドキュメントをご覧ください。RESOURCE_CIDR_RANGE: アクセスを制限するコネクタの CIDR 範囲
VPC_NETWORK: VPC ネットワークの名前
VPC_CONNECTOR_NETWORK_TAG: 既存のすべての VPC コネクタと今後作成される VPC コネクタにルールを適用する場合は、ユニバーサル VPC コネクタのネットワーク タグを使用します。または、特定のコネクタを制御する場合は、一意の VPC コネクタのネットワーク タグを使用します。前のステップで一意のネットワーク タグを使用した場合は、一意のネットワーク タグを使用します。
PRIORITY: 前のステップで設定した優先度よりも小さい整数。たとえば、前のステップで作成したルールの優先度を 990 に設定した場合は、980 を試してください。
ファイアウォール ルールの作成に必須のフラグとオプション フラグの詳細については、gcloud compute firewall-rules create
のドキュメントをご覧ください。
コネクタを管理する
デフォルトでは、特定の内部 IPv4 アドレスの宛先(DNS レスポンスによって解決される内部 IPv4 の宛先を含む)へのリクエストのみが、サーバーレス VPC アクセス コネクタ経由でルーティングされます。ただし、サービスからのすべてのアウトバウンド リクエストを VPC ネットワークにルーティングしたいこともあります。
サーバーレス VPC アクセスは、IPv4 トラフィックのルーティングのみをサポートします。VPC ネットワークに IPv6 ルートがある場合でも、IPv6 トラフィックはサポートされません。
サービスまたはジョブからのアウトバウンド リクエストのルーティングを制御するために、VPC 下り(外向き)を次のいずれかのオプションに設定できます。
プライベート IP へのリクエストだけを VPC コネクタ経由でルーティングする: デフォルト。トラフィックを伝送するパケットの宛先が次の場合にのみ、VPC ネットワーク経由でトラフィックがルーティングされます。
他の宛先へのパケットは、Cloud Run からインターネットにルーティングされます(VPC ネットワーク経由ではありません)。
すべてのトラフィックを VPC コネクタ経由でルーティングする: パケットの宛先に関係なく、トラフィックはコネクタに関連する VPC ネットワーク経由でルーティングされます。このオプションは、次のような状況で使用する必要があります。
- プライベートで使用されるパブリック IP アドレス範囲を使用して VPC サブネット範囲にトラフィックを送信する必要がある場合。VPC サブネット範囲の詳細については、サブネットの概要の有効な IPv4 範囲をご覧ください。
- アドレスがプライベートで使用されるパブリック IP アドレスである Google API の Private Service Connect エンドポイントにトラフィックを送信する必要がある場合。Google API の Private Service Connect エンドポイントの詳細については、エンドポイント経由で Google API にアクセスするをご覧ください。
- コネクタの VPC ネットワーク内でルーティング可能で、プライベートで使用される他のパブリック IP アドレスにトラフィックを送信する必要がある場合。プライベートで利用されるパブリック IP アドレスを対象とする宛先としては、ピアリング サブネット範囲(およびサービスに割り振られた IP アドレス範囲から作成されたピアリング サブネット範囲)、VPC ショートのカスタムルートを使用してアクセスできる宛先などが含まれます。
VPC ネットワークにデフォルト ルートが含まれている場合でも、NAT サービスを提供するように Cloud NAT ゲートウェイを構成すると、コネクタによって処理された後にパケットをインターネットにルーティングできます。これらのパケットは、VPC ネットワーク内のルートと、VPC ネットワークに適用されるファイアウォール ルールの対象になります。ルートとファイアウォールの構成を使用すると、サーバーレス VPC アクセス コネクタ経由で関数から送信されるすべてのアウトバウンド リクエストのインターネット下り(外向き)を制御できます。
サービスからの下り(外向き)トラフィックを制御する
新しいサービスを作成するか、新しいリビジョンをデプロイするときに、Google Cloud コンソール、Google Cloud CLI、または YAML ファイルを使用して、VPC の下り(外向き)設定を指定できます。
コンソール
デプロイ先の新しいサービスを構成する場合は、[サービスの作成] をクリックします。既存のサービスを構成する場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。
新しいサービスを構成する場合は、最初のサービス設定のページに入力してから、[Container, Networking, Security] をクリックしてサービス構成ページを開きます。
[接続] タブをクリックします。
VPC コネクタを選択したら、[プライベート IP へのリクエストだけを VPC コネクタ経由でルーティングする] または [すべてのトラフィックを VPC コネクタ経由でルーティングする] を選択します。
[作成] または [保存] をクリックします。
gcloud
下り(外向き)設定を指定するには、--vpc-egress
フラグを使用します。デプロイ中に下り(外向き)設定を指定できます。
gcloud run deploy SERVICE \ --image IMAGE_URL \ --vpc-connector CONNECTOR_NAME \ --vpc-egress EGRESS_SETTING
次のように置き換えます。
SERVICE
: 実際のサービスの名前。- IMAGE_URL: コンテナ イメージへの参照(
us-docker.pkg.dev/cloudrun/container/hello:latest
など)。 CONNECTOR_NAME
: コネクタの名前。EGRESS_SETTING
: 下り(外向き)設定値。all-traffic
: コネクタ経由ですべてのアウトバンド トラフィックを送信します。private-ranges-only
: VPC コネクタ経由で内部アドレスにのみトラフィックを送信します。
既存のサービスを更新し、下り(外向き)設定を変更することもできます。
gcloud run services update SERVICE --vpc-egress EGRESS_SETTING
次のように置き換えます。
SERVICE
: 実際のサービスの名前。EGRESS_SETTING
: 前述の下り(外向き)設定値。
YAML
既存のサービス構成をダウンロードして表示するには、gcloud run services describe --format export
コマンドを使用します。読みやすく整えられた結果が YAML 形式で出力されます。次に、下記の手順に沿ってフィールドを変更し、gcloud run services replace
コマンドを使用して変更後の YAML ファイルをアップロードします。必ず説明されているとおりにフィールドを変更してください。
次のコマンドで、構成を表示してダウンロードします。
gcloud run services describe SERVICE --format export > service.yaml
最上位の
spec
属性の下のannotations
属性にあるrun.googleapis.com/vpc-access-egress
属性を追加または更新します。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/vpc-access-connector: CONNECTOR_NAME run.googleapis.com/vpc-access-egress: EGRESS_SETTING name: REVISION
次のように置き換えます。
- SERVICE は、Cloud Run サービスの名前に置き換えます。
- CONNECTOR_NAME は、コネクタの名前に置き換えます。
run.googleapis.com/vpc-access-connector
属性は、下り(外向き)設定を指定するときに必要です。 - EGRESS_SETTING は、次のいずれかに置き換えます。
all-traffic
: コネクタ経由ですべてのアウトバンド トラフィックを送信します。private-ranges-only
: VPC コネクタ経由で内部アドレスにのみトラフィックを送信します。- REVISION は、新しいリビジョン名に置き換えるか、削除(存在する場合)します。新しいリビジョン名を指定する場合は、次の条件を満たす必要があります。
SERVICE-
で始まる- 小文字、数字、
-
のみが使用されている - 末尾が
-
ではない - 63 文字以内である
次のコマンドを使用して、サービスを新しい構成に置き換えます。
gcloud run services replace service.yaml
ジョブからの下り(外向き)トラフィックを制御する
VPC 下り(外向き)設定を指定するには、ジョブを作成または更新する際に、Google Cloud コンソール、Google Cloud CLI、または YAML ファイルを使用します。
コンソール
新しいジョブを構成する場合は、[ジョブ] タブをクリックし、必要に応じて初期ジョブ設定ページを入力します。既存のジョブを構成する場合は、ジョブをクリックして [編集] をクリックします。
[コンテナ、変数とシークレット、接続、セキュリティ] をクリックして、ジョブのプロパティ ページを開きます。
[接続] タブをクリックします。
VPC コネクタを選択したら、[プライベート IP へのリクエストだけを VPC コネクタ経由でルーティングする] または [すべてのトラフィックを VPC コネクタ経由でルーティングする] を選択します。
[作成] または [更新] をクリックします。
gcloud
下り(外向き)設定を指定するには、--vpc-egress
フラグを使用します。ジョブのデプロイ プロセス中に下り(外向き)設定を指定できます。
gcloud run jobs create JOB \ --image IMAGE_URL \ --vpc-connector CONNECTOR_NAME \ --vpc-egress EGRESS_SETTING
次のように置き換えます。
JOB
: ジョブの名前。- IMAGE_URL: コンテナ イメージへの参照(
us-docker.pkg.dev/cloudrun/container/hello:latest
など)。 CONNECTOR_NAME
: コネクタの名前。EGRESS_SETTING
: 下り(外向き)設定値。all-traffic
: コネクタ経由ですべてのアウトバンド トラフィックを送信します。private-ranges-only
: VPC コネクタ経由で内部アドレスにのみトラフィックを送信します。
既存のジョブを更新し、下り(外向き)設定を変更することもできます。
gcloud run jobs update JOB --vpc-egress EGRESS_SETTING
次のように置き換えます。
JOB
: ジョブの名前。EGRESS_SETTING
: 前述の下り(外向き)設定値。
YAML
既存のジョブ構成をダウンロードして表示するには、gcloud run jobs describe --format export
コマンドを使用します。読みやすく整えられた結果が YAML 形式で出力されます。次に、下記の手順に沿ってフィールドを変更し、gcloud run jobs replace
コマンドを使用して変更後の YAML ファイルをアップロードします。必ず説明されているとおりにフィールドを変更してください。
次のコマンドを使用して、ジョブを新しい構成に置き換えます。
gcloud run jobs replace job.yaml
最上位の
spec
属性の下のannotations
属性にあるrun.googleapis.com/vpc-access-egress
属性を追加または更新します。apiVersion: serving.knative.dev/v1 kind: Job metadata: name: JOB spec: template: metadata: annotations: run.googleapis.com/vpc-access-connector: CONNECTOR_NAME run.googleapis.com/vpc-access-egress: EGRESS_SETTING
次のように置き換えます。
- JOB: Cloud Run ジョブの名前。
- CONNECTOR_NAME は、コネクタの名前に置き換えます。
run.googleapis.com/vpc-access-connector
属性は、下り(外向き)設定を指定するときに必要です。 - EGRESS_SETTING は、次のいずれかに置き換えます。
all-traffic
: コネクタ経由ですべてのアウトバンド トラフィックを送信します。private-ranges-only
: VPC コネクタ経由で内部アドレスにのみトラフィックを送信します。
次のコマンドを使用して、ジョブを新しい構成に置き換えます。
gcloud run jobs replace job.yaml
サーバーレス VPC アクセス コネクタの設定を表示する
サービスまたはジョブの現在のサーバーレス VPC アクセス コネクタの設定を表示するには、Google Cloud コンソールまたは gcloud
コマンドライン ツールを使用します。
コンソール
目的のサービスまたはジョブをクリックして、詳細ページを開きます。
サービスの場合は、[リビジョン] タブをクリックします。
ジョブの場合は、[構成] タブをクリックします。
[接続] タブに、サーバーレス VPC アクセス コネクタの設定が表示されます。
gcloud
サービスの設定を表示するには、次のコマンドを使用します。
gcloud run services describe SERVICE
ジョブの設定を表示するには、次のコマンドを使用します。
gcloud run jobs describe JOB
返された構成で、サーバーレス VPC アクセス コネクタの設定を探します。
VPC ネットワークからサービスを切断する
Google Cloud コンソールまたは Google Cloud CLI を使用して、VPC ネットワークからサービスを切断できます。
コンソール
デプロイ先の新しいサービスを構成する場合は、[サービスの作成] をクリックします。既存のサービスを構成する場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。
新しいサービスを構成する場合は、最初のサービス設定のページに入力してから、[Container, Networking, Security] をクリックしてサービス構成ページを開きます。
[接続] タブをクリックします。
[VPC ネットワーク] フィールドで [なし] を選択して、VPC ネットワークからサービスを接続解除します。
[作成] または [保存] をクリックします。
gcloud
サービスを接続解除するには、次のフラグを指定して gcloud run services update
コマンドを実行します。
gcloud run services update SERVICE --clear-vpc-connector
- SERVICE は、実際のサービス名に置き換えます。
トラフィックがなく、接続解除されている場合でも、コネクタの料金は引き続き発生します。詳細については、料金をご覧ください。不要になったコネクタは削除して、請求が発生しないようにしてください。
VPC ネットワークからジョブを切断する
Google Cloud コンソールまたは Google Cloud CLI を使用して、VPC ネットワークからジョブを切断できます。
コンソール
新しいジョブを構成する場合は、[ジョブ] タブをクリックし、必要に応じて初期ジョブ設定ページを入力します。既存のジョブを構成する場合は、ジョブをクリックして [編集] をクリックします。
[コンテナ、変数とシークレット、接続、セキュリティ] をクリックして、ジョブのプロパティ ページを開きます。
[接続] タブをクリックします。
[VPC ネットワーク] フィールドで [なし] を選択して、VPC ネットワークからサービスを接続解除します。
[作成] または [更新] をクリックします。
gcloud
ジョブを接続解除するには、次のフラグを指定して gcloud run jobs update
コマンドを実行します。
gcloud run jobs update JOB --clear-vpc-connector
JOB は、使用するジョブの名前に置き換えます。
トラフィックがなく、接続解除されている場合でも、コネクタの料金は引き続き発生します。詳細については、料金をご覧ください。不要になったコネクタは削除して、請求が発生しないようにしてください。
コネクタを更新する
Google Cloud コンソール、Google Cloud CLI、または API を使用して、コネクタの次の属性を更新できます。
- マシン(インスタンス)タイプ
- インスタンスの最小数と最大数
マシンタイプを更新する
コンソール
サーバーレス VPC アクセスの概要ページに移動します。
編集するコネクタを選択して、[編集] をクリックします。
コネクタの詳細ページに、コネクタのスループット、インスタンス数、CPU 使用率の指標のグラフが表示されます。
[インスタンス タイプ] リストで、目的のマシン(インスタンス)タイプを選択します。使用可能なマシンタイプについては、スループットとスケーリングのドキュメントをご覧ください。
gcloud
-
Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。
Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
コネクタのマシンタイプを更新するには、ターミナルで次のコマンドを実行します。
gcloud beta compute networks vpc-access connectors update CONNECTOR_NAME --region=REGION --machine-type=MACHINE_TYPE
次のように置き換えます。CONNECTOR_NAME
: コネクタの名前。REGION
: コネクタのリージョンの名前。MACHINE_TYPE
: 目的のマシンタイプ。使用可能なマシンタイプについては、スループットとスケーリングのドキュメントをご覧ください。
インスタンスの最小数と最大数を減らす
インスタンスの最小数と最大数を減らすには、次の操作を行います。
- 目的の値で新しいコネクタを作成します。
- 新しいコネクタを使用するようにサービスまたは関数を更新します。
- トラフィックを移行したら、古いコネクタを削除します。
詳細については、サーバーレス VPC アクセス コネクタを作成するをご覧ください。
インスタンスの最小数と最大数を増やす
コンソール
サーバーレス VPC アクセスの概要ページに移動します。
編集するコネクタを選択して、[編集] をクリックします。
[最小インスタンス数] フィールドに、目的のインスタンスの最小数を選択します。
このフィールドに設定可能な最小値は現在の値です。このフィールドに設定可能な最大値は、[最大インスタンス数] フィールドの現在の値から 1 を引いた値になります。たとえば、[最大インスタンス数] フィールドの値が 8 の場合、[最小インスタンス数] フィールドに設定可能な最大値は 7 になります。
[最大インスタンス数] フィールドでインスタンスの最大数を選択します。
このフィールドに設定可能な最小値は現在の値です。このフィールドに設定可能な最大値は 10 です。
gcloud
-
Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。
Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
コネクタのインスタンスの最小数または最大数を増やすには、ターミナルで次のコマンドを実行します。
gcloud beta compute networks vpc-access connectors update CONNECTOR_NAME --region=REGION --min-instances=MIN_INSTANCES --max-instances=MAX_INSTANCES
次のように置き換えます。
CONNECTOR_NAME
: コネクタの名前。REGION
: コネクタのリージョンの名前。MIN_INSTANCES
: 目的の最小インスタンス数。- このフィールドに設定可能な最小値は
min_instances
の現在の値です。現在の値を確認するには、現在の属性値を確認するをご覧ください。 - このフィールドに設定可能な最大値は、現在の
max_instances
の値から 1 を引いた値になります。これは、min_instances
をmax_instances
より小さくする必要があるためです。たとえば、max_instances
が 8 の場合、このフィールドに設定可能な最大値は 7 です。コネクタがデフォルトのmax-instances
値(10)を使用する場合、このフィールドに設定可能な最大値は 9 になります。max-instances
の値を確認するには、現在の属性値を確認するをご覧ください。
- このフィールドに設定可能な最小値は
MAX_INSTANCES
:- このフィールドに設定可能な最小値は
max_instances
の現在の値です。現在の値を確認するには、現在の属性値を確認するをご覧ください。 - このフィールドに設定可能な最大値は 10 です。
インスタンスの最大数を増やさずに最小数だけを増やす場合でも、インスタンスの最大数を指定する必要があります。逆に、インスタンスの最小数を更新せずに最大数を更新する場合でも、インスタンスの最小数を指定する必要があります。インスタンスの最小数または最大数を現在の値のままにするには、現在の値を指定します。現在の値を確認するには、現在の属性値を確認するをご覧ください。
- このフィールドに設定可能な最小値は
現在の属性値を確認する
コネクタの現在の属性値を確認するには、ターミナルで次のコマンドを実行します。
gcloud compute networks vpc-access connectors describe CONNECTOR_NAME --region=REGION --project=PROJECT
次のように置き換えます。CONNECTOR_NAME
: コネクタの名前。REGION
: コネクタのリージョンの名前。PROJECT
: Google Cloud プロジェクトの名前。
コネクタを削除する
コネクタを削除する前に、接続中のサービスまたはジョブがないことを確認してください。
共有 VPC ホスト プロジェクトでコネクタを設定した共有 VPC ユーザーの場合は、gcloud compute networks vpc-access connectors describe
コマンドを使用して、特定のコネクタを使用するサービスまたはジョブが存在するプロジェクトを一覧表示できます。
コネクタを削除するには、Google Cloud コンソールまたは Google Cloud CLI を使用します。
コンソール
Google Cloud コンソールで、サーバーレス VPC アクセスの概要ページに移動します。
削除するコネクタを選択します。
[削除] をクリックします。
gcloud
-
Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。
Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
コネクタを削除するには、次の
gcloud
コマンドを使用します。gcloud compute networks vpc-access connectors delete CONNECTOR_NAME --region=REGION
次のように置き換えます。
- CONNECTOR_NAME は、削除するコネクタの名前に置き換えます。
- REGION は、コネクタが配置されているリージョンに置き換えます。
サンプル ユースケース
下り(外向き)と上り(内向き)の設定を使用してアクセスを制限する
サービスに上り(内向き)と下り(外向き)の両方を設定することで、制限をさらに強化できます。
cloud-run-sample
リポジトリのクローンを作成して、vpc-sample
ディレクトリに移動します。git clone https://github.com/GoogleCloudPlatform/cloud-run-samples cd cloud-run-samples/vpc-sample
Python 依存関係をインストールします。
pip3 install -r requirements.txt
vpc-sample
ディレクトリでmain.py
ファイルを開き、デプロイする関数を確認します。関数をデプロイします。
gcloud functions deploy restricted-function
--runtime=python38
--trigger-http
--no-allow-unauthenticated
--ingress-settings=internal-only
--entry-point=hello_worldサーバーレス VPC アクセス コネクタを設定します。
gcloud compute networks vpc-access connectors create serverless-connector
--region=SERVICE_REGION
--range=10.8.0.0/28SERVICE_REGION
は、コネクタのリージョンに置き換えます。これは Cloud Run サービスのリージョンと一致している必要があります。サービスがus-central
またはeurope-west
リージョンにある場合は、us-central1
またはeurope-west1
を使用します。コンテナ イメージをビルドします。
gcloud builds submit --tag=gcr.io/PROJECT_ID/restricted-function-caller .
PROJECT_ID
をプロジェクト ID で置き換えます。これにより、デプロイ時に
main.py
ファイルからget_hello_world
を呼び出すコンテナ イメージがビルドされます。gcloud run deploy run-function
コマンドを使用して Cloud Run コンテナをデプロイします。gcloud run deploy run-function
--image gcr.io/PROJECT_ID
/restricted-function-caller
--no-allow-unauthenticated
--update-env-vars=URL=https://SERVICE_REGION
-PROJECT_ID
.cloudfunctions.net/restricted-function-caller
--vpc-egress=all
--vpc-connector=serverless-connector
--region=SERVICE_REGION
次のように置き換えます。
PROJECT_ID
: プロジェクト ID。SERVICE_REGION
: コネクタのリージョン。これは Cloud Run サービスのリージョンと一致している必要があります。サービスがus-central
またはeurope-west
リージョンにある場合は、us-central1
またはeurope-west1
を使用します。
これで、Cloud Run
run-function
サービスが、ネットワーク制限のある関数に VPC コネクタ経由でGET
リクエストを送信するように設定されました。Cloud Run
run-function
サービスがネットワーク制限のある関数をクエリできることを確認します。TOKEN=$(gcloud auth print-identity-token) curl -H "Authorization: Bearer $TOKEN"
CLOUD_RUN_URL
CLOUD_RUN_URL
は、Cloud Run へのデプロイ後に表示される URL に置き換えます。
トラブルシューティング
サービス アカウントの権限
Google Cloud プロジェクトでオペレーションを実行するために、サーバーレス VPC アクセスはサーバーレス VPC アクセス サービス エージェントのサービス アカウントを使用します。このサービス アカウントのメールアドレスは、次の形式になります。
service-PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com
このサービス アカウントには、デフォルトでサーバーレス VPC アクセス サービス エージェントのロール(roles/vpcaccess.serviceAgent
)が設定されています。このアカウントの権限を変更すると、サーバーレス VPC アクセスのオペレーションが失敗する可能性があります。
エラー
コネクタ作成エラー
コネクタの作成でエラーが発生した場合は、次の方法をお試しください。
- VPC ネットワーク内で予約されている既存の IP アドレスと重複しない RFC 1918 の内部 IP 範囲を指定します。
- プロジェクトから ID
serverless-vpc-access-images
で Compute Engine VM イメージを使用できるように、プロジェクトに権限を付与します。状況に応じて組織のポリシーを更新する方法については、イメージ アクセスの制約を設定するをご覧ください。
リソースにアクセスできない
コネクタを指定しても、VPC ネットワーク内のリソースにアクセスできない場合は、コネクタの IP アドレス範囲からの上り(内向き)を拒否する、優先度 1000 よりも小さいファイアウォール ルールが VPC ネットワーク上に存在しないことを確認してください。
接続拒否エラー
ネットワーク パフォーマンスが低下する connection refused
エラーが発生した場合、サーバーレス アプリケーションの呼び出し間で接続が制限なしで増加している可能性があります。インスタンスごとに使用される最大接続数を制限するには、接続プールをサポートするクライアント ライブラリを使用します。接続プールの使用方法を説明する詳しい例については、データベース接続を管理するをご覧ください。
リソースが見つからないエラー
VPC ネットワークまたはファイアウォール ルールを削除すると、次のようなメッセージが表示される場合があります。The resource
"aet-uscentral1-subnet--1-egrfw" was not found.
このエラーとその解決方法については、VPC ファイアウォール ルールのドキュメントのリソースが見つからないエラーをご覧ください。
次のステップ
- サーバーレス VPC アクセスの監査ロギングを使用して管理アクティビティをモニタリングする。
- VPC Service Controls を使用してサービス境界を作成して、リソースとデータを保護する。
- サーバーレス VPC アクセスに関連付けられている Identity and Access Management(IAM)のロールを使用する。各ロールに関連付けられている権限の一覧については、IAM のドキュメントのサーバーレス VPC アクセスのロールをご覧ください。
- Memorystore に接続する。