自动管理资源

您可以通过以下过程自动创建 Firestore 数据库:

  1. 创建新的 Google Cloud 项目。每个项目只能有一个 Firestore 数据库。
  2. 创建 App Engine 应用。Firestore 依赖于 App Engine。您必须激活 App Engine 才能使用 Firestore。
  3. 创建 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 可授予此权限。

如需授予此角色,请参阅授予、更改和撤消对资源的访问权限

创建新项目和数据库

  1. 使用 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"
    }
          

    替换以下内容:

    成功后,请求将返回操作名称:

    200:
    
    {
      "name": "operations/cp.6311184959990822268"
    }
        
  2. 使用上一步中的操作名称和 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,
          
  3. 使用 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"
      }
    }
            
  4. 使用上一步中的操作名称和 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 脚本中自动创建数据库。在脚本中,完成以下步骤:

  1. 使用 gcloud projects create 创建一个新项目:

    gcloud projects create project-id
  2. 使用 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 数据库。
  3. 使用 gcloud services enable 启用 App Engine Admin API:

    gcloud services enable appengine.googleapis.com --project=project-id
  4. 使用 gcloud alpha firestore databases creategcloud 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_FIRESTORECLOUD_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 不得重复。