共有 VPC ホスト プロジェクトでコネクタを構成する
組織で共有 VPC を使用している場合は、サーバーレス VPC アクセス コネクタをサービス プロジェクトまたはホスト プロジェクトのいずれかで設定できます。このガイドでは、ホスト プロジェクトでコネクタを設定する方法について説明します。
サービス プロジェクトでコネクタを設定する必要がある場合は、サービス プロジェクトでコネクタを構成するをご覧ください。各方法の利点については、共有 VPC ネットワークへの接続をご覧ください。
始める前に
現在使用しているアカウントの Identity and Access Management(IAM)ロールを確認します。アクティブ アカウントには、ホスト プロジェクトで次のロールが必要です。
目的の環境でホスト プロジェクトを選択します。
コンソール
Google Cloud コンソール ダッシュボードを開きます。
ダッシュボードの上部にあるメニューバーで、プロジェクトのプルダウン メニューをクリックし、ホスト プロジェクトを選択します。
gcloud
ターミナルで次のコマンドを実行して、gcloud CLI のデフォルト プロジェクトをホスト プロジェクトに設定します。
gcloud config set project HOST_PROJECT_ID
次のように置き換えます。
HOST_PROJECT_ID
: 共有 VPC ホスト プロジェクトの ID。
サーバーレス VPC アクセス コネクタを作成する
VPC ネットワークにリクエストを送信して対応するレスポンスを受信するには、サーバーレス VPC アクセス コネクタを作成する必要があります。コネクタは、Google Cloud コンソール、Google Cloud CLI、または Terraform を使用して作成できます。
Console
プロジェクトでサーバーレス VPC アクセスの API を有効にします。
サーバーレス VPC アクセスの概要ページに移動します。
[コネクタを作成] をクリックします。
[名前] フィールドに、コネクタの名前を入力します。名前は Compute Engine の命名規則に従い、21 文字未満にする必要があります。ハイフン(
-
)は 2 文字としてカウントされます。[リージョン] フィールドで、コネクタのリージョンを選択します。これは、サーバーレス サービスのリージョンと一致する必要があります。
サービスが
us-central
またはeurope-west
リージョンにある場合は、us-central1
またはeurope-west1
を使用します。[ネットワーク] フィールドで、コネクタを接続する 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
は、使用するサブネットの名前に置き換えます。
(省略可)コネクタを詳細に制御するためのスケーリング オプションを設定するには、[スケーリング設定を表示] をクリックしてスケーリング フォームを表示します。
- コネクタのインスタンスの最小数と最大数を設定するか、デフォルト値(最小 2、最大 10)を使用します。コネクタは、トラフィックが増加すると、指定された最大値までスケールアウトしますが、トラフィックが減少してもスケールインしません。
2
~10
の値を使用し、MIN
はMAX
よりも小さい値にする必要があります。 - [インスタンスのタイプ] プルダウン メニューで、コネクタに使用するマシンタイプを選択するか、デフォルトの
e2-micro
を使用します。インスタンス タイプを選択すると、右側にコスト サイドバーが表示され、帯域幅とコストの見積もりが表示されます。
- コネクタのインスタンスの最小数と最大数を設定するか、デフォルト値(最小 2、最大 10)を使用します。コネクタは、トラフィックが増加すると、指定された最大値までスケールアウトしますが、トラフィックが減少してもスケールインしません。
[作成] をクリックします。
コネクタの使用準備が整うと、コネクタ名の横に緑色のチェックマークが表示されます。
gcloud
gcloud
コンポーネントを最新バージョンに更新します。gcloud components update
プロジェクトでサーバーレス VPC アクセス API を有効にします。
gcloud services enable vpcaccess.googleapis.com
サーバーレス VPC アクセス コネクタを作成します。
gcloud compute networks vpc-access connectors create CONNECTOR_NAME \ --region=REGION \ --subnet=SUBNET \ --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 の命名規則に従い、21 文字未満にする必要があります。ハイフン(-
)は 2 文字としてカウントされます。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
: ホスト プロジェクトの IDMIN
: コネクタに使用するインスタンスの最小数。2
~9
の整数を使用してください。デフォルトは2
です。コネクタのスケーリングの詳細については、スループットとスケーリングをご覧ください。MAX
: コネクタに使用するインスタンスの最大数。3
~10
の整数を使用してください。デフォルトは10
です。トラフィックで必要な場合、コネクタは[MAX]
インスタンスにスケールアウトしますが、再スケーリングは行われません。コネクタのスケーリングの詳細については、スループットとスケーリングをご覧ください。MACHINE_TYPE
:f1-micro
、e2-micro
、またはe2-standard-4
。マシンタイプやスケーリングなど、コネクタのスループットの詳細については、スループットとスケーリングをご覧ください。
より詳しい情報とオプションの引数については、
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 ネットワークとサブネットを作成し、コネクタを作成できます。
サービス プロジェクトで Cloud Functions を有効にする
サービス プロジェクトで Cloud Functions API を有効にします。これは、後続の手順で IAM ロールを追加し、サービス プロジェクトで Cloud Functions を使用するために必要です。
Console
Cloud Functions API のページを開きます。
ダッシュボードの上部にあるメニューバーで、プロジェクトのプルダウン メニューをクリックし、サービス プロジェクトを選択します。
[有効にする] をクリックします。
gcloud
ターミナルで次のコマンドを実行します。
gcloud services enable cloudfunctions.googleapis.com --project=SERVICE_PROJECT_ID
次のように置き換えます。
SERVICE_PROJECT_ID
: サービス プロジェクトの ID。
コネクタへのアクセス権を設定する
コネクタへのアクセス権を設定するには、ホスト プロジェクトのサービス プロジェクトに Cloud Functions サービス エージェント サーバーレス VPC アクセス ユーザーの IAM ロールを付与します。Cloud Functions(第 2 世代)の場合は、Cloud Run サービス エージェントに同じロールを付与する必要があります。
コンソール
[IAM] ページを開きます。
プロジェクトのプルダウン メニューをクリックし、ホスト プロジェクトを選択します。
[アクセス権を付与] をクリックします。
[新しいプリンシパル] フィールドに、サービス プロジェクトの Cloud Functions サービス エージェントのメールアドレスを入力します。
service-SERVICE_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
次のように置き換えます。
SERVICE_PROJECT_NUMBER
: サービス プロジェクトに関連付けられたプロジェクト番号。これはプロジェクト ID とは異なります。プロジェクト番号は、Google Cloud コンソールでサービス プロジェクトの [プロジェクトの設定] ページを表示すると確認できます。
Cloud Functions(第 2 世代)のみ: [新しいプリンシパル] フィールドに、サービス プロジェクトの Cloud Run サービス エージェントのメールアドレスも入力します。
service-SERVICE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com
[ロール] フィールドで、[サーバーレス VPC アクセス ユーザー] を選択します。
[保存] をクリックします。
gcloud
ターミナルで次のコマンドを実行します。
gcloud projects add-iam-policy-binding HOST_PROJECT_ID \ --member=serviceAccount:service-SERVICE_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com \ --role=roles/vpcaccess.user
次のように置き換えます。
HOST_PROJECT_ID
: 共有 VPC ホスト プロジェクトの ID。SERVICE_PROJECT_NUMBER
: サービス プロジェクトに関連付けられたプロジェクト番号。これはプロジェクト ID とは異なります。プロジェクト番号は、次のコマンドで確認できます。gcloud projects describe SERVICE_PROJECT_ID
Cloud Functions(第 2 世代)のみ: また、次のコマンドを実行して、Cloud Run サービス エージェントにロールを付与します。
gcloud projects add-iam-policy-binding HOST_PROJECT_ID \ --member=serviceAccount:service-SERVICE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com \ --role=roles/vpcaccess.user
コネクタを検出可能にする
ホスト プロジェクトの IAM ポリシーで、Cloud Run サービスをデプロイするプリンシパルに次の 2 つの事前定義ロールを付与する必要があります。
- サーバーレス VPC アクセス閲覧者(
vpcaccess.viewer
): 必須。 - Compute ネットワーク閲覧者(
compute.networkViewer
): 省略可能ですが、付与することをおすすめします。IAM プリンシパルが共有 VPC ネットワーク内のサブネットを列挙できるようにします。
サーバーレス VPC アクセス閲覧者(vpcaccess.viewer
)のロールのすべての権限を含むカスタムロールや他の事前定義ロールを使用することもできます。
コンソール
[IAM] ページを開きます。
プロジェクトのプルダウン メニューをクリックし、ホスト プロジェクトを選択します。
[アクセス権を付与] をクリックします。
[新しいプリンシパル] フィールドに、サービス プロジェクトでコネクタを表示する必要があるプリンシパルのメールアドレスを入力します。このフィールドには複数のメールアドレスを入力できます。
[ロール] フィールドで、次の両方のロールを選択します。
- サーバーレス VPC アクセス閲覧者
- Compute ネットワーク閲覧者
[保存] をクリックします。
gcloud
ターミナルで次のコマンドを実行します。
gcloud projects add-iam-policy-binding HOST_PROJECT_ID \ --member=PRINCIPAL \ --role=roles/vpcaccess.viewer gcloud projects add-iam-policy-binding HOST_PROJECT_ID \ --member=PRINCIPAL \ --role=roles/compute.networkViewer
次のように置き換えます。
HOST_PROJECT_ID
: 共有 VPC ホスト プロジェクトの ID。PRINCIPAL
: Cloud Run サービスをデプロイするプリンシパル。詳細は、--member
フラグをご覧ください。
コネクタを使用するように関数を構成する
共有 VPC へのアクセスを必要とする関数ごとに、関数のコネクタを指定する必要があります。次の手順では、コネクタを使用するように関数を構成する方法について説明します。
Console
Cloud Functions の概要ページを開きます。
プロジェクトのプルダウン メニューをクリックし、サービス プロジェクトを選択します。
[関数を作成] をクリックします。または、既存の関数をクリックしてその詳細ページに移動し、[編集] をクリックします。
[ランタイム、ビルド...] をクリックして詳細設定を表示します。
[接続] タブの [下り(外向き)設定] で、[VPC コネクタ] フィールドのコネクタを選択します。
gcloud
関数を含むプロジェクトを使用するように gcloud CLI を設定します。
gcloud config set project PROJECT_ID
次のように置き換えます。PROJECT_ID
: 共有 VPC へのアクセスを必要とする関数を含むプロジェクトの ID。関数がホスト プロジェクト内にある場合は、ホスト プロジェクト ID です。関数がサービス プロジェクト内にある場合は、サービス プロジェクト ID です。
--vpc-connector
フラグを使用して、関数をデプロイします。gcloud functions deploy FUNCTION_NAME --vpc-connector=CONNECTOR_NAME
次のように置き換えます。
FUNCTION_NAME
: 関数の名前CONNECTOR_NAME
: コネクタの名前ホスト プロジェクトではなく共有 VPC サービス プロジェクトからデプロイする場合は、次のように完全修飾名を使用します。例:projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
ここで、HOST_PROJECT_ID
はホスト プロジェクトの ID、CONNECTOR_REGION
はコネクタのリージョン、CONNECTOR_NAME
はコネクタに付けた名前です。
コネクタ経由で転送されるリクエストを制御する方法については、下り(外向き)設定をご覧ください。
を設定することで、サーバーレス VPC アクセス コネクタを指定する関数を必須にできます。次のステップ
- Cloud Functions から Memorystore に接続する。
- Cloud Functions のネットワーク設定を構成する。
- サーバーレス VPC アクセスの監査ロギングを使用して管理アクティビティをモニタリングする。
- VPC Service Controls を使用してサービス境界を作成して、リソースとデータを保護する。
- サーバーレス VPC アクセスに関連付けられている Identity and Access Management(IAM)のロールについて学習する。各ロールに関連付けられている権限の一覧については、IAM のドキュメントのサーバーレス VPC アクセスのロールをご覧ください。