Firestore データベースに接続する

Firestore を使用して、Cloud Run サービス用にスケーラブルな NoSQL クラウド データベースを設定します。Firestore は、モバイル、ウェブ、サーバー開発に対応した、柔軟でスケーラブルな NoSQL データベースです。

このページで説明する Cloud Run インテグレーションを使用すると、Cloud Run サービスを新しい Firestore データベースにすばやく接続できます。

始める前に

  • 統合する Cloud Run サービスがすでにデプロイされていることを確認します。
  • Firestore の料金ページを確認します。インテグレーションで使用した個々のリソースに対して課金されます。

必要なロール

Cloud Run インテグレーションを使用するには、ユーザーまたは管理者が 2 つの異なるプリンシパルに IAM のロールを付与する必要があります。

クリックして Google アカウントに必要なロールを表示

Cloud Run の統合を使用するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを Google アカウントに付与するよう管理者に依頼してください。

クリックしてサービス アカウントに必要なロールを表示

Cloud Run サービスをデプロイするには、自動作成された Compute Engine のデフォルトのサービス アカウントを使用するか、ユーザー管理のサービス アカウントを指定します。サービス アカウントには次のロールが必要です。

新しい Firestore データベースにサービスを接続する

構成を変更すると、新しいリビジョンが作成されます。明示的に更新しない限り、以降のリビジョンでも、この構成が自動的に設定されます。

コンソールまたはコマンドラインを使用して、Cloud Run サービスを Firestore データベースに接続できます。

コンソール

  1. Google Cloud コンソールで [Cloud Run] ページに移動します。

    Cloud Run に移動

  2. この統合で使用するサービスリストでサービスをクリックします。

  3. [統合] タブをクリックします。

  4. [統合を追加] をクリックします。

  5. [Firestore データベース] をクリックします。

  6. デフォルト名をそのまま使用するか、任意の名前に変更します。

    画像

  7. API のリストを有効にするように求められたら、[有効にする] をクリックし、API が有効になるまで待ちます。

  8. [リソース] の下に、この統合の結果として作成される新しいリソースが表示されます。

  9. [送信] をクリックし、統合とリソースが作成されるまで待ちます。この処理には最大 15 分を要する場合があります。

gcloud

  1. 最新の Google Cloud CLI に更新します。

    gcloud components update
  2. 統合を作成します。

    gcloud beta run integrations create \
    --type=firestore \
    --service=SERVICE \
    --region REGION

    次のように置き換えます。

    • SERVICE: Cloud Run サービス名。

    必要に応じて、--service-account=SERVICE_ACCOUNT_EMAIL フラグを含めます。

    • SERVICE_ACCOUNT_EMAIL は、サービスのデプロイに使用されるユーザー管理のサービス アカウントのメールアドレス(PROJECT_NUMBER-compute@developer.gserviceaccount.com)に置き換えます。デフォルトのコンピューティング サービス アカウント(SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com)を使用する場合は、このフラグを省略します。

      Cloud Run インテグレーションをデプロイするときに、指定されたサービス アカウントを引き続き使用するには、次のコマンドを実行します。

      gcloud config set runapps/deployment-service-account
  3. 最大 15 分待ちます。その間、完全に構成された Firestore データベースが作成され、接続されます。さらに、データベースを識別する環境変数を含む新しい Cloud Run リビジョンが作成されます。プロセスが完了すると、次のメッセージが表示されます。

    [firestore] integration [firestore-xxx] has been updated successfully.
    
    To connect to the Firestore database, utilize the environment variable
    `FIRESTORE_DB_NAME`. This variable is added to the Cloud Run
    service for you.

    ステータスを確認するには、gcloud beta run integrations describe を実行します。

Firestore データベースのインテグレーションを表示する

Cloud Run サービスと Firestore データベースのインテグレーションの現在のステータスを表示するには:

コンソール

  1. Google Cloud コンソールで [Cloud Run] ページに移動します。

    Cloud Run に移動

  2. この統合で使用するサービスリストでサービスをクリックします。

  3. [統合] タブをクリックします。

  4. 目的の Firestore データベース インテグレーションを見つけて、[詳細を表示] をクリックします。

gcloud

  1. 利用可能なインテグレーションのリストを取得するには、次のコマンドを使用します。

    gcloud beta run integrations list
  2. 返されたリストの名前を使用して、その詳細を表示します。

    gcloud beta run integrations describe INTEGRATION_NAME

    INTEGRATION_NAME は、Firestore データベース インテグレーションの名前に置き換えます。

Firestore データベースのインテグレーションを削除する

インテグレーションを削除すると、インテグレーションに関連付けられているすべての Google Cloud リソースも削除されますが、Cloud Run サービスは削除されません。

Cloud Run サービスから Firestore データベースのインテグレーションを削除するには:

コンソール

  1. Google Cloud コンソールで [Cloud Run] ページに移動します。

    Cloud Run に移動

  2. 統合を削除するサービスをクリックします。

  3. [統合] タブをクリックします。

  4. 目的の Firebase データベース インテグレーションを見つけて、その右側にある省略記号アイコンをクリックし、[削除] をクリックします。

gcloud

  1. 利用可能なインテグレーションのリストを取得するには、次のコマンドを使用します。

    gcloud beta run integrations list
  2. 返されたリストの名前を使用して、インテグレーションを削除します。

    gcloud beta run integrations delete INTEGRATION_NAME

    次のように置き換えます。

    • INTEGRATION_NAME は、Firestore データベース インテグレーションの名前に置き換えます。

    必要に応じて、次のフラグ オプションを使用できます。

    オプション 説明
    --service-account 削除オペレーションを実行するユーザー管理のサービス アカウントのメールアドレス。

コードで Firestore データベースにアクセスする

インテグレーションが完了すると、Cloud Run サービスコードで使用する環境変数 FIRESTORE_DB_NAME が Cloud Run によって自動的に追加されます。

Firestore を使用するサービスのサンプルコード

Firestore サーバー ライブラリのコードサンプルまたは次のサンプルについては、Firestore のドキュメントをご覧ください。

以下の手順の Python サンプルでは、Cloud Run インテグレーションを使用して作成された Firestore データベースがネイティブ Firestore モードで実行されている必要があります。また、コードを push する既存のリポジトリも必要です。

  1. サンプル ファイルのディレクトリを作成します。

    mkdir SERVICE

    SERVICE は Cloud Run サービス名に置き換えます。

  2. Docker 認証を構成します。

    gcloud auth configure-docker REGION-docker.pkg.dev

    REGION は、サービスの Google Cloud リージョンに置き換えます。

  3. SERVICE ディレクトリに requirements.txt ファイルを作成し、次の内容を追加します。

    flask
    google-cloud-firestore
  4. SERVICE ディレクトリに Dockerfile ファイルを作成し、次の内容を追加します。

    FROM python:3.9-slim
    
    WORKDIR /app
    
    COPY requirements.txt ./
    RUN pip install -r requirements.txt
    
    COPY . .
    
    EXPOSE 8080
    
    CMD ["python", "app.py"]
  5. SERVICE ディレクトリに app.py ファイルを作成し、次の内容を追加します。

    from flask import Flask, jsonify, request
    import google.cloud.firestore
    import os

    app = Flask(name) dbname = os.environ['FIRESTORE_DB_NAME'] db = google.cloud.firestore.Client(database=dbname) # Initialize Firestore client

    @app.route('/data', methods=['POST']) def add_data(): data = request.get_json() db.collection('city_person').add(data) return jsonify({'message': 'Data added successfully!'}), 201

    @app.route('/data', methods=['GET']) def get_data(): results = db.collection('city_person').stream() data_list = [doc.to_dict() for doc in results] return jsonify(data_list), 200

    if name == 'main': app.run(host='0.0.0.0', port=8080, debug=True)

  6. SERVICE ディレクトリに移動します。

    cd SERVICE

SERVICE は、Cloud Run サービス フォルダの名前に置き換えます。

  1. Docker イメージをビルドします。

    docker build -t REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/IMAGE_NAME:latest .

    次のように置き換えます。

    • REGION は、サービスの Google Cloud リージョンに置き換えます。
    • PROJECT_ID は、Google Cloud プロジェクト ID に置き換えます。
    • REPOSITORY_NAME は、Artifact Registry リポジトリの名前に置き換えます。
    • IMAGE_NAME は、コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/job:latest など)に置き換えます。
  2. Docker イメージを push します。

    docker push REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/IMAGE_NAME:latest

    次のように置き換えます。

    • REGION は、サービスの Google Cloud リージョンに置き換えます。
    • PROJECT_ID は、Google Cloud プロジェクト ID に置き換えます。
    • REPOSITORY_NAME は、Artifact Registry リポジトリの名前に置き換えます。
    • IMAGE_NAME は、コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/job:latest など)に置き換えます。
  3. サービスを Cloud Run にデプロイします。

    gcloud run deploy SERVICE_NAME --image REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/IMAGE_NAME:latest --allow-unauthenticated --region REGION

REGION は、サービスの Google Cloud リージョンに置き換えます。PROJECT_ID は、Google Cloud プロジェクト ID に置き換えます。REPOSITORY_NAME は、Artifact Registry リポジトリの名前に置き換えます。IMAGE_NAME は、コンテナ イメージへの参照に置き換えます(例: us-docker.pkg.dev/cloudrun/container/job:latest)。

デプロイが完了すると、テキスト URL の横にサービス URL が表示されます。

  1. Cloud Run のための Firestore インテグレーションを構成します。

    gcloud beta run integrations create \
    --type=firestore \
    --service=SERVICE_NAME \
    --region REGION
  2. デプロイが完了したら、次の読み取りコマンドと書き込みコマンドにサービス URL を入力します。

    1. データを書き込む:

      curl -X POST SERVICE_URL/data -H "Content-Type: application/json" -d '{"name": "Alice", "city": "New York"}'
    2. データを読み取る:

      curl https://SERVICE_URL/data

データ読み取りコマンドで返されるさまざまな結果を確認するには、データ書き込みコマンドで名前と都市を変更します。

制限事項