🕵️

よくわかる Cloud Run の VPC 接続の基本

2023/12/13に公開

2023年は「Cloud Run を触って覚える」をテーマとした一人アドベントカレンダーを一人で開催しており、Cloud Run のさまざまな機能や、Cloud Run でよく使う構成などを実際の使い方と一緒にご紹介しています。

https://qiita.com/advent-calendar/2023/cloud-run

13日目は Cloud Run から VPC に接続する際の基礎知識についてご紹介します。データベースに接続するようなアプリケーションを構築する上では必要な知識になると思います。

Cloud Run の概要は技術評論社さまのブログ「gihyo.jp」に寄稿した記事で解説していますのでこちらもぜひご覧ください。

https://gihyo.jp/article/2023/10/modern-app-development-on-google-cloud-03

Cloud Run から VPC 接続が必要な場面

Cloud Run から VPC 接続が必要になるのは、主に次のようなケースが挙げられます。

  • Cloud SQL (データベース) にプライベートに接続したい
  • Memorystore (インメモリデータベース) に接続したい
  • VPC 内に GCE インスタンスとして立てた API サーバーを呼び出したい

この中でも特に Cloud SQL や Memorystore と併用するケースは多いのではないかと思います。

Cloud Run は VPC に関連付けられていない

まず初めに Cloud Run の前提となる仕様ですが、Cloud Run は VPC 内に作られません。

https://cloud.google.com/run/docs/securing/private-networking?hl=ja

VM とは異なり、Cloud Run サービスは特定の VPC ネットワークに関連付けられていません。

イメージとしては Google Cloud プロジェクト内の VPC の外側に作られる形になるので どのように VPC 内のリソースに接続するか という経路を構成しなければいけません。

Cloud Run の配置イメージ

Cloud Run から VPC に接続するオプション

次に Cloud Run から VPC 内のリソースに接続する方法をご紹介します。

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

サーバーレス VPC アクセス コネクタ (以下コネクタ) はサーバーレス環境で構成されているサービス (Cloud Run、App Engine、Cloud Functions など) から VPC ネットワークにアクセスするための中継を行うリソースです。

コネクタの実態としては GCE インスタンス (コネクタ インスタンス) が立ち上がります。Cloud Run からのトラフィックを受信し、VPC 内のリソースにトラフィックを流す役割を担います。

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

コネクタ インスタンスは 3 つのマシンタイプから選択でき、複数稼働させることができます。また、Cloud Run の費用とは別にコネクタ インスタンスの費用がかかります。マシンタイプは必要なスループットによって決めます。

マシンタイプ 推定スループット範囲(Mbps) asia-northeast1 のコスト
f1-micro 100~500 $0.0092 / h
e2-micro 200~1,000 $0.01075 / h
e2-standard-4 3,200~16,000 $0.171928 / h

スループットが分からない場合は、現在 (2023年12月時点) プレビューで提供している スループット チャート を使用して実際のスループットをモニタリングする方法がおすすめです。まずはいずれかのマシンタイプを仮で決めて運用し、実際のスループットが想定と乖離があるようであればマシンタイプやコネクタ インスタンスの最小数・最大数を変更するようにします。なお コネクタの設定の変更 も現在 (2023年12月時点) はプレビューで提供しています。

サーバーレス VPC アクセスの詳細な仕組みについては次のドキュメントを参照してください。

https://cloud.google.com/vpc/docs/serverless-vpc-access?hl=ja

https://cloud.google.com/run/docs/configuring/vpc-connectors?hl=ja

コネクタ インスタンスのスケール アウトに注意する必要がある

コネクタ インスタンスはスケール設定 (最小数、最大数) に基づき、トラフィックに応じて自動的にスケール アウトします。

トラフィックが増えた場合の管理が不要な点は便利ですが、一方でスケール インは行いません。そのため「一時的にトラフィックが増え、その後はトラフィックが落ち着いた」といったケースが発生した場合はスケールアウトした状態のままになります。

ダイレクト VPC 下り (外向き) (プレビュー)

ダイレクト VPC 下り (外向き) (Direct VPC egress) は今年 (2023年) 新しく追加されたオプションで、現在 (2023年12月時点) はプレビューで提供されています。

https://cloud.google.com/run/docs/configuring/vpc-direct-vpc?hl=ja

ダイレクト VPC 下り (外向き) を使うと Cloud Run サービスをサブネット内にデプロイすることができます。コンテナ インスタンスごとに IP アドレスが割り振られ、コンテナ インスタンスごとに VPC 内のリソースに直接アクセスできるようになります。

ダイレクト VPC 下り (外向き)

サーバーレス VPC アクセスと比べると、コネクタ インスタンスも必要なく、費用もかかりません。管理面もコスト面もメリットがあるオプションです。

制限事項を確認しておく

ダイレクト VPC 下り (外向き) はサーバーレス VPC アクセスを使った構成における課題を解決することができるため便利です。プレビューの段階では 制限事項 がいくつかあるため、事前に確認しておきましょう。

次のような制限事項があります。

  • Cloud Run サービスのコンテナ インスタンス数は最大 100 までをサポート
  • Cloud Run ジョブはコンテナ インスタンス数は同時に最大 8 並列が推奨
  • コンテナ インスタンスのスケールを考慮し数百個の IP アドレスの予約が推奨
  • IPv4 のみサポート (IPv6 は使用不可)
  • Cloud NAT は非サポート (IP アドレスの固定化はできない)

特に、より多くの IP アドレス範囲の確保が必要な点に注意が必要です。

どちらが良いのか?

サーバーレス VPC アクセス コネクタとダイレクト VPC 下り、どちらが適しているのかはユースケースによって変わってきます。これらはそれぞれどういった違いがあるのかは次のドキュメントで公開しています。

https://cloud.google.com/run/docs/configuring/connecting-vpc?hl=ja

なお、サーバーレス VPC アクセス コネクタとダイレクト VPC 下りのどちらを使うかは、各 Cloud Run サービス、または各 Cloud Run ジョブごとに設定します。切り替えも設定 1 つで済むため、例えば「まずはサーバーレス VPC アクセス コネクタを使っておき、GA されたらダイレクト VPC 下りに切り替える」といった方法も取れます。

VPC への接続方法の設定

まとめ

Cloud Run から Cloud SQL などに接続しようと思うとサーバーレス VPC アクセス コネクタなどの構成が必要になりますが、この記事を通して「なぜ必要なのか」がお分かりいただけたら幸いです。

またダイレクト VPC 下りは現在プレビューですが、サーバーレス VPC アクセス コネクタよりもマッチするケースも多いです。既にサーバーレス VPC アクセス コネクタを使って構成されている方もぜひ構成変更を検討してみてください。

Google Cloud Japan

Discussion