サーバーレスVPCアクセスコネクタで発生するメンテナンスとその注意点

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

G-gen の佐々木です。当記事では Cloud RunCloud Functions などで使用する サーバーレス VPC アクセス のコネクタインスタンスで発生するメンテナンスと、それに関する注意点を記載します。

はじめに

長期起動とする Cloud Run サービスがサーバーレス VPC アクセスを使う場合は、コネクタインスタンスの突発メンテナンスに備えて、データベース接続断を検知して再接続を行う処理をアプリケーション側に実装する必要があります。

その理由と仕組みについて、詳述していきます。

前提知識

サーバーレス VPC アクセスとは

サーバーレス VPC アクセスとは、Cloud Run、Cloud Functions、Google App Engine(Standard 環境)などのサーバーレスなサービスがプライベート IP を使用して VPC 内リソースに接続するための方法です。

サーバーレス VPC アクセスでは、各種サービスから接続したい VPC に サーバーレス VPC アクセスコネクタ と呼ばれるインスタンス(以下、コネクタインスタンス)を作成します。このコネクタインスタンスを経由することで、Compute Engine VM や Cloud SQL などの VPC 内リソースにプライベート IP で接続することができるようになります。

サーバーレス VPC アクセスを使用した Cloud SQL への接続例

Cloud Run では、VPC 内リソースにプライベート IP で接続する方法として、サーバーレス VPC アクセスのほかに Direct VPC Egress があります。Direct VPC Egress の詳細、およびサーバーレス VPC アクセスとの違いについては以下の記事をご一読ください。

blog.g-gen.co.jp

コネクタインスタンスのスケーリングについて

サーバーレス VPC アクセスでは、VPC に接続するために作成するコネクタインスタンスの最小数(2~9)と最大数(3~10)をあらかじめ設定します。

コンテナインスタンスの負荷が高まると、最大で設定した値までインスタンスがスケールアウトしますが、その後負荷が解消されてもインスタンスがスケールインすることはありません。

たとえば、最小数 2、最大数 5の設定でコンテナインスタンスが 5までスケールアウトすると、その後インスタンスの数が 4以下にスケールインすることはありません。インスタンス数を減らしたい場合、サーバーレス VPC アクセスを再設定(削除→新規作成)する必要があります。

コネクタインスタンスのメンテナンス

メンテナンス時に何が起こるのか

サーバーレス VPC アクセスにおけるコネクタインスタンスの裏側では Compute Engine VM インスタンスが実行されており、Google によるセキュリティアップデートなどのメンテナンスが数分間行われる場合があります。

メンテナンスが発生すると、利用できるコネクタインスタンスの数を維持するために、最大数に設定されているコネクタインスタンス数を一時的に超過してスケールアウトする場合があります。

たとえば、コネクタインスタンスの数が 3つであり、それが設定している最大数だった場合、メンテナンス時にインスタンス数が 6までスケールアウトする可能性があります。メンテナンスが終了すると、インスタンスの数は 3にスケールインされます。

したがって、コネクタインスタンスのメンテナンス時には、設定値を超過するスケールアウトと本来起こらないはずのスケールインが起こる 可能性があります。Cloud Monitoring などの監視ツールで、メンテナンス時の一時的なインスタンス数増加を確認することができます。

メンテナンスの注意点

メンテナンス時に発生するスケールアウトは、利用可能なコネクタインスタンスの数を保ち、コネクタインスタンスを使用するサービスが中断しないようにするための仕様です。しかし、これまで接続していたメンテナンス対象のインスタンスに接続できなくなることで、サービス中断が発生する可能性があります。

以下の例では、Cloud Run 上のアプリケーションからサーバーレス VPC アクセスを使用して Cloud SQL に接続しています。

サーバーレス VPC アクセスを使用した Cloud SQL への接続

メンテナンスが発生してコネクタインスタンスがスケールアウトし、元々あったインスタンスに接続できなくなったとします。
このとき、Cloud Run 上のアプリケーションから Cloud SQL への接続を維持できず、サービス中断が発生する可能性があります。

メンテナンスによるコネクタインスタンスのスケールアウト

サービス中断を防ぐためには、データベース接続のエラーを検知して再接続を行う処理をアプリケーション側に実装する必要があります。
再接続により正常なコネクタインスタンスへの接続が行われ、Cloud SQL への接続を継続することができます。

再接続ロジックにより新しいコネクタインスタンスに接続する

佐々木 駿太 (記事一覧)

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

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

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