Requisitos de App Engine

Anteriormente, todas las bases de datos de Firestore en modo Datastore estaban vinculadas a una aplicación de App Engine. Cuando se vincula, la base de datos requiere una aplicación de App Engine activa en el mismo proyecto. Sin la app de App Engine activa, se inhabilita el acceso de lectura y escritura a la base de datos.

Ahora, las bases de datos en modo Datastore se aprovisionan sin vincularse a App Engine de forma predeterminada.

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

App Engine activo

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

Si inhabilitas tu aplicación de App Engine, también inhabilitarás el acceso a la base de datos en modo Datastore vinculada a esa aplicación.

Puedes verificar el estado de la vinculació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 app de App Engine.

Puedes desvincular tu base de datos del modo Datastore de la app de App Engine para quitar el requisito de App Engine activo. Cuando desvinculas tu base de datos, puedes inhabilitar App Engine sin afectar el acceso a ella.

La desvinculación es una operación permanente.

Si desvinculas tu base de datos, no podrás usar la función Disable Writes en la página Datastore Admin. Si las operaciones de escritura están inhabilitadas, la desvinculación de tu base de datos habilitará las operaciones de escritura.

Antes de desvincular tu base de datos de App Engine, asegúrate de habilitar la API de Firestore y actualizar tus permisos de IAM.

Para desvincular tu base de datos, ve a la página Administrador de Datastore y haz clic en Desvincular la base de datos de la app. Es posible que la operación de desvinculación tarde hasta cinco minutos en surtir efecto.

Ir a la página de administración de Datastore

Migra recursos de App Engine de Terraform

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

Para obtener instrucciones generales sobre cómo administrar bases de datos en modo Datastore a través de Terraform, consulta Automatizar la creación de bases de datos.

Crea un recurso google_firestore_database

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

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

Consulta Ubicaciones de Datastore para ver la lista de ubicaciones disponibles. Elige la ubicación que corresponda a la de tu base de datos existente.

Importa la base de datos existente en el modo Datastore

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

A continuación, importa la base de datos existente del modo Datastore 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 deseados. 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, luego, vuelve a ejecutar terraform plan. Los campos que requieran que Terraform reemplace tu base de datos se marcarán con # forces replacement en el resultado del plan.

Cuando estés conforme con el resultado de terraform plan, ejecuta el siguiente comando:

terraform apply

Cómo quitar 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 ahora.

Luego, vuelve a ejecutar lo siguiente:

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)

Una vez que estés conforme con el resultado del plan, ejecuta

terraform apply

Actualmente, Terraform no admite el borrado de recursos de App Engine. Si bien Terraform mostrará que el recurso se destruyó, 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

Anteriormente, todas las bases de datos de Firestore en modo Datastore estaban vinculadas a una app de App Engine. Ahora, las bases de datos en modo Datastore se aprovisionan sin vincularlas a App Engine de forma predeterminada. Además, todas las bases de datos, tanto las existentes como las recién creadas, ahora tienen los siguientes requisitos:

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

    • Crea la base de datos: datastore.databases.create
    • Consulta los metadatos de la base de datos: datastore.databases.getMetadata
    • Editar metadatos de la base de datos: datastore.databases.update

Si no habilitaste la API de Firestore, verás un error en las páginas de Datastore de la consola de Google Cloud que incluye el siguiente aviso:

La API de Firestore es obligatoria para administrar tu base de datos.

Este error también incluye un botón para habilitar la API de Firestore. Haz clic en el botón para habilitar la API.

También debes verificar tus permisos de IAM para asegurarte de que tu acceso a la base de datos no se vea afectado.

Verifica que las cuentas que acceden a la base de datos a través de la Google Cloud consola tengan los permisos necesarios que se mencionaron anteriormente.

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

Si definiste un rol personalizado para Datastore anteriormente, es posible que no tenga el permiso datastore.databases.getMetadata. Para garantizar el acceso continuo, actualiza tus roles personalizados con datastore.databases.getMetadata o usa un rol predefinido.

Habilita la API a través de 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 en el 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]
}