Requisito de App Engine
Antes, todas las bases de datos de Firestore estaban vinculadas a una aplicación de App Engine. Cuando se vincula una base de datos, esta requiere una aplicación de App Engine activa en el mismo proyecto. Si la aplicación de App Engine no está activa, se inhabilitará el acceso de lectura y escritura a la base de datos.
Ahora, las bases de datos de Firestore se aprovisionan sin vincular a App Engine de forma predeterminada.
Si tu base de datos está vinculada a App Engine, puedes desvincularla.
App Engine activo
Una aplicación de App Engine activa significa que hay una aplicación en el mismo proyecto y que no está inhabilitada. No es necesario que la aplicación tenga ningún uso. La aplicación y la base de datos vinculadas deben estar en la misma región.
Si inhabilitas tu aplicación de App Engine, también inhabilitarás el acceso a la base de datos de Firestore vinculada a esa aplicación.
Ver el estado de vinculación de App Engine
Puedes comprobar el estado de desvinculación de App Engine mediante la API 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, busca el valor de appEngineIntegrationMode
. Si el valor es DISABLED
, tu base de datos no está vinculada a ninguna aplicación de App Engine.
Desvincular tu base de datos de App Engine
Si inhabilitas una aplicación de App Engine vinculada, también inhabilitarás el acceso de lectura y escritura a tu base de datos. Si esto ocurre, la página Datos de Firestore de la consola deGoogle Cloud te ofrece la opción de desvincular tu base de datos de la aplicación de App Engine. Haz clic en Desvincular base de datos para iniciar el proceso.También puedes desvincular tu base de datos mediante la API 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 que esto afecte al 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.
Migrar recursos de App Engine de Terraform
Si antes gestionabas bases de datos de Firestore mediante el recurso de Terraform google_app_engine_application
, ahora puedes usar el recurso de Terraform google_firestore_database
.
Para obtener instrucciones generales sobre cómo gestionar bases de datos de Firestore a través de Terraform, consulta Automatizar 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
:
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 la lista de ubicaciones disponibles en Ubicaciones de Firestore. Elige la ubicación correspondiente a la de tu base de datos.
Importar la base de datos de Firestore
Primero, comprueba que la API de Firestore esté habilitada.
A continuación, importa la base de datos de Firestore a tu estado de Terraform:
terraform import google_firestore_database.database "(default)"
A continuación, ejecuta lo siguiente:
terraform plan
Inspecciona el resultado para asegurarte de que la importación se ha completado correctamente. Si la salida muestra algún campo que cambia, asegúrate de que esos cambios son intencionados. Si el resultado incluye una línea similar a la siguiente:
google_firestore_database.database must be replaced
A continuación, inspecciona el archivo de configuración de Terraform para ver si hay algún error, sobre todo en los campos project, location o name, y vuelve a ejecutar terraform plan
. Los campos que requieran que Terraform sustituya tu base de datos se marcarán con # forces replacement
en el resultado del plan.
Cuando estés conforme con el resultado del plan de Terraform, ejecuta lo siguiente:
terraform apply
Eliminar el recurso google_app_engine_application
Si tienes un recurso google_app_engine_application
en tu archivo de configuración de Terraform, quítalo ahora.
Después, vuelve a ejecutar lo siguiente:
terraform plan
Debería aparecer lo 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 se ha destruido, no eliminará la aplicación de App Engine. Sin embargo, Terraform ya no gestionará 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. Ahora, las bases de datos de Firestore se aprovisionan sin vincular a App Engine de forma predeterminada. Además, todas las bases de datos, tanto las que ya existían como las que se han creado recientemente, deben cumplir los siguientes requisitos:
- Para gestionar tu base de datos desde la Google Cloud consola y la CLI de gcloud, la API de Firestore debe estar habilitada en el proyecto. Esto es obligatorio tanto para las bases de datos de Firestore en modo nativo como para las de Firestore en modo Datastore.
Cuando se ejecuten desde la Google Cloud consola o la CLI de gcloud, las operaciones administrativas que se indican a continuación requerirán los siguientes permisos de gestión de identidades y accesos:
- Crear base de datos:
datastore.databases.create
- Ver los metadatos de la base de datos:
datastore.databases.getMetadata
- Editar metadatos de la base de datos:
datastore.databases.update
- Crear base de datos:
Los roles predefinidos, como Usuario de Datastore y Lector de Datastore, incluyen los permisos necesarios. Si has creado roles de gestión de identidades y accesos personalizados, es posible que tengas que actualizarlos para que incluyan los permisos anteriores.
Si has definido un rol personalizado para Datastore, es posible que no tenga el permiso datastore.databases.getMetadata
. Para mantener el acceso, actualiza tus roles personalizados con datastore.databases.getMetadata
o usa un rol predefinido.
Habilitar la API mediante Terraform
Si quieres, también puedes habilitar la API de Firestore mediante Terraform:
resource "google_project_service" "firestore" { project = "project" service = "firestore.googleapis.com" }
Si tienes un recurso google_firestore_database
, puedes añadir 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] }