2023/08/14 に Direct VPC Egress がプレビューリリースされました。
このアップデートにより Serverless VPC Access connectors を使用せずに直接 VPC ネットワークへトラフィックを送信できるようになりました。

今回はその特徴や制限事項、設定方法について紹介いたします。

Serverless VPC Access connectors

これまで Cloud Run から VPC 内のリソースへアクセスする場合は、Serverless VPC Access connectors を経由する必要がありました。
コネクタ インスタンスというリソースで構成されており、インスタンス数やマシンタイプによって性能が変わります。
マシンタイプが大きいほどスループットが高くなり、インスタンス数が多いほど捌けるトラフィック量が増えますが、その分コストも高くなります。

Direct VPC Egress

Direct VPC Egress では Cloud Run インスタンスが VPC ネットワーク上の内部 IP アドレスを取得して、VPC 上の各リソースへアクセスします。
Serverless VPC Access connectors と比べてシンプルな構成となり、スループットやコスト面でもメリットがありますが、Cloud NATを経由した通信ができないなどの制限もあるため注意が必要です。
詳しくは後述の制限事項に記載しています。

設定方法

設定は簡単で、Cloud Run のネットワークの設定画面から[Connect to a VPC for outbound traffic]にチェックを付けて各項目を入力するのみです。
ドキュメントに記載されているオプションを指定することで、gcloud や terraform でも設定できるようです。

各項目には以下を入力します。
ネットワークタグに対して下り(外向き)Firewall rule を設定することで、プライベート IP を持つ Cloud SQL や Memorystore にもアクセス可能です。
※Cloud SQL や Memorystore から Cloud Run へのアクセスといった上り(内向き)の設定不可

項目 内容
ネットワーク トラフィックを送信する VPC(必須)
サブネット サービスが IP アドレスを受信するサブネット ※CIDR 範囲が /26 以上である必要あり
ネットワークタグ 指定したタグで下り(外向き)のトラフィックに対して適用される Firewall ruleを設定可能

特徴

Direct VPC Egress には大きく3つの特徴があります。

シンプル構成、簡単なセットアップ

  • Cloud Run 以外のリソースを作成する必要がないためシンプルな構成
  • Cloud Run の編集画面上にて数クリックで設定可能

低レイテンシ、高スループット

  • Direct VPC Egressで使用する通信経路はホップが少ないためレイテンシが少ない
  • 高速な通信経路で多くのトラフィックを処理できるためスループットが高い

低コスト

  • ネットワーク料金のみがかかる従量課金制のため低コスト

Serverless VPC Access connectors との比較表

Direct VPC Egress と Serverless VPC Access connectors について纏めた比較表が以下になります。

Direct VPC Egress Serverless VPC Access connectors
構成 シンプル(Cloud Runのみ) 複雑(Cloud Run + Serverless VPC Access connectors)
IP 割り当て 多い(Cloud Run インスタンス数だけ必要) 少ない(コネクタインスタンス数だけ必要)
レイテンシ 低い 高い
スループット 高い 低い
コスト 低い(ネットワーク料金のみ) 高い(VM 料金 + ネットワーク料金)

制限事項

ここまで多くのメリットがありましたが制限事項もいくつか存在します。
以下について理解した上で使用する必要があります。

スケーリングに上限がある

  • サービスに対して最大 100 インスタンス、またはジョブに対して最大 100 タスクまでがサポート対象

インスタンス毎に内部 IP アドレスが必要

  • 指定した VPC のサブネット内の IP アドレスを各インスタンスへ割り当てる仕組み
  • IP アドレスが不足すると十分な数が利用可能になるまでインスタンスやジョブタスクを開始できない
  • Google では実行するインスタンス数の 4 倍の数を確保しておくことが推奨されている

Cloud NAT を経由した通信ができない

  • Cloud NAT がサポートされていないため、外部 IP アドレスを固定してインターネットへアクセスすることはできない
  • インターネットへのアクセスは Traffic routing で プライベート IP へのリクエストだけを VPC コネクタ経由でルーティングする を選択することで可能

ログやメトリクスが取得できない

  • Firewall rule ログ、VPC フローログ、Packet Mirroring はサポート対象外のためログに記録されない
  • Direct VPC Egress を使用した通信は以下のメトリクスに含まれず、指標には不完全な値が表示される
    • 送信バイト数(container/network/sent_bytes_count)
    • 受信バイト数(container/network/received_bytes_count)

その他の制限事項

  • Cloud Run へ付与したネットワーク タグやサービス IDに対して上り(内向き)Firewall rule を設定できない
  • Cloud Run に付与された Resource Manager タグを Firewall rule で使用できない
  • Cloud Run ジョブが 1 時間以上実行される場合、メンテナンス イベント中に接続が切断される可能性がある

終わりに

Direct VPC Egress を利用して Cloud Run から VPC へ直接アクセスする方法、およびその特徴や制限事項について紹介しました。
構成が簡単になるだけでなく、パフォーマンスやコスト面でメリットがあるのは非常に魅力的である一方、制限も多いため利用する場合は注意が必要と感じました。
本機能は現在プレビューとなっていますので、GA する時にはこれらの制限が改善されると嬉しいですね!

参考:
Direct VPC Egress
Serverless VPC Access connectors
Cloud Run から VPC への下り(外向き)比較
Announcing Direct VPC egress for Cloud Run: better performance and lower costs