サーバーレス VPC アクセスの構成

サーバーレス VPC アクセスを使用すると、Google Cloud のサーバーレス環境(Cloud Run(フルマネージド)、Cloud Functions、または App Engine スタンダード環境)から VPC ネットワークに直接接続できます。この接続により、サーバーレス環境で Compute Engine VM インスタンスや Memorystore インスタンスなど、内部 IP アドレスを持つリソースにアクセスできるようになります。たとえば、次のような場合に便利です。

  • Memorystore を使用して、サーバーレス サービスのデータを保存する場合。
  • Compute Engine VM で実行されるサードパーティ ソフトウェアをサーバーレス ワークロードが使用する場合。
  • Compute Engine のマネージド インスタンス グループでバックエンド サービスが実行されていて、サーバーレス環境が公共のインターネット接続を経由せずにそのバックエンドと通信する必要がある場合。
  • オンプレミスのデータベースから Cloud VPN を介して、サーバーレス環境がデータにアクセスする必要がある場合。

VPC ネットワークに接続すると、サーバーレス環境で、RFC 1918RFC 6598 で定義されている内部 DNS 名と内部 IP アドレスにリクエストを送信できるようになります。この内部アドレスには Google Cloud サービスからのみアクセスできます。内部アドレスを使用すると、リソースを公共のインターネットに公開する必要がなくなり、サービス間の通信のレイテンシも短縮されます。

サーバーレス VPC アクセスは、サーバーレス環境でのみリクエストを開始できます。VM によって開始されたリクエストでは、サーバーレス サービスの外部アドレスを使用する必要があります。詳細については、限定公開の Google アクセスをご覧ください。

サーバーレス VPC アクセスでは、共有 VPC ネットワークと、Cloud InterconnectCloud VPNVPC ネットワーク ピアリングを介して接続されたネットワークとの通信がサポートされています。サーバーレス VPC アクセスは、レガシー ネットワークをサポートしていません。

サーバーレス VPC アクセス コネクタ

サーバーレス VPC アクセスは、コネクタと呼ばれるリソースに基づいています。コネクタは、サーバーレス環境と VPC ネットワークとの間のトラフィックを処理します。Google Cloud プロジェクトでコネクタを作成するときに、コネクタを特定の VPC ネットワークとリージョンに接続します。次に、送信ネットワーク トラフィックにコネクタを使用するように、サーバーレス サービスを構成します。

コネクタを作成するときは、IP 範囲も割り当てます。コネクタを介して VPC ネットワークに送信されるトラフィックは、この範囲内のアドレスから送信されます。IP 範囲は、VPC ネットワークで予約されていない CIDR /28 範囲である必要があります。コネクタの IP 範囲からネットワーク内のすべての宛先への上り(内向き)を許可するために、優先度 1000 の暗黙的なファイアウォール ルールが VPC ネットワークに作成されます。

サーバーレス VPC アクセスは、コネクタ経由で送信されたトラフィック量に応じて、100 Mbps 単位で自動的にコネクタのスループットをプロビジョニングします。自動的にプロビジョニングされるスループットはスケールアップのみであり、スケールダウンは行われません。少なくとも 200 Mbps のコネクタがプロビジョニングされ、最大 1,000 Mbps までスケールアップできます。コネクタの作成時にスループットのスケーリング上限を構成できます。コネクタを介した実際のスループットが、プロビジョニングされたスループットを超える可能性があるので注意してください(特にトラフィックが短期間で急増する場合)。

サーバーレス VPC アクセス コネクタには使用量に応じて月額料金がかかります。詳しくは料金をご覧ください。

サーバーレス VPC アクセスの例(クリックして拡大)
サーバーレス VPC アクセスの例(クリックすると拡大します)

次のことに注意してください。

  • 共有 VPC を使用する場合を除き、コネクタを配置するプロジェクトとリージョンは、接続先のサーバーレス サービスと同じにする必要があります。コネクタを作成できるリージョンのリストについては、サポート対象のリージョンを参照してください。
  • 内部 IP アドレスと内部 DNS 名へのトラフィックは、コネクタ経由でルーティングされます。外部 IP アドレスへのトラフィックは、デフォルトでインターネット経由でルーティングされます。
  • 同じコネクタを複数のサーバーレス サービスで使用できます。
  • リージョン間のアクセスを許可するリソースに関しては、トラフィックの送信先のリソースとは別のリージョン内にコネクタを配置できます。その際、コネクタからの下り(外向き)の料金が請求されます。詳細については、料金をご覧ください。

コネクタの作成

コネクタを作成するには、Cloud Console または gcloud コマンドライン ツールを使用します。

Console

  1. プロジェクトで Serverless VPC Access API が有効になっていることを確認します。

    API を有効にする

  2. サーバーレス VPC アクセスの概要ページに移動します。

    サーバーレス VPC アクセスに移動

  3. [コネクタを作成] をクリックします。

  4. [名前] フィールドに、コネクタの名前を入力します。

  5. [リージョン] フィールドで、コネクタのリージョンを選択します。これは、サーバーレス サービスのリージョンと一致する必要があります。詳しくは、サポート対象のリージョンをご覧ください。

  6. [ネットワーク] フィールドで、コネクタを接続する VPC ネットワークを選択します。

  7. [IP 範囲] フィールドに、予約されていない CIDR /28 の内部 IP 範囲の最初のアドレスを入力します。この IP 範囲は、VPC ネットワーク内の既存の IP アドレス予約と重複してはいけません。たとえば、10.8.0.0/28)はほとんどの新しいプロジェクトで機能します。

  8. (オプション)コネクタのスループットをさらに制御するには、[最小スループット] フィールドと [最大スループット] フィールドを編集します。

  9. [作成] をクリックします。

コネクタの使用準備が整うと、コネクタ名の横に緑色のチェックマークが表示されます。

gcloud

  1. gcloud コンポーネントを最新バージョンに更新します。

    gcloud components update
    
  2. プロジェクトで Serverless VPC Access API が有効になっていることを確認します。

    gcloud services enable vpcaccess.googleapis.com
    
  3. 次のコマンドでコネクタを作成します。

    gcloud compute networks vpc-access connectors create [CONNECTOR_NAME] \
    --network [VPC_NETWORK] \
    --region [REGION] \
    --range [IP_RANGE]
    

    ここで

    • [CONNECTOR_NAME] は、コネクタの名前です。
    • [VPC_NETWORK] は、コネクタを接続する VPC ネットワークです。
    • [REGION] は、コネクタのリージョンです。これは、サーバーレス サービスのリージョンと一致する必要があります。詳しくは、サポート対象のリージョンをご覧ください。
    • [IP_RANGE] は予約されていない内部 IP ネットワークです。未割り当てスペースの /28 が必要です。指定する値は、CIDR 表記(10.8.0.0/28)ではなくネットワーク(10.8.0.0)です。この IP 範囲は、VPC ネットワーク内の既存の IP アドレス予約と重複してはいけません。たとえば、10.8.0.0 はほとんどの新しいプロジェクトで機能します。

    スループット制御などの詳細とオプションの引数については、gcloud のリファレンスをご覧ください。

  4. 使用する前に、コネクタが READY 状態になっていることを確認します。

    gcloud compute networks vpc-access connectors describe [CONNECTOR_NAME] --region [REGION]
    

    出力には、state: READY という行が含まれます。

コネクタの削除

コネクタを削除する前に、まだそれを使用しているサービスがないことを確認してください。サービスからコネクタの接続を解除する方法については、関連するプロダクトのドキュメントをご覧ください。まだサーバーレス VPC アクセス コネクタが接続されている VPC ネットワークは削除できません。VPC ネットワークを削除する場合は、その前に接続されているすべてのコネクタを削除する必要があります。

コネクタを削除するには、Cloud Console または gcloud コマンドライン ツールを使用します。

Console

  1. サーバーレス VPC アクセスの概要ページに移動します。

    サーバーレス VPC アクセスに移動

  2. 削除するコネクタを選択します。

  3. [削除] をクリックします。

gcloud

コネクタを削除するには、次の gcloud コマンドを使用します。

gcloud compute networks vpc-access connectors delete [CONNECTOR_NAME] --region [REGION]

ここで

  • [CONNECTOR_NAME] は、削除するコネクタの名前です。
  • [REGION] は、コネクタが配置されているリージョンです。

共有 VPC ネットワークの使用

組織で共有 VPC を設定している場合は、次の設定を行い、共有 VPC サービス プロジェクトのサーバーレス環境から共有 VPC ネットワークに接続できるようにします。

  1. 共有 VPC ホスト プロジェクトの管理者は、ホスト プロジェクト内にサーバーレス VPC アクセス コネクタを作成し、共有 VPC ネットワークに接続する必要があります。
  2. ホスト プロジェクトの管理者は、必要に応じて、ホスト プロジェクトで以下のアカウントにサーバーレス VPC アクセス ユーザー IAM ロールを付与する必要があります。

    • Cloud Run: サービス プロジェクトの Cloud Run サービス エージェント(service-SERVICE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com
    • Cloud Functions: サービス プロジェクトの Cloud Functions サービス エージェントservice-SERVICE_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
    • App Engine: サービス プロジェクトで App Engine のデプロイを行うユーザーまたはサービス アカウント。

    この IAM ロールを付与すると、サービス プロジェクトのサーバーレス環境でホスト プロジェクトのコネクタを使用できるようになります。

    Console

    1. 共有 VPC ホスト プロジェクトの [IAM] ページに移動します。

      IAM に移動

    2. [追加] をクリックします。

    3. [新しいメンバー] フィールドに、目的のアカウントのメールアドレスを入力します。上の説明をご確認ください。

    4. [ロール] フィールドで、[サーバーレス VPC アクセス ユーザー] を選択します。

    5. [保存] をクリックします。

    gcloud

    次のコマンドを使用して、共有 VPC ホスト プロジェクトに対する権限を付与します。

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --member MEMBER \
    --role roles/vpcaccess.user
    

    ここで、HOST_PROJECT_ID は共有 VPC ホスト プロジェクトの ID、MEMBER は目的のアカウントのメールアドレスです。上の説明をご確認ください。アカウントのタイプに応じて、MEMBER の先頭に user: または serviceAccount: を追加します。

    複数のアカウントがある場合には、必要に応じてこの手順を繰り返します。

この設定が完了すると、共有 VPC サービス プロジェクトに関連するサーバーレス環境で、共有 VPC ネットワークとの接続に使用するホスト プロジェクトのコネクタを指定できます。詳細については、コネクタを使用するサービスの構成をご覧ください。

コネクタを使用するサービスの構成

コネクタを作成したら、それを使用するようにサーバーレス サービスを構成できます。コネクタを使用するサービスの構成方法は、プロダクトによって異なります。具体的な手順については、関連するガイドをご覧ください。

サービスが VPC ネットワークに接続されたら、内部 IP アドレスまたは DNS 名にリクエストを送信することで、VM インスタンスと他の内部リソースにアクセスできます。

サポート対象のサービス

サーバーレス VPC アクセスを使用して、次のサービスから VPC ネットワークにアクセスできます。

サポートされるリージョン

サーバーレス VPC アクセス コネクタは、次のリージョンで作成できます。

  • asia-east1
  • asia-east2
  • asia-northeast1
  • asia-northeast2
  • asia-northeast3
  • asia-south1
  • asia-southeast1
  • asia-southeast2
  • australia-southeast1
  • europe-north1
  • europe-west1
  • europe-west2
  • europe-west3
  • europe-west4
  • europe-west5
  • europe-west6
  • northamerica-northeast1
  • southamerica-east1
  • us-central1
  • us-east1
  • us-east4
  • us-west1
  • us-west2
  • us-west3
  • us-west4

キュレートされた IAM ロール

次の表は、サーバーレス VPC アクセスに関連付けられている Identity and Access Management(IAM)のロールを示しています。各ロールに関連付けられている権限の一覧については、IAM のドキュメントのサーバーレス VPC アクセスのロールをご覧ください。

ロール 説明
サーバーレス VPC アクセス管理者
roles/vpcaccess.admin
すべてのサーバーレス VPC アクセス リソースに対する完全アクセス権
サーバーレス VPC アクセス ユーザー
roles/vpcaccess.user
サーバーレス VPC アクセス コネクタのユーザー
サーバーレス VPC アクセス閲覧者
roles/vpcaccess.viewer
すべてのサーバーレス VPC アクセス リソースの閲覧者

サービス アカウント

Cloud プロジェクトでオペレーションを実行するため、サーバーレス VPC アクセス サービスはサーバーレス VPC アクセス サービス エージェント サービス アカウントを使用します。このサービス アカウントのメールアドレスは、次の形式になります。

service-PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com

このサービス アカウントには、デフォルトでサーバーレス VPC アクセス サービス エージェントのロール(roles/vpcaccess.serviceAgent)が設定されています。このアカウントの権限を変更すると、サーバーレス VPC アクセスのオペレーションが失敗する可能性があります。

監査ロギング

サーバーレス VPC アクセスの監査ロギングの情報をご覧ください。

料金

サーバーレス VPC アクセスの料金は以下のとおりです。

リソース 料金
サーバーレス VPC アクセス コネクタ コネクタに自動的にプロビジョニングされたスループットに対して、100 Mbps あたり 1 f1-micro インスタンスとして課金されます。
サーバーレス環境から宛先への下り(外向き)ネットワーク Compute Engine ネットワーキング レートで課金

Cloud Console で請求レポートをラベルキー「serverless-vpc-access」でフィルタすることで、サーバーレス VPC アクセスの費用を確認できます。

トラブルシューティング

コネクタの作成でエラーが発生した場合は、次の方法でコネクタを再作成してください。

  • VPC ネットワーク内で予約されている既存の IP アドレスと重複しない RFC 1918 の内部 IP 範囲を指定します。
  • プロジェクトから ID serverless-vpc-access-images で Compute Engine VM イメージを使用できるように、プロジェクトに権限を付与します。これに合わせて組織ポリシーを更新する方法については、イメージ アクセスの制限の設定をご覧ください。
  • VM が IP 転送を有効にできるように constraints/compute.vmCanIpForward 組織のポリシーを設定します。

サーバーレス サービスのコネクタを指定しても、VPC ネットワーク内のリソースにアクセスできない場合は、次のようにします。

  • コネクタの IP 範囲からの上り(内向き)を拒否する、優先度が 1,000 よりも小さいファイアウォール ルールが、VPC ネットワーク上にないことを確認します。