使用 Firestore 可为 Cloud Run 服务设置可扩缩的 NoSQL 云数据库。Firestore 是一种灵活且可伸缩的 NoSQL 数据库,适用于进行移动端、Web 和服务器开发。
您可以使用本页面介绍的 Cloud Run 集成将 Cloud Run 服务快速连接到新的 Firestore 数据库。
准备工作
- 确保您要集成的 Cloud Run 服务已部署完毕。
- 查看 Firestore 价格页面。您需要为集成中使用的各个资源付费。
所需的角色
如需使用 Cloud Run 集成,您或您的管理员必须向两个不同的主账号授予 IAM 角色。
点击查看您的 Google 账号需要的角色
如需获得使用 Cloud Run 集成所需的权限,请让您的管理员向您的 Google 账号授予项目的以下 IAM 角色:
- Cloud Run Developer (
roles/run.developer
) - Compute Viewer (
roles/compute.viewer
) - Serverless Integrations Developer (
roles/runapps.developer
) - Serverless Integrations Operator (
roles/runapps.operator
) - Service Account User (
roles/iam.serviceAccountUser
)
点击查看服务账号需要的角色
如需部署 Cloud Run 服务,您可以使用系统自动创建的 Compute Engine 默认服务账号,也可以指定用户管理的服务账号。服务账号必须具有以下角色:
- Cloud Run Developer (
roles/run.developer
) - Logs Bucket Writer (
roles/logging.bucketWriter
) - Service Account User (
roles/iam.serviceAccountUser
) - Storage Admin (
roles/storage.admin
) - Firebase Admin (
roles/firebase.admin
) - Project IAM Admin (
roles/projectIAM.admin
)
将服务连接到新的 Firestore 数据库
任何配置更改都会导致新修订版本的创建。后续修订版本也将自动采用此配置设置,除非您进行了明确更新。
您可以使用控制台或命令行将 Cloud Run 服务连接到 Firestore 数据库。
控制台
在 Google Cloud 控制台中,转到 Cloud Run 页面。
在服务列表中,点击要在此集成中使用的服务。
点击 Integrations(集成)标签。
点击添加集成。
点击 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 页面。
在服务列表中,点击要在此集成中使用的服务。
点击 Integrations(集成)标签。
找到相关 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 页面。
点击要删除集成的服务。
点击 Integrations(集成)标签。
找到您感兴趣的 Firestore 数据库集成,点击集成右侧的省略号图标,然后点击删除。
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 Server 库代码示例或以下示例,请参阅 Firestore 文档:
以下说明中的 Python 示例需要使用 Cloud Run 集成创建的 Firestore 数据库,并在原生 Firestore 模式下运行。您还必须有现成的代码库以将代码推送到其中。
为示例文件创建目录:
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 映像:
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。
部署完成后,服务网址会显示在文本网址的旁边。
为 Cloud Run 配置 Firestore 集成:
gcloud beta run integrations create \ --type=firestore \ --service=SERVICE_NAME \ --region REGION
部署完成后,在以下读取和写入命令中输入服务网址:
写入数据:
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 数据库。