Requisito de App Engine

Antes, todas las bases de datos de Firestore se vinculaban a una app de App Engine. Cuando se vincula, tu base de datos requiere una app de App Engine activa en el mismo proyecto. Sin la aplicación activa de App Engine, el acceso de lectura y escritura a la base de datos está inhabilitado.

De forma predeterminada, las bases de datos de Firestore ahora se aprovisionan desvinculadas de App Engine.

Si tu base de datos está vinculada a App Engine, puedes desvincularla.

App Engine activa

Una aplicación de App Engine activa significa que existe una aplicación en el mismo proyecto y que esta aplicación no está inhabilitada. No requiere que la app tenga usos. La app y la base de datos vinculadas deben existir en la misma región.

Si inhabilitas la app de App Engine, también inhabilitas el acceso a la base de datos de Firestore vinculada a esa app.

Puedes verificar el estado de desvinculación de App Engine con la API de REST:

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

En la respuesta, observa el valor de appEngineIntegrationMode. Si el valor es DISABLED, tu base de datos no está vinculada a una aplicación de App Engine.

Si inhabilitas una aplicación de App Engine vinculada, también inhabilitas el acceso de lectura y escritura a tu base de datos. Si esto sucede, la página Datos de Firestore en la consola de Google Cloud presenta la opción de desvincular la base de datos de la app de App Engine. Haz clic en Desvincular base de datos para comenzar el proceso.

Ir a Datos de Firestore

También puedes desvincular la base de datos con la API de REST:

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"

Cuando desvinculas tu base de datos, puedes inhabilitar App Engine sin afectar el acceso a tu base de datos. La desvinculación es una operación permanente. La operación de desvinculación puede tardar hasta cinco minutos en aplicarse.

Migra recursos de Terraform para App Engine

Si antes administraste bases de datos de Firestore a través del recurso google_app_engine_application de Terraform, puedes usar el recurso google_firestore_database de Terraform en su lugar.

Si quieres obtener instrucciones generales para administrar las bases de datos de Firestore a través de Terraform, consulta Automatiza la creación de bases de datos.

Crea un recurso google_firestore_database.

En el archivo de configuración de Terraform, crea un recurso google_firestore_database nuevo:

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"
}

Consulta Ubicaciones de Firestore para ver la lista de ubicaciones disponibles. Elige la ubicación correspondiente a la de tu base de datos existente.

Importa la base de datos existente de Firestore

Primero, asegúrate de que la API de Firestore esté habilitada.

Luego, importa la base de datos existente de Firestore a tu estado de Terraform:

terraform import google_firestore_database.database "(default)"

Luego, ejecute el siguiente comando:

terraform plan

Inspecciona el resultado para asegurarte de que la importación se haya completado correctamente. Si el resultado muestra algún campo que cambia, asegúrate de que estos cambios sean los previstos. Si el resultado incluye una línea similar a la siguiente:

google_firestore_database.database must be replaced

Luego, inspecciona tu archivo de configuración de Terraform para ver si hubo algún error, en particular en los campos project, location o name, y vuelve a ejecutar terraform plan. Cualquier campo que requiera que Terraform reemplace tu base de datos se marcará con # forces replacement en el resultado del plan.

Cuando estés conforme con el resultado del plan de Terraform, ejecuta lo siguiente:

terraform apply

Quita el recurso google_app_engine_application

Si tienes un recurso google_app_engine_application existente en tu archivo de configuración de Terraform, quítalo de ese archivo ahora.

Luego, vuelve a ejecutar:

terraform plan

Debería ver un resultado similar al siguiente:

Terraform will perform the following actions:

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

Cuando estés satisfecho con el resultado del plan, ejecuta

terraform apply

Actualmente, Terraform no admite la eliminación de recursos de App Engine. Aunque Terraform mostrará que el recurso está destruido, en realidad no borrará la aplicación de App Engine. Sin embargo, Terraform ya no administrará la aplicación de App Engine.

Requisito de la API de Firestore

Antes, todas las bases de datos de Firestore estaban vinculadas a una aplicación de App Engine. Las bases de datos de Firestore ahora se aprovisionan desvinculadas de App Engine de forma predeterminada. Además, todas las bases de datos, tanto las existentes como las nuevas, ahora tienen los siguientes requisitos:

  • Para administrar tu base de datos desde la consola de Google Cloud y la gcloud CLI, la API de Firestore debe estar habilitada en el proyecto. Esto es obligatorio para Firestore en modo nativo y Firestore en modo Datastore.
  • Cuando se ejecutan desde la consola de Google Cloud o gcloud CLI, las operaciones administrativas a continuación requerirán los siguientes permisos de IAM:

    • Crear base de datos: datastore.databases.create
    • Ver metadatos de la base de datos: datastore.databases.getMetadata
    • Editar los metadatos de la base de datos: datastore.databases.update

Las funciones predefinidas, como Usuario de Datastore y Visualizador de Datastore, incluyen los permisos necesarios. Si creaste funciones personalizadas de IAM, es posible que debas actualizarlas para que incluyan los permisos anteriores.

Si ya definiste una función personalizada para Datastore, es posible que no tenga el permiso datastore.databases.getMetadata. Para garantizar el acceso continuo, actualiza tus funciones personalizadas con datastore.databases.getMetadata o mediante una función predefinida.

Habilita la API mediante Terraform

Si lo deseas, también puedes habilitar la API de Firestore a través de Terraform:

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

Si tienes un recurso google_firestore_database, puedes agregar una dependencia al recurso google_project_service para asegurarte de que la API esté habilitada antes de que Terraform intente crear la base de datos:

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