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 por accidente y exportarlos 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 compilar 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_metadata
debe coincidir con el nombre de su carpeta principal:gs://BUCKET_NAME/OPTIONAL_NAMESPACE_PATH/PARENT_FOLDER_NAME/PARENT_FOLDER_NAME.overall_export_metadata
Si mueves o copias los archivos de salida de una exportación, mantén el nombre de 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 proyectos con la facturación habilitada pueden usar las funciones de exportación e importación. Google Cloud
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.export
si vas a exportar datos o el permisodatastore.databases.import
si vas a importar datos. ElDatastore Import Export Admin
rol, 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
gcloud
desde 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 asignar 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 acceso 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 puede 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, modifica 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 tu 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.get
storage.objects.create
storage.objects.delete
storage.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.get
storage.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 del 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
][async-flag] 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, puede 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 Namespaces
o el nombre de uno de tus espacios de nombres.Asigne el valor
All Kinds
o el nombre de un tipo al campo Tipo.En Destino, introduce el nombre del 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
][async-flag] 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 valor --database
al nombre de la base de datos de la que quieras exportar tipos o espacios de nombres específicos. 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
- kind: el tipo de entidad
- namespace: el ID del espacio de nombres (usa "" para el ID del espacio de nombres predeterminado)
Método HTTP y URL:
POST https://datastore.googleapis.com/v1/projects/project-id:export
Cuerpo JSON de la solicitud:
{ "outputUrlPrefix": "gs://bucket-name", "entityFilter": { "kinds": ["kind"], "namespaceIds": ["namespace"], }, }
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-18T21:17:36.232704Z", "operationType": "EXPORT_ENTITIES", "state": "PROCESSING" }, "entityFilter": { "kinds": [ "Task" ], "namespaceIds": [ "" ] }, "outputUrlPrefix": "gs://bucket-name/2019-09-18T21:17:36_82974" } }
Archivos de metadatos
Una operación de exportación crea un archivo de metadatos para cada par de espacio de nombres y tipo especificado. Los archivos de metadatos suelen llamarse
NAMESPACE_NAME_KIND_NAME.export_metadata
. Sin embargo, si un espacio de nombres o un tipo
crearan un nombre de objeto de Cloud Storage no válido, el archivo se llamará
export[NUM].export_metadata
.
Los archivos de metadatos son búferes de protocolo y se pueden decodificar con el protoc
compilador de protocolos.
Por ejemplo, puedes decodificar un archivo de metadatos para determinar el espacio de nombres y los tipos que contienen los archivos de exportación:
protoc --decode_raw < export0.export_metadata
Importar 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 Importar.
En el campo
File
, haz clic en Examinar y selecciona un archivo.overall_export_metadata
.Asegúrate de que el archivo
.overall_export_metadata
no se mueva de la ubicación predeterminada.En el campo Espacio de nombres, introduzca
All Namespaces
. En el campo Tipo, introduzcaAll Kinds
.Haz clic en Importar.
La consola vuelve a la página Importar/Exportar. Una alerta informa si la solicitud de importación gestionada se ha completado correctamente o no.
gcloud
Usa el comando gcloud firestore import para importar todas las entidades que se hayan exportado anteriormente con el servicio de exportación gestionado.
gcloud firestore import gs://bucket-name/file-path/file-name.overall_export_metadata \ --async \ --database=DATABASE
donde bucket-name/file-path/file-name es la ruta a tu archivo overall_export_metadata
en tu segmento de Cloud Storage.
Usa la marca [--async
][async-flag] 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 a la marca --database
en la que quieras importar todas 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
- object-name: el nombre del objeto de Cloud Storage (por ejemplo,
2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata
Método HTTP y URL:
POST https://datastore.googleapis.com/v1/projects/project-id:import
Cuerpo JSON de la solicitud:
{ "inputUrl": "gs://bucket-name/object-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.ImportEntitiesMetadata", "common": { "startTime": "2019-09-18T21:25:02.863621Z", "operationType": "IMPORT_ENTITIES", "state": "PROCESSING" }, "entityFilter": {}, "inputUrl": "gs://bucket-name/2019-09-18T18:42:26_85726/2019-09-18T18:42:26_85726.overall_export_metadata" } }
Localizar el archivo overall_export_metadata
Para determinar el valor que se debe usar en la ubicación de importación, utiliza el navegador de Cloud Storage en la Google Cloud consola:
Abrir el navegador de Cloud Storage
También puedes listar y describir operaciones completadas. En el campo outputURL
se muestra el nombre del archivo overall_export_metadata
:
"outputUrl": "gs://bucket-name/2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata",
Importar tipos o espacios de nombres específicos
Para importar 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.
Solo puedes especificar tipos y espacios de nombres si los archivos de exportación se han creado con un filtro de entidades. No puedes importar un subconjunto de tipos y espacios de nombres desde una exportación de todas las entidades.
Consola
En la consola, puede 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 importar, 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 Importar.
En el campo
File
, haz clic en Examinar y selecciona un archivo.overall_export_metadata
.Asegúrate de importar el archivo
.overall_export_metadata
y no el archivo.export_metadata
.Asigne el valor
All Namespaces
al campo Espacio de nombres o elija un espacio de nombres específico.Asigne el valor
All Kinds
al campo Kind o un valor específico.Haz clic en Importar.
La consola vuelve a la página Importar/Exportar. Una alerta informa si la solicitud de importación gestionada se ha completado correctamente o no.
gcloud
gcloud firestore import --collection-ids="KIND1,KIND2" \ --namespaces="(default),NAMESPACE2" \ gs://bucket-name/file-path/file-nameoverall_export_metadata \ --async \ --database=DATABASE
donde bucket-name/file-path/file-name es la ruta a tu archivo overall_export_metadata
en tu segmento de Cloud Storage.
Usa la marca [--async
][async-flag] 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 a la marca --database
en la que quieras importar los tipos o espacios de nombres específicos. 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
- object-name: el nombre del objeto de Cloud Storage (por ejemplo,
2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata
- kind: el tipo de entidad
- namespace: el ID del espacio de nombres (usa "" para el ID del espacio de nombres predeterminado)
Método HTTP y URL:
POST https://datastore.googleapis.com/v1/projects/project-id:import
Cuerpo JSON de la solicitud:
{ "inputUrl": "gs://bucket-name/object-name", "entityFilter": { "kinds": ["kind"], "namespaceIds": ["namespace"], }, }
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.ImportEntitiesMetadata", "common": { "startTime": "2019-09-18T21:51:02.830608Z", "operationType": "IMPORT_ENTITIES", "state": "PROCESSING" }, "entityFilter": { "kinds": [ "Task" ], "namespaceIds": [ "" ] }, "inputUrl": "gs://bucket-name/2019-09-18T21:49:25_96833/2019-09-18T21:49:25_96833.overall_export_metadata" } }
Exportar e importar datos de PITR
Puedes exportar tu base de datos a Cloud Storage desde [datos de PITR][pitr].
Puede exportar datos de PITR cuya marca de tiempo sea una marca de tiempo de un minuto completo de los últimos siete días, pero no anterior al earliestVersionTime
. Si los datos ya no existen en la marca de tiempo especificada, la operación de exportación fallará.
La operación de exportación de PITR admite todos los filtros, incluida la exportación de todos los documentos y de colecciones específicas.
Ten en cuenta los siguientes puntos antes de exportar datos de PITR:
- Especifica la marca de tiempo en formato RFC 3339. Por ejemplo,
2023-05-26T10:20:00.00Z
. - Asegúrate de que la marca de tiempo que especifiques sea una marca de tiempo de un minuto completo
de los últimos siete días, pero no anterior a la
earliestVersionTime
. Si los datos ya no existen en la marca de tiempo especificada, se genera un error. - No se te cobrará por una exportación de PITR fallida.
Consola
-
En la Google Cloud consola, ve a la página Bases de datos.
Ir a Bases de datos - Selecciona una base de datos de la lista.
- En el menú de navegación, haga clic en Importar/Exportar.
- Haz clic en Exportar.
- Elige un espacio de nombres para exportarlo
- Selecciona los tipos que quieras exportar.
En la sección Elige el estado de la base de datos que quieres exportar, selecciona Exportar desde un momento anterior.
Selecciona la hora de la captura que quieras usar para la exportación
- En la sección Destino, introduce el nombre de un segmento de Cloud Storage o usa el botón Buscar para seleccionar un segmento.
-
Haz clic en Exportar.
La consola vuelve a la página Importar/Exportar. Si la operación se inicia correctamente, la página añade una entrada a la página de importaciones y exportaciones recientes. Si se produce un error, la página muestra un mensaje de error.
gcloud
Puedes exportar tu base de datos a Cloud Storage desde datos de PITR mediante el comando gcloud firestore export
.
La operación de exportación de PITR admite todos los filtros, incluida la exportación de todas las entidades y la exportación de tipos o espacios de nombres específicos.
Exporta la base de datos y especifica el parámetro snapshot-time
con una marca de tiempo de recuperación. Ejecuta el siguiente comando para exportar la base de datos a tu contenedor.
gcloud firestore export gs://[BUCKET_NAME_PATH] \ --snapshot-time=[PITR_TIMESTAMP] \ --collection-ids=[COLLECTION_IDS] \ --namespace-ids=[NAMESPACE_IDS]
Donde PITR_TIMESTAMP
es una marca de tiempo de PITR con una granularidad de minutos, por ejemplo, 2023-05-26T10:20:00.00Z
.
Importar transformaciones
Cuando importes entidades de otro proyecto, ten en cuenta que las claves de entidad incluyen el ID del proyecto. Una operación de importación actualiza las claves de entidad y las propiedades de referencia de clave de los datos de importación con el ID del proyecto de destino. Si esta actualización aumenta el tamaño de las entidades, puede provocar errores de tipo "entidad demasiado grande" o "entradas de índice demasiado grandes" en las operaciones de importación.
Para evitar cualquiera de estos errores, importa el proyecto a un proyecto de destino con un ID más corto. Esto no afecta a las operaciones de importación con datos del mismo proyecto.
Gestionar operaciones de larga duración
Las operaciones de importación y exportación gestionadas son operaciones de larga duración. Estas llamadas de método pueden tardar bastante en completarse.
Después de iniciar una operación de exportación o importación, el modo Datastore asigna un nombre único a la operación. Puedes usar el nombre de la operación para eliminarla, cancelarla o comprobar su estado.
Los nombres de las operaciones van precedidos de projects/[PROJECT_ID]/databases/(default)/operations/
, por ejemplo:
projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
Puede omitir el prefijo al especificar un nombre de operación para los comandos gcloud
.
Mostrar todas las operaciones de larga duración
Puedes ver las operaciones en curso y las que se han completado recientemente de las siguientes formas. Las operaciones se muestran durante unos días después de completarse:
Consola
Puedes ver una lista de las operaciones de larga duración en la página Importar/Exportar de la consola de Google Cloud .
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.
gcloud
Para enumerar las operaciones de larga duración, usa el comando gcloud datastore operations list.
gcloud datastore operations list
Por ejemplo, una operación de exportación completada recientemente muestra la siguiente información:
{ "operations": [ { "name": "projects/project-id/operations/ASAyMDAwOTEzBxp0bHVhZmVkBxJsYXJ0bmVjc3Utc2Jvai1uaW1kYRQKKhI", "metadata": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata", "common": { "startTime": "2017-12-05T23:01:39.583780Z", "endTime": "2017-12-05T23:54:58.474750Z", "operationType": "EXPORT_ENTITIES" }, "progressEntities": { "workCompleted": "21933027", "workEstimated": "21898182" }, "progressBytes": { "workCompleted": "12421451292", "workEstimated": "9759724245" }, "entityFilter": { "namespaceIds": [ "" ] }, "outputUrlPrefix": "gs://bucket-name" }, "done": true, "response": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesResponse", "outputUrl": "gs://bucket-name/2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata" } } ] }
rest
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- project-id: tu ID de proyecto
Método HTTP y URL:
GET https://datastore.googleapis.com/v1/projects/project-id/operations
Para enviar tu solicitud, despliega una de estas opciones:
Consulta la información sobre la respuesta a continuación.
Por ejemplo, una operación de exportación completada recientemente muestra la siguiente información:
{ "operations": [ { "name": "projects/project-id/operations/ASAyMDAwOTEzBxp0bHVhZmVkBxJsYXJ0bmVjc3Utc2Jvai1uaW1kYRQKKhI", "metadata": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata", "common": { "startTime": "2017-12-05T23:01:39.583780Z", "endTime": "2017-12-05T23:54:58.474750Z", "operationType": "EXPORT_ENTITIES" }, "progressEntities": { "workCompleted": "21933027", "workEstimated": "21898182" }, "progressBytes": { "workCompleted": "12421451292", "workEstimated": "9759724245" }, "entityFilter": { "namespaceIds": [ "" ] }, "outputUrlPrefix": "gs://bucket-name" }, "done": true, "response": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesResponse", "outputUrl": "gs://bucket-name/2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata" } } ] }
Comprobar el estado de la operación
Para ver el estado de una operación de larga duración, sigue estos pasos:
Consola
Puedes ver una lista de las operaciones de importación y exportación más recientes en la página Importar/Exportar de la consola de Google Cloud .
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.
gcloud
Usa el comando operations describe
para mostrar el estado de una operación de larga duración.
gcloud datastore operations describe operation-name
rest
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- project-id: tu ID de proyecto
- operation-name: el nombre de la operación
Método HTTP y URL:
GET https://datastore.googleapis.com/v1/projects/project-id/operations/operation-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/ASA3ODAwMzQxNjIyChp0bHVhZmVkBxJsYXJ0bmVjc3Utc2Jvai1uaW1kYRQKLRI", "metadata": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata", "common": { "startTime": "2019-10-08T20:07:28.105236Z", "endTime": "2019-10-08T20:07:36.310653Z", "operationType": "EXPORT_ENTITIES", "state": "SUCCESSFUL" }, "progressEntities": { "workCompleted": "21", "workEstimated": "21" }, "progressBytes": { "workCompleted": "2272", "workEstimated": "2065" }, "entityFilter": {}, "outputUrlPrefix": "gs://bucket-name/2019-10-08T20:07:28_28481" }, "done": true, "response": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesResponse", "outputUrl": "gs://bucket-name/2019-10-08T20:07:28_28481/2019-10-08T20:07:28_28481.overall_export_metadata" } }
Estimar el tiempo de finalización
Mientras se ejecuta la operación, consulta el valor del campo state
para ver el estado general de la operación.
Una solicitud del estado de una operación de larga duración devuelve las métricas workEstimated
y workCompleted
. Cada una de estas métricas se devuelve tanto en número de bytes como en número de entidades:
workEstimated
muestra el número total estimado de bytes y documentos que procesará una operación. El modo Datastore puede omitir esta métrica si no puede hacer una estimación.workCompleted
muestra el número de bytes y documentos procesados hasta el momento. Una vez completada la operación, el valor muestra el número total de bytes y documentos que se han procesado, que puede ser superior al valor deworkEstimated
.
Divide workCompleted
entre workEstimated
para obtener una estimación aproximada del progreso. Esta estimación puede ser imprecisa, ya que depende de la recogida de estadísticas con retraso.
Por ejemplo, este es el estado de una operación de exportación:
{ "operations": [ { "name": "projects/project-id/operations/ASAyMDAwOTEzBxp0bHVhZmVkBxJsYXJ0bmVjc3Utc2Jvai1uaW1kYRQKKhI", "metadata": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata", ... "progressEntities": { "workCompleted": "1", "workEstimated": "3" }, "progressBytes": { "workCompleted": "85", "workEstimated": "257" }, ...
Cuando se completa una operación, la descripción de la operación contiene "done":
true
. Consulta el valor del campo state
para ver el resultado de la operación. Si el campo done
no se define en la respuesta, su valor será false
. No dependas de la existencia del valor done
para las operaciones en curso.
Cancelar una operación
Consola
Puedes cancelar una operación de importación o exportación en curso en la página Importar/Exportar de la Google Cloud 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.
En la tabla Importaciones y exportaciones recientes, las operaciones en curso incluyen un botón Cancelar en la columna Completado. Haz clic en el botón Cancelar para detener la operación. El botón cambia a Cancelando y, a continuación, a Cancelado cuando la operación se detiene por completo.
gcloud
Usa el comando operations cancel
para detener una operación en curso:
gcloud datastore operations cancel operation-name
Si cancelas una operación en curso, no se deshace la operación. Si cancelas una operación de exportación, los documentos que ya se hayan exportado permanecerán en Cloud Storage. Si cancelas una operación de importación, los cambios que ya se hayan realizado en tu base de datos se mantendrán. No puedes importar una exportación que no se haya completado.
Eliminar una operación
gcloud
Usa el comando operations delete
para quitar una operación de la lista de operaciones recientes. Este comando no eliminará los archivos de exportación de Cloud Storage.
gcloud datastore operations delete operation-name
Facturación y precios de las exportaciones e importaciones gestionadas
Para usar el servicio de exportación e importación gestionado, debes habilitar la facturación en tu proyecto de Google Cloud . Las operaciones de importación y exportación contribuyen a tus costes de Google Cloud de las siguientes formas:
- Las lecturas y escrituras de entidades realizadas por las operaciones de exportación e importación se tienen en cuenta en los costes de Firestore en el modo de Datastore. Las operaciones de exportación conllevan una operación de lectura por cada entidad exportada. Las operaciones de importación conllevan una operación de escritura por cada entidad importada.
- Los archivos de salida almacenados en Cloud Storage se tienen en cuenta para los costes de almacenamiento de datos de Cloud Storage.
Las operaciones de exportación o importación no activarán ninguna alerta de Google Cloud presupuesto hasta que se completen. Del mismo modo, las lecturas y escrituras que se realicen durante una operación de exportación o importación se aplican a tu cuota diaria una vez que se haya completado la operación.
Ver los costes de exportación e importación
Las operaciones de exportación e importación aplican la etiqueta goog-firestoremanaged:exportimport
a las operaciones facturadas. En la página Informes de Facturación de Cloud, puede usar esta etiqueta para ver los costes relacionados con las operaciones de importación y exportación:
Diferencias con las copias de seguridad de Datastore Admin
Si antes usabas la consola de administración de Datastore para crear copias de seguridad, debes tener en cuenta las siguientes diferencias:
Las exportaciones creadas por una exportación gestionada no aparecen en la consola de administración de Datastore. Las exportaciones e importaciones gestionadas son un nuevo servicio que no comparte datos con la función de copia de seguridad y restauración de App Engine, que se administra a través de la consola de Google Cloud .
El servicio de exportación e importación gestionado no admite los mismos metadatos que la copia de seguridad de administrador de Datastore y no almacena el estado del progreso en tu base de datos. Para obtener información sobre cómo comprobar el progreso de las operaciones de exportación e importación, consulta Gestionar operaciones de larga duración.
No puedes ver los registros de servicio de las operaciones de exportación e importación gestionadas.
El servicio de importación gestionado es compatible con versiones anteriores de los archivos de copia de seguridad de Datastore Admin. Puedes importar un archivo de copia de seguridad de Datastore Admin mediante el servicio de importación gestionado, pero no puedes importar la salida de una exportación gestionada mediante la consola de Datastore Admin.
Importar a BigQuery
Para importar datos de una exportación gestionada a BigQuery, consulta Cargar datos del servicio de exportación de Datastore.
Los datos exportados sin especificar un filtro de entidad no se pueden cargar en BigQuery. Si quiere importar datos en BigQuery, su solicitud de exportación debe incluir uno o varios nombres de tipo en el filtro de entidades.
Límite de columnas de BigQuery
BigQuery impone un límite de 10.000 columnas por tabla. Las operaciones de exportación generan un esquema de tabla de BigQuery para cada tipo. En este esquema, cada propiedad única de las entidades de un tipo se convierte en una columna del esquema.
Si el esquema de BigQuery de un tipo supera las 10.000 columnas, la operación de exportación intentará no superar el límite de columnas tratando las entidades insertadas como blobs. Si esta conversión hace que el número de columnas del esquema sea inferior a 10.000, puede cargar los datos en BigQuery, pero no puede consultar las propiedades de las entidades insertadas. Si el número de columnas sigue siendo superior a 10.000, la operación de exportación no generará un esquema de BigQuery para el tipo y no podrá cargar sus datos en BigQuery.
Migración de agentes de servicio
Firestore usa un agente de servicio de Firestore para autorizar las operaciones de importación y exportación en lugar de usar la cuenta de servicio de App Engine. El agente de servicio y la cuenta de servicio usan las siguientes convenciones de nomenclatura:
- Agente de servicio de Firestore
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com
Anteriormente, Firestore usaba la cuenta de servicio predeterminada de App Engine en lugar del agente de servicio de Firestore. Si tu base de datos sigue usando la cuenta de servicio de App Engine para importar o exportar datos, te recomendamos que sigas las instrucciones de esta sección para migrar al agente de servicio de Firestore.
- Cuenta de servicio de App Engine
PROJECT_ID@appspot.gserviceaccount.com
Es preferible usar el agente de servicio de Firestore porque es específico de Firestore. La cuenta de servicio de App Engine se comparte entre varios servicios.
Ver cuenta de autorización
Puede ver qué cuenta 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 ya usa el agente de servicio de Firestore.
-
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.
Si tu proyecto no usa el agente de servicio de Firestore, puedes migrar a él con cualquiera de estas técnicas:
- Migra un proyecto comprobando y actualizando los permisos de los segmentos de Cloud Storage (opción recomendada).
- Añade una restricción de política de toda la organización que afecte a todos los proyectos de la organización.
Es preferible usar la primera técnica porque localiza el ámbito del efecto en un solo proyecto en modo Datastore. No se recomienda usar la segunda técnica porque no migra los permisos de los segmentos de Cloud Storage. Sin embargo, sí ofrece cumplimiento de seguridad a nivel de organización.
Migrar comprobando y actualizando los permisos de los segmentos de Cloud Storage
El proceso de migración consta de dos pasos:
- Actualiza los permisos de los segmentos de Cloud Storage. En la siguiente sección encontrarás más información al respecto.
- Confirma la migración al agente de servicio de Firestore.
Permisos de segmento del agente de servicio
En las operaciones de importación o exportación que usen un segmento de Cloud Storage de otro proyecto, debes conceder permisos al agente de servicio de Firestore para ese segmento. Por ejemplo, las operaciones que mueven datos a otro proyecto necesitan acceder a un segmento de ese otro proyecto. De lo contrario, estas operaciones fallarán después de migrar al agente de servicio de Firestore.
Los flujos de trabajo de importación y exportación que se mantienen en el mismo proyecto no requieren cambios en los permisos. El agente de servicio de Firestore puede acceder a los segmentos del mismo proyecto de forma predeterminada.
Actualiza los permisos de los segmentos de Cloud Storage de otros proyectos para dar acceso al service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com
agente de servicio. Asigna el rol Firestore Service Agent
al agente de servicio.
El rol Firestore Service Agent
concede permisos de lectura y escritura para un segmento de Cloud Storage. Si solo necesitas conceder permisos de lectura o escritura, usa un rol personalizado.
El proceso de migración que se describe en la siguiente sección te ayuda a identificar los contenedores de Cloud Storage que pueden requerir actualizaciones de permisos.
Migrar un proyecto al agente de servicio de Firestore
Sigue estos pasos para migrar de la cuenta de servicio de App Engine al agente de servicio de Firestore. Una vez completada, la migración no se puede deshacer.
-
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.
-
Si tu proyecto aún no se ha migrado al agente de servicio de Firestore, verás un banner que describe la migración y un botón Comprobar estado del segmento. En el siguiente paso, se explica cómo identificar y corregir posibles errores de permisos.
Haz clic en Comprobar estado del segmento.
Aparecerá un menú con la opción de completar la migración y una lista de segmentos de Cloud Storage. La lista puede tardar unos minutos en cargarse.
Esta lista incluye los segmentos que se han usado recientemente en operaciones de importación y exportación, pero que no tienen permisos de lectura y escritura para el agente de servicio del modo Datastore.
- Anota el nombre de la entidad de seguridad del servicio del modo Datastore de tu proyecto. El nombre del agente de servicio aparece debajo de la etiqueta Agente de servicio al que se le debe dar acceso.
-
En cada uno de los contenedores de la lista que vayas a usar en futuras operaciones de importación o exportación, sigue estos pasos:
-
En la fila de la tabla de este segmento, haz clic en Corregir. Se abrirá la página de permisos de ese contenedor en una pestaña nueva.
- Haz clic en Añadir.
- En el campo New principals (Nuevos principales), introduce el nombre de tu agente de servicio de Firestore.
- En el campo Seleccionar un rol, selecciona Agentes de servicio > Agente de servicio de Firestore.
- Haz clic en Guardar.
- Vuelve a la pestaña con la página Importar/Exportar del modo Datastore.
- Repite estos pasos con el resto de los segmentos de la lista. Asegúrate de ver todas las páginas de la lista.
-
-
Haz clic en Migrar al agente de servicio de Firestore. Si aún tienes contenedores con comprobaciones de permisos fallidas, debes confirmar la migración haciendo clic en Migrar.
Recibirás una alerta cuando se complete la migración. La migración no se puede deshacer.
Ver el estado de la migración
Para verificar el estado de migración de tu proyecto, sigue estos pasos:
-
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.
-
Busca la cuenta principal junto a la etiqueta Tareas de importación o exportación ejecutadas como.
Si el principal es
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com
, tu proyecto ya se ha migrado al agente de servicio de Firestore. La migración no se puede deshacer.Si el proyecto no se ha migrado, aparecerá un banner en la parte superior de la página con el botón Comprobar estado del contenedor. Consulta el artículo Migrar al agente de servicio de Firestore para completar la migración.
Añadir una restricción de política de toda la organización
-
Define la siguiente restricción en la política de tu organización:
Requerir el agente de servicio de Firestore para importar o exportar (
firestore.requireP4SAforImportExport
).Esta restricción requiere que las operaciones de importación y exportación usen el agente de servicio de Firestore para autorizar las solicitudes. Para definir esta restricción, consulta el artículo Crear y gestionar políticas de la organización .
Al aplicar esta restricción de política de organización, no se conceden automáticamente los permisos adecuados del segmento de Cloud Storage al agente de servicio de Firestore.
Si la restricción genera errores de permisos en algún flujo de trabajo de importación o exportación, puedes inhabilitarla para volver a usar la cuenta de servicio predeterminada. Después de comprobar y actualizar los permisos del segmento de Cloud Storage, puedes volver a habilitar la restricción.