En esta página se describe cómo exportar e importar entidades de Firestore en modo Datastore mediante el servicio de exportación e importación gestionado. El servicio de exportación e importación gestionado está disponible a través de la consola de Google Cloud , la CLI de Google Cloud y la API Admin de Datastore (REST y RPC).
Con el servicio gestionado de exportación e importación, puedes recuperar datos que hayas eliminado accidentalmente y exportar datos para procesarlos sin conexión. Puedes exportar todas las entidades o solo tipos específicos de entidades. Del mismo modo, puedes importar todos los datos de una exportación o solo tipos específicos. Cuando utilices el servicio de importación y exportación gestionado, ten en cuenta lo siguiente:
El servicio de exportación usa lecturas eventualmente coherentes. No puedes dar por hecho que una exportación se produce en un momento concreto. La exportación puede incluir entidades escritas después de que se inicie y excluir entidades escritas antes de que se inicie.
Una exportación no contiene ningún índice. Cuando importa datos, los índices necesarios se vuelven a crear automáticamente con las definiciones de índice actuales de su base de datos. Los ajustes de índice de valor de propiedad por entidad se exportan y se respetan durante la importación.
Las importaciones no asignan IDs nuevos a las entidades. En las importaciones se usan los IDs que existían en el momento de la exportación y se sobrescribe cualquier entidad que tenga el mismo ID. Durante una importación, los IDs se reservan mientras se importan las entidades. Esta función evita que se produzcan colisiones de IDs con entidades nuevas si se habilitan las escrituras mientras se está ejecutando una importación.
Si una entidad de tu base de datos no se ve afectada por una importación, permanecerá en ella después de la importación.
Los datos exportados de una base de datos en modo Datastore se pueden importar a otra base de datos en modo Datastore, incluso a una de otro proyecto.
El servicio de exportación e importación gestionado limita el número de exportaciones e importaciones simultáneas a 50 y permite un máximo de 20 solicitudes de exportación e importación por minuto en un proyecto. En cada solicitud, el servicio limita el número de combinaciones de filtros de entidades a 100.
La salida de una exportación gestionada usa el formato de registro LevelDB.
Para importar solo un subconjunto de entidades o importar datos a BigQuery, debe especificar un filtro de entidades en la exportación.
El nombre de archivo
.overall_export_metadatadebe coincidir con el nombre de su carpeta principal:gs://BUCKET_NAME/OPTIONAL_NAMESPACE_PATH/PARENT_FOLDER_NAME/PARENT_FOLDER_NAME.overall_export_metadataSi mueves o copias los archivos de salida de una exportación, mantén el archivo
PARENT_FOLDER_NAME, el contenido de las subcarpetas y el nombre de archivo.overall_export_metadata.
Antes de empezar
Para poder usar el servicio de exportación e importación gestionado, debes completar las siguientes tareas.
Habilita la facturación de tu Google Cloud proyecto. Solo los Google Cloud proyectos con la facturación habilitada pueden usar las funciones de exportación e importación.
Crea un segmento de Cloud Storage en la misma ubicación que tu base de datos de Firestore en el modo de Datastore. No puedes usar un contenedor de pago por el solicitante para las operaciones de exportación e importación.
Asigna un rol de gestión de identidades y accesos a tu cuenta de usuario que conceda el permiso
datastore.databases.exportsi vas a exportar datos o el permisodatastore.databases.importsi vas a importar datos. ElDatastore Import Export Adminrol, por ejemplo, concede ambos permisos.Si el segmento de Cloud Storage está en otro proyecto, concede acceso al segmento al agente de servicio de Firestore.
Configurar gcloud en tu proyecto
Si tienes previsto usar gcloud para iniciar tus operaciones de importación y exportación, configura gcloud y conéctalo a tu proyecto de una de las siguientes formas:
Accede a
gclouddesde la consola Google Cloud con Cloud Shell.Configura la CLI de gcloud para que use tu proyecto actual:
gcloud config set project project-id
Permisos
Para ejecutar operaciones de exportación e importación, tu cuenta de usuario y el agente de servicio del modo Datastore de tu proyecto requieren los siguientes permisos de gestión de identidades y accesos.
Permisos de cuenta de usuario
La cuenta de usuario o de servicio que inicia la operación requiere los permisos de IAM datastore.databases.export y datastore.databases.import. Si eres el propietario del proyecto, tu cuenta tiene los permisos necesarios. De lo contrario, los siguientes roles de gestión de identidades y accesos conceden los permisos necesarios:
- Propietario de Datastore
- Administrador de importaciones y exportaciones de Datastore
También puedes asignar estos permisos con un rol personalizado.
El propietario de un proyecto puede conceder uno de estos roles siguiendo los pasos que se indican en Conceder acceso.
Permisos de agente de servicio
Las operaciones de exportación e importación usan un agente de servicio de Firestore para autorizar las operaciones de Cloud Storage. El agente de servicio de Firestore usa la siguiente convención de nomenclatura:
- Agente de servicio de Firestore
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com
Para obtener más información sobre los agentes de servicio, consulta el artículo Agentes de servicio.
El agente de servicio de Firestore necesita acceder al segmento de Cloud Storage que se usa en una operación de exportación o importación. Si tu segmento de Cloud Storage está en el mismo proyecto que tu base de datos de Firestore, el agente de servicio de Firestore podrá acceder al segmento de forma predeterminada.
Si el segmento de Cloud Storage está en otro proyecto, debes dar acceso al agente de servicio de Firestore al segmento de Cloud Storage.
Asignar roles al agente de servicio
Puede usar la herramienta de línea de comandos gsutil para asignar uno de los roles que se indican a continuación. Por ejemplo, para asignar el rol Administrador de almacenamiento al agente de servicio de Firestore, ejecuta lo siguiente:
gsutil iam ch serviceAccount:service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com:roles/storage.admin \ gs://[BUCKET_NAME]
Sustituye PROJECT_NUMBER por el número de tu proyecto, que se usa para asignar un nombre al agente de servicio de Firestore. Para ver el nombre del agente de servicio, consulta Ver el nombre del agente de servicio.
También puedes asignar este rol mediante la Google Cloud consola.
Ver el nombre del agente de servicio
Puede ver la cuenta que usan sus operaciones de importación y exportación para autorizar solicitudes en la página Importar/Exportar de la consola de Google Cloud . También puedes ver si tu base de datos usa el agente de servicio de Firestore o la cuenta de servicio antigua de App Engine.
-
En la Google Cloud consola, ve a la página Bases de datos.
-
Seleccione la base de datos que necesite de la lista de bases de datos.
-
En el menú de navegación, haga clic en Importar/Exportar.
- Consulta la cuenta de autorización junto a la etiqueta Las tareas de importación o exportación se ejecutan como.
Operaciones de exportación
En el caso de las operaciones de exportación que impliquen un segmento de otro proyecto, modifique los permisos del segmento para asignar uno de los siguientes roles de gestión de identidades y accesos al agente de servicio del modo Datastore del proyecto que contenga su base de datos en modo Datastore:
- Administrador de Storage
- Propietario (rol básico)
También puedes crear un rol personalizado de gestión de identidades y accesos con permisos ligeramente diferentes a los que contienen los roles indicados anteriormente:
storage.buckets.getstorage.objects.createstorage.objects.deletestorage.objects.list
Operaciones de importación
En las operaciones de importación que impliquen un segmento de Cloud Storage de otro proyecto, modifica los permisos del segmento para asignar uno de los siguientes roles de Cloud Storage al agente de servicio del modo Datastore del proyecto que contenga tu base de datos en modo Datastore:
- Administrador de Storage
- Lector de objetos de Storage y Lector de segmentos heredados de Storage
También puedes crear un rol personalizado de gestión de identidades y accesos con los siguientes permisos:
storage.buckets.getstorage.objects.get
Iniciar operaciones de importación y exportación gestionadas
En esta sección se describe cómo iniciar una operación de exportación o importación gestionada.
Exportar todas las entidades
Consola
En la Google Cloud consola, ve a la página Bases de datos.
Seleccione la base de datos que necesite de la lista de bases de datos.
- En el menú de navegación, haga clic en Importar/Exportar.
- Haz clic en Exportar.
- En el campo Espacio de nombres, introduzca
All Namespaces. En el campo Tipo, introduzcaAll Kinds. - En Destino, introduce el nombre de tu segmento de Cloud Storage.
- Haz clic en Exportar.
La consola vuelve a la página Importar/Exportar. Una alerta informa si la solicitud de exportación gestionada se ha completado correctamente o no.
gcloud
Usa el comando gcloud firestore export
para exportar todas las entidades de tu base de datos.
gcloud firestore export gs://bucket-name --async --database=DATABASE
donde bucket-name es el nombre de tu segmento de Cloud Storage y un prefijo opcional, por ejemplo, bucket-name/datastore-exports/export-name. No puedes volver a usar el mismo prefijo para otra operación de exportación. Si no proporcionas un prefijo de archivo, el servicio de exportación gestionado creará uno en función de la hora actual.
Usa la marca --async para evitar que gcloud espere a que se complete la operación. Si omite la marca --async, puede escribir
Ctrl+c para dejar de esperar una operación. Esta acción no cancelará la operación.
Asigna a la marca --database el nombre de la base de datos de la que quieras exportar las entidades. Para la base de datos predeterminada, usa --database='(default)'.
rest
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- project-id: tu ID de proyecto
- bucket-name: nombre del segmento de Cloud Storage
Método HTTP y URL:
POST https://datastore.googleapis.com/v1/projects/project-id:export
Cuerpo JSON de la solicitud:
{
"outputUrlPrefix": "gs://bucket-name",
}
Para enviar tu solicitud, despliega una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
{
"name": "projects/project-id/operations/operation-id",
"metadata": {
"@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata",
"common": {
"startTime": "2019-09-18T18:42:26.591949Z",
"operationType": "EXPORT_ENTITIES",
"state": "PROCESSING"
},
"entityFilter": {},
"outputUrlPrefix": "gs://bucket-name/2019-09-18T18:42:26_85726"
}
}
Exportar tipos o espacios de nombres específicos
Para exportar un subconjunto específico de tipos o espacios de nombres, proporcione un filtro de entidades con valores para los tipos y los IDs de espacio de nombres. Cada solicitud está limitada a 100 combinaciones de filtros de entidades, donde cada combinación de tipo y espacio de nombres filtrados cuenta como un filtro independiente para alcanzar este límite.
Consola
En la consola, puedes seleccionar todos los tipos o uno específico. Del mismo modo, puedes seleccionar todos los espacios de nombres o uno específico.
Para especificar una lista de espacios de nombres y tipos que se van a exportar, usa gcloud.
En la Google Cloud consola, ve a la página Bases de datos.
Seleccione la base de datos que necesite de la lista de bases de datos.
En el menú de navegación, haga clic en Importar/Exportar.
Haz clic en Exportar.
En el campo Namespace (Espacio de nombres), selecciona
All Namespaceso el nombre de uno de tus espacios de nombres.Asigne el valor
All Kindso el nombre de un tipo al campo Tipo.En Destino, introduce el nombre de tu segmento de Cloud Storage.
Haz clic en Exportar.
La consola vuelve a la página Importar/Exportar. Una alerta informa si la solicitud de exportación gestionada se ha completado correctamente o no.
gcloud
gcloud firestore export --collection-ids="KIND1,KIND2" \ --namespaces="(default),NAMESPACE2" \ gs://bucket-name \ --async \ --database=DATABASE
donde bucket-name es el nombre de tu segmento de Cloud Storage y un prefijo opcional, por ejemplo, bucket-name/datastore-exports/export-name. No puedes volver a usar el mismo prefijo para otra operación de exportación. Si no proporcionas un prefijo de archivo, el servicio de exportación gestionado creará uno en función de la hora actual.
Usa la marca --async para evitar que gcloud espere a que se complete la operación. Si omite la marca --async, puede escribir
Ctrl+c para dejar de esperar una operación. Esta acción no cancelará la operación.
Asigna el nombre de la base de datos de la que quieras exportar tipos o espacios de nombres específicos a la marca --database. Para la base de datos predeterminada, usa --database='(default)'.
rest
Antes de usar los datos de la solicitud, haz las siguientes sustituciones: