Cloud Runのコールドスタートの解説と対処法

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

G-gen の武井です。当記事では Cloud Run のコールドスタートについて整理した結果や、対処方法についてご紹介します。

Cloud Run の概要

Cloud Run とは、コンテナとしてパッケージされたアプリケーションを簡単に実行できる Google Cloud のフルマネージド型のサーバーレスプラットフォームサービスです。

インフラの管理はほぼ必要で、コンテナを実行するインスタンスは負荷に応じて自動的にスケールアウトし、処理をしていないときはインスタンス数を 0 までスケールインさせることも可能です。

その他 Cloud Run の詳細については、以下の記事も参照してください。

blog.g-gen.co.jp

コールドスタートについて理解する

コールドスタートとは

コールドスタート とは、新しいインスタンスが起動する際に実行される初期化プロセスに伴う遅延のことです。

初期化プロセスとは、「コンテナイメージのダウンロード」「アプリケーションの起動」「必要なライブラリのロード」といった、アプリケーションの起動に必要な一連のプロセスを指します。

コールドスタートは、Cloud Run がゼロからスケーリング(スケールアウト)する際や、リクエストの増加によりコンテナインスタンスがスケールアウトする際に発生します。コールドスタートが発生すると、ユーザーへのレスポンスが遅延し、体験の悪化に繋がります。

Cloud Run のスケールイン・アウト

Cloud Run はリクエスト負荷に応じて、自動的にスケールインスケールアウトを行います。

ただし、すべてのリクエストを処理し終わった場合でも、インスタンスをすぐにシャットダウンすることはしません。これはコールドスタートの影響を最小限に抑えるための設計思想であり、一部のインスタンスを最大で 15 分間、アイドル状態で確保することで、その後のリクエストに最小限の遅延で応答きるよう考慮されています。

コールドスタートが発生する理由

ゼロスケール状態で新たにリクエストを受け付けたり、リクエストの増加によりコンテナインスタンスのスケールアウトが起こると、コールドスタートが発生します。

コンテナが新たに起動され、「コンテナイメージのダウンロード」「アプリケーションの起動」「必要なライブラリのロード」といった処理が発生するためです。

コールドスタートへの対策法

1. コンテナイメージや初期化処理を軽くする

コールドスタートによる遅延の長さは、コンテナの起動の初期化処理の長さに依存します。以下のような改善を検討することで、初期化処理を短くすることができます。

  • コンテナイメージに含まれるライブラリや依存関係を最小限にし、イメージサイズを小さくする
  • グローバルスコープでの重い処理を避け、実際に必要になったタイミングで初期化する(遅延初期化)

参考 : 全般的な開発のヒント ‐ パフォーマンスの最適化

2. 起動時の CPU ブースト

起動時の CPU のブースト機能は、インスタンスの起動時間中とインスタンス開始後の 10 秒間に追加の CPU を提供するもので、コールドスタートによる遅延軽減に有効です。

設定も簡単で、以下の公式ガイドに沿って設定するだけで起動時の CPU ブーストを利用可能です。CPU ブーストを使うと、最長で10秒間分の追加料金が発生します。

詳細は以下の記事で解説していますので、あわせて参照してください。

blog.g-gen.co.jp

3. 最小インスタンス

Cloud Run は、リクエストを処理していないインスタンス(アイドル状態)を最大15分経過後に削除します。

最小インスタンス1 以上の数で設定すると、アイドル状態のインスタンスを常に確保してゼロスケール状態になるのを防ぐため、コールドスタートの改善が見込めます。

ただし、アイドル状態のインスタンスに対しても、Cloud Run の料金が発生しますので、事前に料金の見積もりが必要です。

4. 実行環境の選択

Cloud Run の実行環境には第1世代第2世代があり、前者は後者に比べ、コールドスタートの遅延が短い傾向にあります。

ただし各世代にはそれぞれ適切なユースケースがあり、例えば NFS ボリュームのマウントは、第1世代では対応していません。

第1世代で問題ないユースケースでは、コールドスタートによる遅延軽減が見込めます。

5. スケジュールベースでスケーリングを設定する

Cloud Run の最小インスタンス数を、特定の時間帯で自動的にスケーリングさせる処理を実装していきます。

Cloud Scheduler と Cloud Run functions を用いて、リクエスト数が増加すると見込まれる時間帯に最小インスタンス数を増やし、リクエストが減ると考えられる時間帯に最小インスタンス数を減らすことで、コストを最適化したまま、コールドスタートによる遅延の発生を抑止することができます。

詳細は以下の記事を参照してください。

blog.g-gen.co.jp

武井 祐介 (記事一覧)

クラウドソリューション部クラウドエンジニアリング課。

Google Cloud Partner Top Engineer 2025 選出。

趣味はロードレースやサッカー観戦、ゴルフ、筋トレ。