Cloud Run でサイドカーのデプロイが可能に - モニタリング エージェントやプロキシなどに最適
Google Cloud Japan Team
※この投稿は米国時間 2023 年 5 月 24 日に、Google Cloud blog に投稿されたものの抄訳です。
Cloud Run はフルマネージド型のコンテナ ランタイムで、コンテナ内のコードをゼロから適切な数のインスタンスに自動スケールして、受信リクエストすべてに対応できるようにします。これまで、Cloud Run サービス内のインスタンスはそれぞれ、1 つのコンテナで実行されていました。このたび Cloud Run サイドカーが導入され、ウェブ リクエストを処理するメインコンテナの他に、独立したサイドカー コンテナを起動して実行できるようになりました。
Cloud Run サイドカーの利用例を以下に示します。
アプリケーションのモニタリング、ロギング、トレーシングを行う
アプリケーション コンテナの前面で Nginx、Envoy、または Apache2 をプロキシとして使用する
認証や承認用のフィルタを追加する(例: Open Policy Agent)
アウトバウンド接続用のプロキシを実行する(Alloy DB Auth プロキシなど)
同じインスタンス内のコンテナはすべて同じネットワーク名前空間を共有し、「localhost:port」という形式で互いに通信できます(ポートには、各コンテナがリッスンしているポート番号を指定します)。また、共有ボリュームを使って、コンテナ間でファイルを共有することもできます。
Cloud Run サイドカーによって、カスタム モニタリングや、ロギング、ネットワーキング、セキュリティなど、新しいパターンや用途が広がります。以下に例を示します。
アプリケーション モニタリング、ロギング、トレーシング用のサイドカー
サイドカーは、メインコンテナと並行して実行される追加のコンテナです。サイドカーを使用すれば、Cloud Run サービスに OpenTelemetry などのカスタム エージェントを追加し、ログや、指標、トレースを任意のバックエンドにエクスポートすることができます。以下の例では、Cloud Run サービスのデプロイに OpenTelemetry サイドカーを追加し、カスタマイズしたログ、指標、トレースをエクスポートしています。プロキシ
メインコンテナの前面で、プロキシ リクエスト用のコンテナを実行することもできます。たとえば、以下の例のようにして、DockerHub の公式の Nginx イメージを使用できます。このようなプロキシは抽象化レイヤとしての役割を果たします。具体的には、リクエストをインターセプトして適切なエンドポイントに転送することで、クライアントとサーバー間でアプリケーションへのトラフィックを効率よく流すために役立ちます。
nginx サイドカーを含む service.yaml の例を以下に示します。
以下は gzip 圧縮を行う nginx_config で、Secret Manager 内に「nginx_config」というシークレット名で格納されています。
上記の例では、以下の 2 つのコンテナをデプロイしています。
ウェブページの処理を担当する hello コンテナ
この hello コンテナの受信リクエストに対してプロキシの役割を果たす nginx コンテナ
nginx config を渡すために、Secret Manager に格納し、nginx コンテナの特定の場所でそれをマウントしています。または、run.googleapis.com/container-dependencies
というアノテーションを使って、コンテナをオーダーするという方法をとることもできます。この方法なら、nginx コンテナを hello コンテナより先に確実に起動して、トラフィックを常に nginx プロキシに流すことができます。
ネットワークとセキュリティ
サイドカーを使って、高度なネットワーキング処理を行うことも可能です。たとえば、Envoy プロキシをホストして、高度なトラフィック ルーティングやフィルタリングを行うことができます。または、セキュリティ強化用のサイドカーを実行して、トラフィックをインターセプトし、検出および攻撃防止を常時行うようにすることもできます。このようなパターンの一例として、サイドカーを使ってデータ取り込みツールに変更を加えた Nasdaq の事例があります。
「当社では、チャンク化されていない HTTP1 リクエストが、上限の 32 MB に達してしまうという問題を抱えていました。この問題を回避するため、HTTP2 リクエストを受け付けることにしましたが、そのためには本格的なコード リファクタリングが必要となります。そこで、フロントエンドとバックエンドのコードベースへの変更を最小限に抑えるため、Envoy を使って HTTP2 受信リクエストを HTTP1 に書き換えて、バックエンド サービスに直接転送することにしました。Cloud Run サイドカーのおかげで、無事にこれを実装できました。具体的には、Envoy サイドカーを使用し、リクエスト ペイロードが 32 MB を超える HTTP2 受信トラフィックを HTTP1 のアプリケーションに直接リダイレクトしています。これにより、コードに変更を加えずに済み、エンジニアリング費用も大幅に節約できました」 - Nasdaq、ソフトウェア エンジニアリング ディレクター Philippe Trembley 氏
データベース接続用プロキシ
サイドカーを使って、アプリケーションと並行して CloudSQL や AlloyDB などのデータベース クライアント プロキシを実行することもできます。それにより、安全性の高い接続や、簡単な承認処理、IAM ベースの認証経由で、これらの周辺データベース サービスにすぐに接続することができます。使ってみる
メインコンテナにプロキシやサイドカーを追加するには、コマンドラインまたは Cloud コンソールから、お使いの Cloud Run サービスの YAML を編集する必要があります。詳しくはドキュメントをご覧ください。また、複数のコンテナで共有可能なメモリ内ボリュームを作成して、コンテナ間でデータを共有することもできます。
Cloud Run は、サービスの実行に大変便利です。サイドカーとプロキシを使用することで、Cloud Run でできることがいっそう広がります。ご利用の Cloud Run サービスでサイドカーを構成する方法については、こちらをご覧ください。
- Google Cloud サーバーレス担当プロダクト マネージャー Sagar Randive