App Engine 要求

以前,所有 Datastore 模式 Firestore 数据库都与 App Engine 应用相关联。关联后,您的数据库需要同一项目中的 App Engine 应用处于活跃状态。如果没有有效的 App Engine 应用,则无法读取和写入数据库。

现在,默认情况下,系统会预配与 App Engine 解除关联的 Datastore 模式数据库。

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

有效 App Engine

有效的 App Engine 应用是指同一项目中存在应用,并且该应用未被停用。它不要求应用有任何使用情况。 关联的应用和数据库必须位于同一区域。

如果您停用 App Engine 应用,则也会停用对与该应用关联的 Datastore 模式数据库的访问权限。

您可以使用 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 应用相关联。

您可以解除 Datastore 模式数据库与 App Engine 应用的关联,以移除对活跃 App Engine 应用的要求。解除数据库关联后,您可以停用 App Engine,而不会影响对数据库的访问。

解除关联是一项永久性操作。

如果您解除数据库的关联,则无法在 Datastore 管理员页面中使用停用写入功能。如果写入操作目前处于停用状态,则解除与数据库的关联会启用写入操作。

在取消数据库与 App Engine 的关联之前,请确保您已启用 Firestore API 并更新 IAM 权限

如需解除数据库关联,请前往 Datastore Admin 页面,然后点击解除数据库与应用的关联。解除关联操作可能需要长达 5 分钟才能生效。

前往 Datastore 管理

迁移 Terraform App Engine 资源

如果您之前通过 google_app_engine_application Terraform 资源管理 Datastore 模式数据库,则可以改用 google_firestore_database Terraform 资源。

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

创建 google_firestore_database 资源

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

datastore.tf

resource "google_firestore_database" "database" {
  project     = "project"
  name        = "(default)"
  location_id = "location"
  
  type = "DATASTORE_MODE"
  
  app_engine_integration_mode = "DISABLED"

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

如需查看可用位置的列表,请参阅 Datastore 位置。选择与现有数据库的位置对应的位置。

导入现有的 Datastore 模式数据库

首先,确保已启用 Firestore API

接下来,将现有的 Datastore 模式数据库导入到您的 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 资源

如果您的 Terraform 配置文件中包含现有的 google_app_engine_application 资源,请立即将其从该文件中移除。

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

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 要求

以前,所有 Datastore 模式 Firestore 数据库都与 App Engine 应用相关联。现在,默认情况下,Datastore 模式数据库在预配时不会与 App Engine 相关联。此外,所有数据库(包括现有数据库和新创建的数据库)现在都必须满足以下要求:

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

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

如果您尚未启用 Firestore API,则会在 Google Cloud 控制台的Datastore页面中看到一条错误消息,其中包含以下通知:

您需要使用 Firestore API 来管理数据库。

此错误还包含一个用于启用 Firestore API 的按钮。 点击相应按钮以启用该 API。

您还应验证自己的 IAM 权限,确保对数据库的访问权限不受影响。

验证通过 Google Cloud 控制台访问数据库的账号是否拥有上述必要权限。

预定义角色(例如 Datastore 用户Datastore 查看者)包含所需的权限。如果您创建了任何自定义 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]
}