Cloud RunのDirect VPC Egressを解説

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

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

Cloud Run

前提知識

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 への上り(内向き)の通信には影響はありません。

Cloud Run の Direct VPC Egress 機能は2023年8月現在、プレビュー版の提供となっているため、本番ワークロードにおける使用は現時点では推奨されません。

使用方法

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

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 インスタンスへの接続
  • Memorystore インスタンスへの接続
  • オンプレミス、Compute Engine、GKE 上のサービスへのプライベート接続

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

制限事項

スケーリングの上限

Direct VPC Egress は、サービスであれば最大 100インスタンス(max-instances=100)、ジョブであれば最大 100タスク(parallelism=100)までのサポートとなっています。

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

Direct VPC Egress は、2023年8月現在、以下のリージョンでのみサポートされています。

  • us-central1
  • us-east1
  • europe-west1
  • europe-west3
  • asia-northeast1

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

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

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

Cloud NAT は使用できない

Direct VPC egress は Cloud NAT がサポートされていないため、Cloud Run から外部のサービスにアクセスする際に使用されるパブリック IP アドレスを固定したい場合は、サーバーレス VPC アクセスコネクタを介して Cloud NAT に接続する必要があります。

Cloud NAT を使用したパブリック IP アドレスの固定については以下の記事をご一読ください。

blog.g-gen.co.jp

その他の制限事項

ロギング・モニタリングに関する制限事項

  • Direct VPC Egress を使用した通信はファイアウォールルールのロギング、VPC フローログ、Packet Mirroring に記録されない。
  • Direct VPC Egress を使用した通信は、Cloud Run の Google Cloud 指標である 送信バイト数(container/network/sent_bytes_count)受信バイト数(container/network/received_bytes_count) に含まれない。

Direct VPC Egress を介した通信は上記のロギング・モニタリングの対象になりません。
したがって、たとえば Cloud Monitoring に記録された送信バイト数が、実際の送信バイト数と一致しないケースが起こりえます。

セキュリティに関する制限事項

  • 接続先 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 とすることで内向きの拒否ルールを設定することができます。

Cloud Run jobs の実行時間に関する制限事項

Cloud Run jobs が 1 時間以上実行される場合、透過的なメンテナンスイベントが発生することがあります。このとき、Direct VPC Egress による VPC への接続が切断される可能性があります。

佐々木 駿太 (記事一覧)

G-gen 最北端、北海道在住のクラウドソリューション部エンジニア。
2022 年 6 月に G-gen にジョイン。Google Cloud All Certifications Engineer。

好きな Google Cloud プロダクトは Cloud Run。