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 デベロッパー(
roles/run.developer
) - Compute 閲覧者(
roles/compute.viewer
) - サーバーレス インテグレーション デベロッパー(
roles/runapps.developer
) - サーバーレス インテグレーション オペレーター(
roles/runapps.operator
) - サービス アカウント ユーザー(
roles/iam.serviceAccountUser
)
クリックしてサービス アカウントに必要なロールを表示
Cloud Run サービスをデプロイするには、自動作成された Compute Engine のデフォルトのサービス アカウントを使用するか、ユーザー管理のサービス アカウントを指定します。サービス アカウントには次のロールが必要です。
- Cloud Run デベロッパー(
roles/run.developer
) - ログバケット書き込み者(
roles/logging.bucketWriter
) - サービス アカウント ユーザー(
roles/iam.serviceAccountUser
) - Storage 管理者(
roles/storage.admin
) - Firebase 管理者(
roles/firebase.admin
) - プロジェクト IAM 管理者(
roles/projectIAM.admin
)
新しい Firestore データベースにサービスを接続する
構成を変更すると、新しいリビジョンが作成されます。明示的に更新しない限り、以降のリビジョンでも、この構成が自動的に設定されます。
コンソールまたはコマンドラインを使用して、Cloud Run サービスを Firestore データベースに接続できます。
コンソール
Google Cloud コンソールで [Cloud Run] ページに移動します。
この統合で使用するサービスリストでサービスをクリックします。
[統合] タブをクリックします。
[統合を追加] をクリックします。
[Firestore データベース] をクリックします。
デフォルト名をそのまま使用するか、任意の名前に変更します。
API のリストを有効にするように求められたら、[有効にする] をクリックし、API が有効になるまで待ちます。
[リソース] の下に、この統合の結果として作成される新しいリソースが表示されます。
[送信] をクリックし、統合とリソースが作成されるまで待ちます。この処理には最大 15 分を要する場合があります。
gcloud
最新の Google Cloud CLI に更新します。
gcloud components update
統合を作成します。
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
最大 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 データベースのインテグレーションの現在のステータスを表示するには:
コンソール
Google Cloud コンソールで [Cloud Run] ページに移動します。
この統合で使用するサービスリストでサービスをクリックします。
[統合] タブをクリックします。
目的の Firestore データベース インテグレーションを見つけて、[詳細を表示] をクリックします。
gcloud
利用可能なインテグレーションのリストを取得するには、次のコマンドを使用します。
gcloud beta run integrations list
返されたリストの名前を使用して、その詳細を表示します。
gcloud beta run integrations describe INTEGRATION_NAME
INTEGRATION_NAME は、Firestore データベース インテグレーションの名前に置き換えます。
Firestore データベースのインテグレーションを削除する
インテグレーションを削除すると、インテグレーションに関連付けられているすべての Google Cloud リソースも削除されますが、Cloud Run サービスは削除されません。
Cloud Run サービスから Firestore データベースのインテグレーションを削除するには:
コンソール
Google Cloud コンソールで [Cloud Run] ページに移動します。
統合を削除するサービスをクリックします。
[統合] タブをクリックします。
目的の Firebase データベース インテグレーションを見つけて、その右側にある省略記号アイコンをクリックし、[削除] をクリックします。
gcloud
利用可能なインテグレーションのリストを取得するには、次のコマンドを使用します。
gcloud beta run integrations list
返されたリストの名前を使用して、インテグレーションを削除します。
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 する既存のリポジトリも必要です。
サンプル ファイルのディレクトリを作成します。
mkdir SERVICE
SERVICE は Cloud Run サービス名に置き換えます。
Docker 認証を構成します。
gcloud auth configure-docker REGION-docker.pkg.dev
REGION は、サービスの Google Cloud リージョンに置き換えます。
SERVICE ディレクトリに
requirements.txt
ファイルを作成し、次の内容を追加します。flask google-cloud-firestore
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"]
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)
SERVICE ディレクトリに移動します。
cd SERVICE
SERVICE は、Cloud Run サービス フォルダの名前に置き換えます。
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
など)に置き換えます。
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
など)に置き換えます。
サービスを 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 が表示されます。
Cloud Run のための Firestore インテグレーションを構成します。
gcloud beta run integrations create \ --type=firestore \ --service=SERVICE_NAME \ --region REGION
デプロイが完了したら、次の読み取りコマンドと書き込みコマンドにサービス URL を入力します。
データを書き込む:
curl -X POST SERVICE_URL/data -H "Content-Type: application/json" -d '{"name": "Alice", "city": "New York"}'
データを読み取る:
curl https://SERVICE_URL/data
データ読み取りコマンドで返されるさまざまな結果を確認するには、データ書き込みコマンドで名前と都市を変更します。
制限事項
- Cloud Run インテグレーションは、特定のリージョンでのみサポートされています。Cloud Run インテグレーションでサポートされていないリージョンを使用する必要がある場合は、サーバーサイドのクライアント ライブラリを使用するをご覧ください。
- Firestore のデフォルト データベースはサポートされていません。このインテグレーションは、名前付きの Firestore データベースの作成のみをサポートしています。