Requisitos de App Engine
Anteriormente, todas las bases de datos de Firestore se vinculaban a una app de App Engine. Cuando se vinculaban, la base de datos requería una app 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.
Las bases de datos de Firestore ahora se aprovisionan sin vincularse a App Engine de forma predeterminada.
Si tu base de datos está vinculada a un 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 app de App Engine, también inhabilitas el acceso a la base de datos de Firestore vinculada a esa app.
Consulta el estado de la vinculación de App Engine
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 app de App Engine.
Desvincula tu base de datos de App Engine
Si inhabilitas una app 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 para desvincular tu base de datos de la app de App Engine. Haz clic en Desvincular base de datos para comenzar el proceso.También puedes desvincular tu 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.
Cómo migrar recursos de App Engine de Terraform
Si anteriormente 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.
Para obtener instrucciones generales sobre cómo administrar bases de datos de Firestore a través de Terraform, consulta Cómo automatizar la creación de bases de datos.
Crea un recurso google_firestore_database
En tu archivo de configuración de Terraform, crea un nuevo
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 Ubicaciones de Firestore 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 de Firestore existente
Primero, asegúrate de que la API de Firestore esté habilitada.
A continuación, importa la base de datos de Firestore existente 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 que se están cambiando campos, 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 el archivo de configuración de Terraform para ver si hay algún
error, en particular en los campos project, location o
name, y 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.
Una vez que estés conforme con el resultado del plan de Terraform, ejecuta lo siguiente:
terraform apply
Se quitó 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 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 la eliminación de recursos de App Engine. Aunque Terraform mostrará que el recurso se destruirá, 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 estaban vinculadas a una app de App Engine. Ahora, las bases de datos de Firestore se aprovisionan sin vincularse a App Engine de forma predeterminada. Además, todas las bases de datos, tanto las existentes como las creadas recientemente, 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 las bases de datos de Firestore en modo nativo y de Firestore en modo Datastore.
Cuando se ejecuten desde la consola de Google Cloud o gcloud CLI, las siguientes operaciones administrativas requerirán los siguientes permisos de IAM:
- Crear base de datos:
datastore.databases.create
- Consulta los metadatos de la base de datos:
datastore.databases.getMetadata
- Edita los metadatos de la base de datos:
datastore.databases.update
- Crear base de datos:
Los roles predefinidos, como Usuario de Datastore y Visualizador de Datastore, incluyen los permisos necesarios. Si creaste roles de IAM personalizados, es posible que debas actualizarlos para que incluyan los permisos anteriores.
Si definiste un rol personalizado para Datastore con anterioridad, 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] }