App Engine 要求

以前,所有 Firestore 数据库都已关联到 App Engine 应用。关联后,您的数据库需要在同一项目中有一个处于活跃状态的 App Engine 应用。如果没有处于活跃状态的 App Engine 应用, 数据库已停用。

现在,Firestore 数据库在预配时默认与 App Engine 解除关联。

如果您的数据库已与 App Engine 相关联,您可以解除数据库的关联。

活跃的 App Engine

App Engine 应用处于活跃状态意味着应用位于同一项目中,并且 表明此应用未停用。该应用无需有任何使用情况。 关联的应用和数据库必须位于同一区域。

如果您停用 App Engine 应用,则也无法再访问与该应用关联的 Firestore 数据库。

您可以使用 REST API 检查 App Engine 解除关联状态:

curl  --header "Authorization: Bearer $(gcloud auth print-access-token)" \
--header "Content-type: application/json" \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/(default)"

在响应中,查看 appEngineIntegrationMode 的值。如果值为 DISABLED,则表示您的数据库未与 App Engine 应用关联。

如果您停用关联的 App Engine 应用,则也将停用对数据库的读写访问权限。如果发生这种情况,系统随后会将 Firestore 数据页面 Google Cloud 控制台提供了用于解除数据库与 App Engine 应用。点击取消关联数据库以开始此过程。

转到 Firestore 数据

您还可以使用 REST API 解除数据库关联:

curl -X PATCH \
--header "Authorization: Bearer $(gcloud auth print-access-token)" \
--header "Content-type: application/json" \
--data '{"app_engine_integration_mode": "DISABLED"}' \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/(default)?updateMask=appEngineIntegrationMode"

解除数据库关联后 您可以停用 App Engine,而不影响对数据库的访问权限。 解除关联是一项永久性操作。解除关联操作最长可能需要五分钟才能生效。

迁移 Terraform App Engine 资源

如果您之前通过 google_app_engine_application Terraform 资源,您可以使用 google_firestore_database Terraform 资源。

如需有关通过 Terraform 管理 Firestore 数据库的一般说明,请参阅自动创建数据库

创建 google_firestore_database 资源

在 Terraform 配置文件中,创建一个新的 google_firestore_database 资源:

firestore.tf

resource "google_firestore_database" "database" {
  project     = "project"
  name        = "(default)"
  location_id = "location"
  
  type = "database_type" // either "FIRESTORE_NATIVE" or "DATASTORE_MODE"
  
  app_engine_integration_mode = "DISABLED"

  // Optional, but recommended for safety
  delete_protection_state = "DELETE_PROTECTION_ENABLED"
}

请参阅 Firestore 位置 查看可用位置列表。选择与此 相对应的营业地点 现有数据库的数据

导入现有 Firestore 数据库

首先,确保已启用 Firestore API

接下来,将现有 Firestore 数据库导入 Terraform 州:

terraform import google_firestore_database.database "(default)"

然后运行:

terraform plan

检查输出,确保导入已成功完成。如果输出 显示了更改的所有字段,请确保这些更改符合预期。如果输出 包含一行类似于以下内容的行:

google_firestore_database.database must be replaced

然后检查您的 Terraform 配置文件 特别是在 projectlocationname 字段,然后再次运行 terraform plan。在计划输出中,需要 Terraform 替换数据库的所有字段都会标记为 # forces replacement

对 Terraform 方案输出感到满意后,请运行以下命令:

terraform apply

移除 google_app_engine_application 资源

如果“google_app_engine_application”资源中已有 Terraform 配置文件,请立即将其从该文件中移除。

之后,再次运行以下命令:

terraform plan

您将看到如下所示的输出:

Terraform will perform the following actions:

  # google_app_engine_application.app will be destroyed
  # (because google_app_engine_application.app is not in configuration)

对方案输出满意后,运行

terraform apply

Terraform 目前不支持删除 App Engine 资源;虽然 Terraform 会显示资源已被销毁,但实际上不会删除 App Engine 应用。但是,App Engine Terraform 将不再管理该应用。

Firestore API 要求

以前,所有 Firestore 数据库都与 App Engine 应用相关联。 Firestore 数据库现在 默认情况下,预配与 App Engine 断开了链接。此外,所有数据库 现在都具有以下要求:

  • 如需通过 Google Cloud 控制台和 gcloud CLI,必须启用 Firestore API 项目 ID。这对于原生模式 Firestore 和 Datastore 模式 Firestore 数据库都是必需的。
  • 从 Google Cloud 控制台或 gcloud CLI 执行以下管理操作时,需要具备以下 IAM 权限:

    • 创建数据库:datastore.databases.create
    • 查看数据库元数据:datastore.databases.getMetadata
    • 修改数据库元数据:datastore.databases.update

预定义角色,例如 Datastore UserDatastore Viewer 包含所需的权限。如果您创建了任何自定义 IAM 角色,则可能需要更新这些角色以包含上述权限。

如果您之前为 Datastore 定义了自定义角色,该角色可能缺少 datastore.databases.getMetadata 权限。请使用 datastore.databases.getMetadata 更新自定义角色或使用预定义角色,以确保继续拥有访问权限。

通过 Terraform 启用 API

如需,您还可以通过 Terraform 启用 Firestore API:

resource "google_project_service" "firestore" {
  project = "project"
  service = "firestore.googleapis.com"
}

如果您有 google_firestore_database 资源,则可以向 google_project_service 资源添加依赖项,以确保在 Terraform 尝试创建数据库之前启用该 API:

resource "google_firestore_database" "database" {
  // ...
  depends_on = [google_project_service.firestore]
}