アプリのホスティングを構成する

環境変数などの高度な構成や、同時実行、CPU、メモリの上限などのランタイム設定の場合は、アプリのルート ディレクトリに apphosting.yaml ファイルを作成して編集する必要があります。このファイルは、Cloud Secret Manager で管理されるシークレットへの参照もサポートしているため、ソース管理に安全にチェックインできます。

バックエンドの Cloud Run サービスの設定、環境変数、Cloud Secret Manager が管理するシークレットへの参照を含む、一般的な apphosting.yaml ファイルは次のようになります。

# Settings for Cloud Run
runConfig:
  minInstances: 2
  maxInstances: 100
  concurrency: 100
  cpu: 2
  memoryMiB: 1024

# Environment variables and secrets
env:
  - variable: STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
      - BUILD
      - RUNTIME

  - variable: API_KEY
    secret: myApiKeySecret

    # Same as API_KEY above but with a pinned version.
  - variable: PINNED_API_KEY
    secret: myApiKeySecret@5

    # Same as API_KEY above but with the long form secret reference as defined by Cloud Secret Manager.
  - variable: VERBOSE_API_KEY
    secret: projects/test-project/secrets/secretID

    # Same as API_KEY above but with the long form secret reference with pinned version.
  - variable: PINNED_VERBOSE_API_KEY
    secret: projects/test-project/secrets/secretID/versions/5

このガイドの残りの部分では、これらの設定例の詳細とコンテキストについて説明します。

Cloud Run サービスの設定

apphosting.yaml 設定を使用すると、Cloud Run サービスのプロビジョニング方法を構成できます。Cloud Run サービスで使用可能な設定は、runConfig オブジェクトで提供されます。

  • cpu - サービスを提供するインスタンスごとに使用される CPU の数(デフォルトは 0)。
  • memoryMiB - サービスを提供するインスタンスごとに割り当てられるメモリの量(MiB 単位、デフォルトは 512)
  • maxInstances - 一度に実行できるコンテナの最大数(デフォルトは 100、割り当てによって管理)
  • minInstances - 常に存続させるコンテナの数(デフォルトは 0)。
  • concurrency - サービスを提供する各インスタンスが受信できるリクエストの最大数(デフォルトは 80)。

cpumemoryMiB の間には重要な関係があります。メモリは 128 ~ 32, 768 の任意の整数値に設定できますが、メモリの上限を引き上げるには CPU の上限を引き上げる必要があります。

  • 4 GiB を超える場合は 2 個以上の CPU が必要
  • 8 GiB を超える場合は 4 個以上の CPU が必要
  • 16 GiB を超える場合は 6 個以上の CPU が必要
  • 24 GiB を超える場合は 8 個以上の CPU が必要

同様に、cpu の値は同時実行の設定に影響します。1 CPU 未満の値を設定する場合は、同時実行を 1 に設定する必要があります。CPU はリクエストの処理中にのみ割り当てられます。

環境変数

サードパーティの API キーや調整可能な設定など、ビルドプロセスに追加の構成が必要になる場合があります。App Hosting は、プロジェクトでこのタイプのデータを保存および取得するための環境構成を apphosting.yaml で提供しています。

env:
-   variable: STORAGE_BUCKET
    value: mybucket.appspot.com

Next.js アプリの場合、環境変数を含む dotenv ファイルも App Hosting で使用できます。任意のフレームワークで環境変数をきめ細かく制御するには、apphosting.yaml を使用することをおすすめします。

apphosting.yaml では、availability プロパティを使用して、環境変数にアクセスできるプロセスを指定できます。環境変数を、ビルド環境のみまたはランタイム環境のみで使用できるように制限できます。デフォルトでは両方で利用できます。

env:
-   variable: STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
    -   BUILD
    -   RUNTIME

Next.js アプリでは、dotenv ファイルの場合と同じ方法で NEXT_PUBLIC_ 接頭辞を使用して、ブラウザから変数にアクセスできるようにすることもできます。

env:
-   variable: NEXT_PUBLIC_STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
    -   BUILD
    -   RUNTIME

有効な変数キーは A ~ Z 文字またはアンダースコアです。一部の環境変数のキーは、内部使用のために予約されています。構成ファイルでは次のキーを使用しないでください。

  • X_FIREBASE_ で始まる変数
  • PORT
  • K_SERVICE
  • K_REVISION
  • K_CONFIGURATION

シークレット パラメータ

API キーなどの機密情報はシークレットとして保存する必要があります。apphosting.yaml でシークレットを参照すると、機密情報をソース管理にチェックインする必要がなくなります。

secret 型のパラメータは、Cloud Secret Manager に格納されている値を持つ文字列パラメータを表します。シークレット パラメータは、値を直接取得するのではなく、Cloud Secret Manager の存在をチェックし、ロールアウト中に値を読み込みます。

  -   variable: API_KEY
      secret: myApiKeySecret

Cloud Secret Manager のシークレットには複数のバージョンがあります。デフォルトでは、ライブ バックエンドで使用できるシークレット パラメータの値は、バックエンドがビルドされたときに利用可能な最新バージョンのシークレットに固定されます。パラメータのバージョニングとライフサイクル管理が必要な場合は、Cloud Secret Manager を使用して特定のバージョンに固定できます。たとえば、バージョン 5 に固定するには、次のようにします。

  - variable: PINNED_API_KEY
    secret: myApiKeySecret@5

CLI コマンド firebase apphosting:secrets:set を使用してシークレットを作成できます。必要な権限を追加するよう求められます。このフローでは、シークレット参照を apphosting.yaml に自動的に追加するオプションがあります。

Cloud Secret Manager の全機能を使用するには、代わりに Cloud Secret Manager コンソールを使用します。その場合は、CLI コマンド firebase apphosting:secrets:grantaccess を使用して App Hosting バックエンドに権限を付与する必要があります。

Firebase Auth の状態を同期する

Firebase Auth を使用するアプリでは、Firebase Web SDK を使用して、クライアントとサーバー間で認証状態の同期を維持することをおすすめします。これは、Service Worker で FirebaseServerApp を実装することで簡単にできます。基本的なタスクフローは次のとおりです。

  1. サーバーへのリクエストにアプリの適切なヘッダーを追加する Service Worker を実装します。
  2. サーバー上のリクエストからヘッダーを取得し、FirebaseServerApp を使用してそれを認証ユーザーに変換します。