Programar una exportación

En esta página se describe cómo programar exportaciones de tus datos de Firestore en el modo Datastore. Para ejecutar exportaciones de forma programada, te recomendamos que uses funciones de Cloud Run y Cloud Scheduler. Crea una función de Cloud Functions que inicie exportaciones y usa Cloud Scheduler para ejecutarla.

Antes de empezar

Antes de programar exportaciones de datos, debes completar las siguientes tareas:

  1. Habilita la facturación de tu Google Cloud proyecto. Solo los proyectos con la facturación habilitada pueden usar la función de exportación e importación. Google Cloud
  2. Crea un segmento de Cloud Storage en una ubicación cercana a la ubicación de tu base de datos en el modo de almacén de datos. Las operaciones de exportación requieren un segmento de Cloud Storage de destino. No puedes usar un contenedor de pago por el solicitante para las operaciones de exportación.

Crear una función de Cloud Functions y una tarea de Cloud Scheduler

Sigue estos pasos para crear una función de Cloud Functions que inicie las exportaciones de datos y un trabajo de Cloud Scheduler para llamar a esa función:

Crea una datastore_export función de Cloud

  1. Ve a la página Cloud Functions de la Google Cloud consola:

    Ir a Cloud Functions

  2. Haz clic en Crear función.
  3. Introduce un nombre de función, como datastoreExport.
  4. En Activador, selecciona Cloud Pub/Sub. Cloud Scheduler usa tu tema de Pub/Sub para llamar a tu función.
  5. En el campo Tema, selecciona Crear un tema. Introduce un nombre para el tema de Pub/Sub, como startDatastoreExport. Anota el nombre del tema, ya que lo necesitarás para crear tu tarea de Cloud Scheduler.
  6. En Código fuente, selecciona Editor insertado.
  7. En el desplegable Entorno de ejecución, selecciona Python 3.7.
  8. Introduce el siguiente código para main.py:
    # Copyright 2021 Google LLC All Rights Reserved.
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    import base64
    import json
    import os
    
    from google.cloud import datastore_admin_v1
    
    project_id = os.environ.get("GCP_PROJECT")
    client = datastore_admin_v1.DatastoreAdminClient()
    
    
    def datastore_export(event, context):
        """Triggers a Datastore export from a Cloud Scheduler job.
    
        Args:
            event (dict): event[data] must contain a json object encoded in
                base-64. Cloud Scheduler encodes payloads in base-64 by default.
                Object must include a 'bucket' value and can include 'kinds'
                and 'namespaceIds' values.
            context (google.cloud.functions.Context): The Cloud Functions event
                metadata.
        """
        if "data" in event:
            # Triggered via Cloud Scheduler, decode the inner data field of the json payload.
            json_data = json.loads(base64.b64decode(event["data"]).decode("utf-8"))
        else:
            # Otherwise, for instance if triggered via the Cloud Console on a Cloud Function, the event is the data.
            json_data = event
    
        bucket = json_data["bucket"]
        entity_filter = datastore_admin_v1.EntityFilter()
    
        if "kinds" in json_data:
            entity_filter.kinds = json_data["kinds"]
    
        if "namespaceIds" in json_data:
            entity_filter.namespace_ids = json_data["namespaceIds"]
    
        export_request = datastore_admin_v1.ExportEntitiesRequest(
            project_id=project_id, output_url_prefix=bucket, entity_filter=entity_filter
        )
        operation = client.export_entities(request=export_request)
        response = operation.result()
        print(response)
    
  9. En requirements.txt, añade la siguiente dependencia:
    google-cloud-datastore==2.20.0
    
  10. En Punto de entrada, introduce datastore_export, el nombre de la función en main.py.
  11. Haz clic en Desplegar para desplegar la función de Cloud.

Configurar permisos de acceso

A continuación, concede a la función de Cloud permiso para iniciar operaciones de exportación y escribir en tu segmento de Cloud Storage.

Esta función de Cloud usa la cuenta de servicio predeterminada de tu proyecto para autenticar y autorizar sus operaciones de exportación. Cuando creas un proyecto, se crea una cuenta de servicio predeterminada con el siguiente nombre:

project_id@appspot.gserviceaccount.com

Esta cuenta de servicio necesita permiso para iniciar operaciones de exportación y para escribir en tu segmento de Cloud Storage. Para conceder estos permisos, asigna los siguientes roles de gestión de identidades y accesos a la cuenta de servicio predeterminada:

  • Cloud Datastore Import Export Admin
  • Rol Storage Object User en el segmento

Puedes usar la CLI de Google Cloud para asignar estos roles. Puedes acceder a esta herramienta desde Cloud Shell en la consola: Google Cloud
Iniciar Cloud Shell

  1. Asigna el rol Administrador de importaciones y exportaciones de Cloud Datastore. Sustituye project_id y ejecuta el siguiente comando:

    gcloud projects add-iam-policy-binding project_id \
        --member serviceAccount:project_id@appspot.gserviceaccount.com \
        --role roles/datastore.importExportAdmin
  2. Asigna el rol Usuario de objeto de almacenamiento en tu cubo. Sustituye bucket_name y project_id y ejecuta el siguiente comando:

    gcloud storage buckets add-iam-policy-binding gs://bucket_name \
        --member=serviceAccount:project_id@appspot.gserviceaccount.com \
        --role=roles/storage.objectUser

Crear una tarea de Cloud Scheduler

A continuación, crea una tarea de Cloud Scheduler que llame a la función de Cloud Functions:datastore_export

  1. Ve a la página Cloud Scheduler de la consola de Google Cloud :

    Ir a Cloud Scheduler

  2. Haz clic en Crear trabajo.

  3. Introduce un nombre para el trabajo, como scheduledDatastoreExport.

  4. Introduzca una frecuencia en formato cron de UNIX.

  5. Selecciona una zona horaria.

  6. En Destino, selecciona Pub/Sub. En el campo Tema, introduce el nombre del tema de publicación/suscripción que hayas definido junto con tu función de Cloud, startDatastoreExport en el ejemplo anterior.

  7. En el campo Carga útil, introduce un objeto JSON para configurar la operación de exportación. La función de Cloud datastore_export requiere un bucket valor. También puede incluir valores kinds o namespaceIDs para definir un filtro de entidad. Por ejemplo:

    Exportar todas las entidades

    {
    "bucket": "gs://bucket_name"
    }
    

    Exportar con filtro de entidad

    • Exporta las entidades de tipo User o Task de todos los espacios de nombres:

      {
      "bucket": "gs://bucket_name",
      "kinds": ["User", "Task"]
      }
      

    • Exporta entidades de tipo User o Task de los espacios de nombres predeterminado y Testers. Usa una cadena vacía ("") para especificar el espacio de nombres predeterminado:

      {
      "bucket": "gs://bucket_name",
      "kinds": ["User", "Task"],
      "namespaceIds": ["", "Testers"]
      }
      

    • Exporta entidades de cualquier tipo desde los espacios de nombres predeterminado y Testers. Usa una cadena vacía ("") para especificar el espacio de nombres predeterminado:

      {
      "bucket": "gs://bucket_name",
      "namespaceIds": ["", "Testers"]
      }
      

    Donde bucket_name es el nombre de tu segmento de Cloud Storage.

  8. Haz clic en Crear.

Probar las exportaciones programadas

Para probar tu función de Cloud y tu tarea de Cloud Scheduler, ejecuta tu tarea de Cloud Scheduler en la página Cloud Scheduler de la consola Google Cloud . Si la solicitud se completa correctamente, se inicia una operación de exportación real.

  1. Ve a la página Cloud Scheduler de la consola de Google Cloud .
    Ir a Cloud Scheduler

  2. En la fila de la nueva tarea de Cloud Scheduler, haz clic en Ejecutar ahora.

    Al cabo de unos segundos, haz clic en Actualizar. La tarea de Cloud Scheduler debería actualizar la columna de resultados a Success y Last run a la hora actual.

La página de Cloud Scheduler solo confirma que la tarea ha enviado un mensaje al tema de Pub/Sub. Para ver si tu solicitud de exportación se ha realizado correctamente, consulta los registros de tu función de Cloud.

Ver los registros de la función de Cloud

Para comprobar si Cloud Functions ha iniciado correctamente una operación de exportación, consulta la página Explorador de registros de la consola de Google Cloud .

Ir a Explorador de registros

El registro de la función de Cloud informa de los errores y de las iniciaciones de exportación correctas.

Ver el progreso de la exportación

Puedes usar el comando gcloud datastore operations list para ver el progreso de tus operaciones de exportación. Consulta cómo enumerar todas las operaciones de larga duración.

Una vez que se haya completado una operación de exportación, podrá ver los archivos de salida en su segmento de Cloud Storage. El servicio de exportación gestionada usa una marca de tiempo para organizar tus operaciones de exportación:

Ir a Cloud Storage