Cloud RunのDirect VPC Egressを解説

記事タイトルとURLをコピーする

G-gen の佐々木です。当記事では、Google Cloud (旧称 GCP) のサーバーレスコンテナサービスである Cloud RunDirect VPC Egress 機能について解説します。

前提知識

Cloud Run とは

Cloud Run は Google Cloud におけるサーバーレス コンテナコンピューティング サービスであり、HTTP リクエストをトリガーに実行される Cloud Run services と、任意のタイミングでジョブを実行できる Cloud Run jobs の 2種類があります。以下の記事をご参照ください。

blog.g-gen.co.jp

blog.g-gen.co.jp

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

従来の Cloud Run では、VPC 内のリソースやパブリック IP を使用しない Cloud SQL、Memorystore などのリソースに対して接続する場合、サーバーレス VPC アクセスコネクタ のインスタンスを介して VPC に接続する必要がありました。

サーバーレス VPC アクセスコネクタは VPC にコネクタインスタンス用のサブネットを確保し、そのサブネットの IP アドレス範囲(/28 CIDR範囲)を使用して 2~10 インスタンスまでスケーリングすることができます。

概要

Direct VPC Egress とは

Cloud Run で Direct VPC Egress を有効にすると、サーバーレス VPC アクセスコネクタを使用せずに VPC ネットワークにトラフィックを送信できるようになります。Direct VPC Egress は Cloud Run service、Cloud Run jobs の両方で使用することができます。

なお、Direct VPC Egress は名前の通り VPC に対する下り(外向き)の通信で機能するものであり、VPC から Cloud Run への上り(内向き)の通信には影響はありません。

使用方法

Direct VPC Egress を使用するには、Cloud Run サービス/ジョブの作成時に Cloud Run が接続する VPC、サブネットを指定します。

Direct VPC Egress では、以下の IPv4 範囲がサポートされています(IPv6 はサポートされていません)。

  • RFC 1918推奨10.0.0.0/8172.16.0.0/12192.168.0.0/16
  • RFC 6598100.64.0.0/10
  • クラスE(240.0.0.0/4

Cloud Run から送信されるトラフィックは、「プライベート IP へのリクエストだけを VPC にルーティングする」か「すべてのトラフィックを VPC にルーティングする」かのどちらかを選択できます。

また、Direct VPC Egress を使用する Cloud Run には、リビジョン単位で ネットワークタグ を設定することができます。

ネットワークタグを使用することで、Cloud Run からの下り(外向き)のトラフィックに対して適用されるファイアウォールルールを設定することができます。

サーバーレス VPC アクセスコネクタと Direct VPC Egress の比較

コスト

サーバーレス VPC アクセスコネクタは VM インスタンスとして作成され、常に起動したままの状態となるため、従量課金のネットワークコストに加えて、マシンタイプに応じた 起動時間あたりの料金が常に発生してしまいます。

また、サーバーレス VPC アクセスコネクタは最大インスタンス数の設定により負荷増大時に自動でスケールアウトすることが可能ですが、一度スケールアウトするとインスタンス数をスケールインすることができない という制限事項があります。

これらの制限は、アクセスがないときはゼロスケールすることができる Cloud Run の特性とは相性が悪いと言えるでしょう。

Direct VPC Egress にはコネクタインスタンスが存在しないため、ネットワーク通信料金以外は発生しません。

パフォーマンス

サーバーレス VPC アクセスコネクタではコネクタインスタンスが VPC へのトラフィックをプロキシするため、レイテンシが多少発生していまいます。

Direct VPC Egress にはコネクタインスタンスが存在しないため、より低レイテンシ・高スループットが発揮できます。

構成図

例えば、Cloud Run からプライベート IP を使用する Cloud SQL インスタンスに接続する場合、サーバーレス VPC アクセスコネクタを使用すると以下のような構成になります。

サーバーレス VPC アクセスコネクタを使用する場合の Cloud SQL へのプライベート接続

Direct VPC Egress を使用する場合、プライベート IP を使用する Cloud SQL インスタンスへの接続は以下のような構成となります。

Direct VPC Egress を使用する場合の Cloud SQL へのプライベート接続

Direct VPC Egress ではコネクタインスタンスを使用しないため、ネットワークコストのみ料金が発生します。また、インスタンスを介さずに VPC に直接接続することで、高パフォーマンスの接続 を実現しています。

比較表

Direct VPC Egress サーバーレス VPC アクセスコネクタ
ネットワークパフォーマンス
コスト 低(ネットワークコストのみ) 高(VM 料金 & ネットワークコスト)
IP 割り当て 使用する IP アドレス数 >= Cloud Run のコンテナインスタンス数 となるため、多くの IP アドレスを使用する 傾向がある コネクタインスタンスの数だけ IP が割り当てられるため、使用する IP アドレスが少ない

ユースケース

Direct VPC Egress は、従来はサーバーレス VPC アクセスコネクタを使用していた以下のようなケースで使用することができます。

  • パブリック IP を使用しない Cloud SQL インスタンスや AlloyDB インスタンスに接続する。
  • Memorystore インスタンスに接続する。
  • VPC 内の Cloud NAT を使用して、Cloud Run から外部のサービスにアクセスする際に使用されるパブリック IP を固定する。
  • オンプレミス、Compute Engine、GKE 上のサービスにプライベート IP で接続する。

先述のコストメリットとパフォーマンスを考慮すると、制限事項 により使用できない場合を除き、基本的にはコネクタよりも Direct VPC Egress を使用すると良いでしょう。

制限事項

Cloud Run services、Cloud Run jobs 共通の制限事項

サブネットに十分な IP アドレスが必要

Direct VPC Egress を使用する場合、Cloud Run に紐付けたサブネットのプライベート IP アドレス範囲が使用されますが、サブネットで使用できる IP アドレスが枯渇していると、コンテナインスタンスがスケールアウトできなくなります。

Cloud Run が使用できる IP アドレスの数は 最大コンテナインスタンス数の4倍 確保することが推奨されています。つまり、最大インスタンス数が 10 の場合、40 個以上の IP アドレスを確保しておく必要があります。

Direct VPC Egress を使用できるコンテナインスタンス数の上限

Cloud Run のクォータMaximum number of container instances using Direct VPC egress)により、Direct VPC Egress を使用して VPC に接続することができるコンテナインスタンスの数が 100~200 に制限されています(リージョンにより異なる)。

リージョンごとのクォータはコンソールから確認することができ、申請することにより上限を増やすことができます。

メンテナンスイベント時の接続断

ネットワークインフラストラクチャのメンテナンスイベント発生時に、Direct VPC Egress を使用した接続が一時的に切断される可能性があります。

そのため、切断時の再接続を適切に処理することができるクライアントライブラリの使用が推奨されています。

Cloud Run の実行環境(世代)

Cloud Run の第2世代の実行環境で Direct VPC Egress を使用する場合、コンテナのコールドスタート時間が長くなる可能性があります。

なお、Cloud Run jobs では必ず第2世代の実行環境が使用されるため、コールドスタートを許容できる場合のみ Direct VPC Egress を使用することを推奨します。

Cloud Run jobs における制限事項

  • Direct VPC Egress の使用するジョブは、同時実行するタスク数を 8 以内に抑えることが推奨されています。
  • 少なくとも 1,024 個の IP アドレスを Direct VPC Egress 用に確保しておく必要があります。
  • Cloud Run jobs では 透過的なメンテナンスイベントが発生することがあります。このとき、Direct VPC Egress による VPC への接続が一時的に切断される可能性があります。

Direct VPC Egress で利用できないもの

ロギング・モニタリングに関して

  • Direct VPC Egress を使用した通信は、Cloud Run サービス、ジョブの名前やリビジョンの名前がファイアウォールルールのロギング、VPC フローログに記録されません。
  • Packet MirroringNetwork Intelligence Center はサポートされていません。

VPC ファイアウォールルールの使用に関して

  • 接続先 VPC の上り(内向き)ファイアウォールルールで Cloud Run に付与した ネットワークタグ を使用できません。
  • 接続先 VPC の上り(内向き)ファイアウォールルールで CLoud Run の サービス ID を使用することはできません。
  • 接続先 VPC の上り(内向き)ファイアウォールルールで Cloud Run ワークロードに付加された Resource Manager タグ を使用できません。

これらの意味するところは、Cloud Run からの VPC 内の VM に対するアクセスは、Cloud Run に付与されたタグやサービス ID を用いた 上り(内向き)ファイアウォールルールで制御することはできない ということです。

したがって、たとえば Cloud Run からアクセスさせたくない VM がある場合は、Cloud Run に設定したネットワークタグに適用される下り(外向き)のファイアウォールルールで拒否ルールを設定する必要があります。

または、Cloud Run が使用するプライベート IP アドレスをソース IP とすることで内向きの拒否ルールを設定することができます。

佐々木 駿太 (記事一覧)

G-gen最北端、北海道在住のクラウドソリューション部エンジニア

2022年6月にG-genにジョイン。Google Cloud Partner Top Engineer 2024に選出。好きなGoogle CloudプロダクトはCloud Run。

趣味はコーヒー、小説(SF、ミステリ)、カラオケなど。