自动管理资源
您可以通过以下过程自动创建 Firestore 数据库:
- 创建新的 Google Cloud 项目。每个项目只能有一个 Firestore 数据库。
- 创建 App Engine 应用。Firestore 依赖于 App Engine。您必须激活 App Engine 才能使用 Firestore。
- 创建 Firestore 数据库。
本页介绍如何使用 REST API、gcloud 命令行工具和 Terraform 完成此过程。
使用 REST API 创建数据库
您可以使用 Resource Manager API 和 App Engine Admin API 预配 Firestore 数据库。
身份验证和授权
如需访问 Resource Manager API 和 App Engine Admin API,您必须通过访问令牌对您的请求进行身份验证。您的访问令牌需要以下网址的 OAuth 2.0 范围:
https://www.googleapis.com/auth/cloud-platform
如需为应用设置身份验证,请参阅为服务器到服务器的生产应用设置身份验证。
在开发和测试应用时,您可以使用以下命令获取访问令牌:
gcloud auth application-default print-access-token
.
授权
经过身份验证的用户账号或服务账号需要具备 resourcemanager.projects.create
权限才能创建新项目。
例如,IAM 角色 Project Creator 可授予此权限。
如需授予此角色,请参阅授予、更改和撤消对资源的访问权限。
创建新项目和数据库
- 使用 projects.create 方法启动项目创建操作。在请求正文中,定义
Project
资源,例如:HTTP
POST https://cloudresourcemanager.googleapis.com/v1/projects HTTP/1.1 Authorization: Bearer access-token Accept: application/json Content-Type: application/json { "projectId": "project-id" }
替换以下内容:
access-token
是经过身份验证的访问令牌。project-id
是唯一项目 ID。
成功后,请求将返回操作名称:
200: { "name": "operations/cp.6311184959990822268" }
-
使用上一步中的操作名称和 Resource Manager operations.get 方法确认创建项目:
HTTP
GET https://cloudresourcemanager.googleapis.com/v1/operations/operation-name HTTP/1.1 Authorization: Bearer access-token Accept: application/json
如果项目创建成功,响应中将包含以下字段:
"done": true,
-
使用 App Engine Admin API apps.create 方法创建 App Engine 应用和 Firestore 数据库。在请求正文中,定义一个 Application 资源并添加
databaseType
字段,例如:HTTP
POST https://appengine.googleapis.com/v1/apps HTTP/1.1 Authorization: Bearer access_token Accept: application/json Content-Type: application/json { "databaseType": "CLOUD_FIRESTORE", "id": "project-id", "locationId": "location" }
请替换以下内容:
- project-id 是您创建的项目的 ID。
- location 用于设置 App Engine 应用和 Firestore 数据库的位置。
位置一经设置便无法更改。如需查看受支持位置的完整列表,请参阅 App Engine 位置。
App Engine 和 Firestore 支持相同的位置,但下面的 App Engine 单区域位置与 Firestore 多区域位置相对应:
us-central
(爱荷华)在nam5
(美国)多地区位置创建 Firestore 数据库。europe-west
(比利时)在eur3
(欧洲)多地区位置创建 Firestore 数据库。
该请求会返回操作名称:
200: { "name": "apps/project-id/operations/8612e502-4aeb-4f12-9e41-bbac0a0b819c", "metadata": { "@type": "type.googleapis.com/google.appengine.v1.OperationMetadataV1", "method": "google.appengine.v1.Applications.CreateApplication", "insertTime": "2020-06-05T23:34:32.587Z", "user": "username", "target": "apps/project-id" } }
-
使用上一步中的操作名称和 apps.operations.get 确认创建数据库:
HTTP
GET https://appengine.googleapis.com/v1/operation-name HTTP/1.1 Authorization: Bearer access-token Accept: application/json
如果操作成功,响应中将包含以下字段:
"done": true,
添加结算账号和 Firebase 服务
如需以编程方式将结算账号与您的项目相关联,请使用 projects.updateBillingInfo 方法。
如需以编程方式为您的项目启用 Firebase 服务,请参阅使用 Management REST API 设置和管理 Firebase 项目。
使用 gcloud 创建数据库
您可以使用 gcloud 命令行工具在 Bash 或 PowerShell 脚本中自动创建数据库。在脚本中,完成以下步骤:
使用
gcloud projects create
创建一个新项目:gcloud projects create project-id
使用
gcloud app create
激活 App Engine:gcloud app create --region=region --project=project-id
其中,region 是 App Engine 应用和 Firestore 数据库的位置。 位置一经设置便无法更改。如需查看受支持位置的完整列表,请参阅 App Engine 位置。
App Engine 和 Firestore 支持相同的位置,但下面的 App Engine 地区位置与 Firestore 多地区位置相对应:
us-central
(爱荷华)在nam5
(美国)多地区位置创建 Firestore 数据库。europe-west
(比利时)在eur3
(欧洲)多地区位置创建 Firestore 数据库。
使用
gcloud services enable
启用 App Engine Admin API:gcloud services enable appengine.googleapis.com --project=project-id
使用
gcloud alpha firestore databases create
或gcloud alpha datastore databases create
创建 Firestore 数据库:gcloud alpha firestore databases create --project=project-id --region=region
如需创建 Datastore 模式的 Firestore 数据库,请使用以下命令:
gcloud alpha datastore databases create --project=project-id --region=region
对于 region,您必须使用用于激活 App Engine 的值。
使用 Terraform 创建数据库
如需使用 Terraform 预配 Firestore 数据库,请使用 google_firestore_database
资源。
例如,以下 Terraform 配置文件会创建一个新项目并预配一个 Firestore 数据库:
firestore.tf
provider "google" { credentials = file("credentials-file") } resource "google_project" "my_project" { name = "My Project" project_id = "project-id" } resource "google_project_service" "firestore" { project = google_project.my_project.project_id service = "firestore.googleapis.com" } resource "google_firestore_database" "database" { project = google_project.my_project.project_id name = "(default)" location_id = "location" type = "FIRESTORE_NATIVE" depends_on = [google_project_service.firestore] }
替换以下内容:
- credentials-file 是服务账号密钥文件的路径。
- project-id 是项目 ID。项目 ID 不得重复。
- location 是 Firestore 数据库的位置。位置一经设置便无法更改。如需查看受支持位置的完整列表,请参阅 Firestore 位置。
如果您想使用 App Engine,请改为使用 google_app_engine_application
资源。将 database_type
设置为 CLOUD_FIRESTORE
或 CLOUD_DATASTORE_COMPATIBILITY
。
provider "google" { credentials = file("credentials-file") } resource "google_project" "my_project" { name = "My Project" project_id = "project-id" } resource "google_app_engine_application" "app" { project = google_project.my_project.project_id location_id = "location" database_type = "CLOUD_FIRESTORE" }
us-central
(爱荷华)在nam5
(美国)多地区位置创建 Firestore 数据库。europe-west
(比利时)在eur3
(欧洲)多地区位置创建 Firestore 数据库。
此外,Firestore 在 App Engine 不可用的某些区域可用。
在数据库中创建索引
Firestore 数据库可以包含单字段索引或复合索引。您可以修改 Terraform 配置文件,为数据库创建索引。
单字段索引
以下示例 Terraform 配置文件会在 chatrooms
集合的 name
字段中创建单字段索引:
firestore.tf
resource "random_id" "variable"{ byte_length = 8 } resource "google_firestore_field" "single-index" { project = "project-id" database = "(default)" collection = "chatrooms_${random_id.variable.hex}" field = "name" index_config { indexes { order = "ASCENDING" query_scope = "COLLECTION_GROUP" } indexes { array_config = "CONTAINS" } } ttl_config {} }
- 将 project-id 替换为项目 ID。项目 ID 不得重复。
复合索引
以下示例 Terraform 配置文件会为 chatrooms
集合中的 name
字段和 description
字段创建一个复合索引:
firestore.tf
resource "google_firestore_index" "composite-index" { project = "project-id" collection = "chatrooms" fields { field_path = "name" order = "ASCENDING" } fields { field_path = "description" order = "DESCENDING" } }
- 将 project-id 替换为项目 ID。项目 ID 不得重复。