Crear transferencias

En esta página se explica cómo crear e iniciar tareas de transferencia.

Para comprobar si tu origen y tu destino (también conocido como receptor) son compatibles con Storage Transfer Service, consulta Fuentes y receptores admitidos.

Agentes y grupos de agentes

En función de la fuente y el destino, es posible que tengas que crear y configurar un grupo de agentes, así como instalar agentes en una máquina que tenga acceso a la fuente o al destino.

  • Las transferencias de Amazon S3, Microsoft Azure, listas de URLs o Cloud Storage a Cloud Storage no requieren agentes ni grupos de agentes.

  • Las transferencias cuyo origen o destino sea un sistema de archivos o un almacenamiento compatible con S3 requieren agentes y grupos de agentes. Consulta las instrucciones en Gestionar grupos de agentes.

Antes de empezar

Antes de configurar las transferencias, asegúrate de que has configurado el acceso:

Si usas comandos gcloud, instala gcloud CLI.

Crear una transferencia

No incluyas información sensible, como información personal identificable (IPI) o datos de seguridad, en el nombre del trabajo de transferencia. Los nombres de recursos pueden propagarse a los nombres de otros recursos de Google Cloud y pueden exponerse a sistemas internos de Google fuera de tu proyecto.

Google Cloud consola

  1. Ve a la página Storage Transfer Service de la Google Cloud consola.

    Ir al Servicio de transferencia de Storage

  2. Haz clic en Crear tarea de transferencia. Se muestra la página Crear una tarea de transferencia.

  3. Elige una fuente:

    Cloud Storage

    Tu cuenta de usuario debe tener el permiso storage.buckets.get para seleccionar los segmentos de origen y de destino. También puedes escribir el nombre del segmento directamente. Para obtener más información, consulta Solucionar problemas de acceso.

    1. En Tipo de origen, selecciona Cloud Storage.

    2. Selecciona el Tipo de destino.

    3. Si el destino es Cloud Storage, selecciona el modo de programación. Las transferencias por lotes se ejecutan de forma puntual o programada. Las transferencias basadas en eventos monitorizan continuamente la fuente y transfieren los datos cuando se añaden o se modifican.

      Para configurar una transferencia basada en eventos, siga las instrucciones que se indican en el artículo Transferencias basadas en eventos.

    4. Haz clic en Siguiente paso.

    5. Selecciona un segmento y, de forma opcional, una carpeta de ese segmento. Para ello, haz una de las siguientes acciones:

      • Introduce el nombre y la ruta de un segmento de Cloud Storage en el campo Segmento o carpeta sin el prefijo gs://. Por ejemplo, my-test-bucket/path/to/files. Para especificar un segmento de Cloud Storage de otro proyecto, escribe el nombre exactamente en el campo Nombre del segmento.

      • Para seleccionar una lista de los segmentos disponibles en tus proyectos, haz clic en Buscar y, a continuación, selecciona un segmento.

        Cuando haces clic en Examinar, puedes seleccionar los contenedores de otros proyectos haciendo clic en ID de proyecto y, a continuación, en el nuevo ID de proyecto y el contenedor.

      • Para crear un nuevo contenedor, haz clic en Crear contenedor.

    6. Si se trata de una transferencia basada en eventos, introduzca el nombre de la suscripción de Pub/Sub, que tiene el siguiente formato:

      projects/PROJECT_NAME/subscriptions/SUBSCRIPTION_ID
      
    7. También puedes filtrar objetos por prefijo o por fecha de última modificación. Si has especificado una carpeta como ubicación de origen, los filtros de prefijo se aplican a esa carpeta. Por ejemplo, si tu origen es my-test-bucket/path/, un filtro de inclusión de file incluye todos los archivos que empiezan por my-test-bucket/path/file.
    8. Haz clic en Siguiente paso.

    Amazon S3

    Consulta Transferir datos de Amazon S3 a Cloud Storage.

    Almacenamiento compatible con S3

    Consulta Transferir datos desde un almacenamiento compatible con S3 a Cloud Storage.

    Microsoft Azure Blob Storage

    1. En Tipo de fuente, selecciona Azure Blob Storage o Data Lake Storage Gen2.

    2. Haz clic en Siguiente paso.

    3. Especifica lo siguiente:

      1. Nombre de la cuenta de almacenamiento: nombre de la cuenta de almacenamiento de Microsoft Azure de origen.

        El nombre de la cuenta de almacenamiento se muestra en el portal de almacenamiento de Microsoft Azure, en Todos los servicios > Almacenamiento > Cuentas de almacenamiento.

      2. Nombre del contenedor: el nombre del contenedor de Microsoft Azure Storage.

        El nombre del contenedor se muestra en el portal de Microsoft Azure Storage, en Explorador de almacenamiento > Contenedores de blobs.

      3. Firma de acceso compartido (SAS): token SAS de Microsoft Azure Storage creado a partir de una política de acceso almacenada. Para obtener más información, consulta Conceder acceso limitado a recursos de Azure Storage mediante firmas de acceso compartido (SAS).

        El tiempo de expiración predeterminado de los tokens de SAS es de 8 horas. Cuando crees tu token de SAS, asegúrate de definir un tiempo de expiración razonable que te permita completar la transferencia correctamente.
    4. También puedes filtrar objetos por prefijo o por fecha de última modificación. Si has especificado una carpeta como ubicación de origen, los filtros de prefijo se aplican a esa carpeta. Por ejemplo, si tu origen es my-test-bucket/path/, un filtro de inclusión de file incluye todos los archivos que empiezan por my-test-bucket/path/file.
    5. Haz clic en Siguiente paso.

    Sistema de archivos

    1. En Tipo de origen, selecciona Sistema de archivos POSIX.

    2. Seleccione el Tipo de destino y haga clic en Paso siguiente.

    3. Selecciona un grupo de agentes o Crear grupo de agentes y sigue las instrucciones para crear uno.

    4. Especifica la ruta completa del directorio del sistema de archivos.

    5. Haz clic en Siguiente paso.

    HDFS

    Consulta Transferir datos de HDFS a Cloud Storage.

    Lista de URLs

    1. En Tipo de fuente, seleccione Lista de URLs y haga clic en Paso siguiente.

    2. En URL de archivo TSV, proporcione la URL de un archivo de valores separados por tabulaciones (TSV). Consulta Crear una lista de URLs para obtener más información sobre cómo crear el archivo TSV.

    3. También puedes filtrar objetos por prefijo o por fecha de última modificación. Si has especificado una carpeta como ubicación de origen, los filtros de prefijo se aplican a esa carpeta. Por ejemplo, si tu origen es my-test-bucket/path/, un filtro de inclusión de file incluye todos los archivos que empiezan por my-test-bucket/path/file.
    4. Haz clic en Siguiente paso.

  4. Elige un destino:

    Cloud Storage​

    1. En el campo Segmento o carpeta, introduce el nombre del segmento de destino y, opcionalmente, el de la carpeta. También puedes hacer clic en Examinar para seleccionar un segmento de la lista de segmentos de tu proyecto. Para crear un nuevo contenedor, haz clic en Crear contenedor.

    2. Haz clic en Siguiente paso.

    3. Elige las opciones de programación:

      1. En la lista desplegable Ejecutar una vez, selecciona una de las siguientes opciones:

        • Ejecutar una vez: ejecuta una sola transferencia a partir de la hora que selecciones.

        • Ejecutar todos los días: ejecuta una transferencia a diario a partir de la hora que selecciones.

          Puede introducir una fecha de finalización opcional o dejar el campo Fecha de finalización en blanco para que la transferencia se realice continuamente.

        • Ejecutar cada semana: se realiza una transferencia semanal a partir de la hora que selecciones.

        • Ejecutar con una frecuencia personalizada: ejecuta una transferencia con la frecuencia que elijas. Puedes repetir la transferencia a intervalos regulares de horas, días o semanas.

          Puede introducir una fecha de finalización opcional o dejar el campo Fecha de finalización en blanco para que la transferencia se realice continuamente.

      2. En la lista desplegable Empezar ahora, selecciona una de las siguientes opciones:

        • Empezar ahora: la transferencia se inicia después de que hagas clic en Crear.

        • A partir de: inicia la transferencia en la fecha y la hora que selecciones. Haz clic en Calendario para que se muestre un calendario en el que puedas seleccionar la fecha de inicio.

    4. Haz clic en Siguiente paso.

    5. Elige la configuración del trabajo de transferencia. Algunas opciones solo están disponibles para determinadas combinaciones de origen y receptor.

      1. En el campo Descripción, introduce una descripción de la transferencia. Como práctica recomendada, introduce una descripción significativa y única para poder distinguir los trabajos.

      2. En Opciones de metadatos, elija si quiere usar las opciones predeterminadas o haga clic en Ver y seleccionar opciones para especificar valores de todos los metadatos admitidos. Para obtener más información, consulta Conservación de metadatos.

      3. En Cuándo sobrescribir, seleccione una de las siguientes opciones:

        • Si es diferente: sobrescribe los archivos de destino si el archivo de origen con el mismo nombre tiene valores de ETag o de suma de comprobación diferentes.

        • Siempre: siempre sobrescribe los archivos de destino cuando el archivo de origen tiene el mismo nombre, aunque sean idénticos.

      4. En Cuándo eliminar, selecciona una de las siguientes opciones:

        • Nunca: no elimina nunca los archivos del origen ni del destino.

        • Eliminar archivos del origen cuando se hayan transferido: elimina los archivos del origen cuando se hayan transferido al destino. Si no se transfiere un archivo de origen (por ejemplo, porque ya existe en el destino), no se elimina.

        • Eliminar los archivos en el destino si tampoco están en el origen: si los archivos del segmento de Cloud Storage de destino no están en el origen, elimínelos del segmento de Cloud Storage.

          Esta opción asegura que el segmento de destino de Cloud Storage coincida exactamente con el de origen.

      5. En el caso de las transferencias entre segmentos de Cloud Storage, elige si quieres transferir carpetas gestionadas.

      6. Habilita o inhabilita el registro de Storage Transfer Service.

      7. En Opciones de notificación, puedes seleccionar el tema de Pub/Sub y los eventos de los que quieres recibir notificaciones. Para obtener más información, consulta las notificaciones de Pub/Sub.

    6. Si quieres delegar permisos de agente de servicio en una cuenta de servicio gestionada por un usuario, selecciona esa opción e introduce la dirección de correo de la cuenta de servicio con el formato SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.

    7. Haz clic en Crear.

    Sistema de archivos​

    1. Selecciona un grupo de agentes o Crear grupo de agentes y sigue las instrucciones para crear uno.

    2. Especifica la ruta de directorio de destino completa.

    3. Haz clic en Siguiente paso.

    4. Elige las opciones de programación:

      1. En la lista desplegable Ejecutar una vez, selecciona una de las siguientes opciones:

        • Ejecutar una vez: ejecuta una sola transferencia a partir de la hora que selecciones.

        • Ejecutar todos los días: ejecuta una transferencia a diario a partir de la hora que selecciones.

          Puede introducir una fecha de finalización opcional o dejar el campo Fecha de finalización en blanco para que la transferencia se realice continuamente.

        • Ejecutar cada semana: se realiza una transferencia semanal a partir de la hora que selecciones.

        • Ejecutar con una frecuencia personalizada: ejecuta una transferencia con la frecuencia que elijas. Puedes repetir la transferencia a intervalos regulares de horas, días o semanas.

          Puede introducir una fecha de finalización opcional o dejar el campo Fecha de finalización en blanco para que la transferencia se realice continuamente.

      2. En la lista desplegable Empezar ahora, selecciona una de las siguientes opciones:

        • Empezar ahora: la transferencia se inicia después de que hagas clic en Crear.

        • A partir de: inicia la transferencia en la fecha y la hora que selecciones. Haz clic en Calendario para que se muestre un calendario en el que puedas seleccionar la fecha de inicio.

    5. Haz clic en Siguiente paso.

    6. Especifica si quieres usar un archivo de manifiesto.

    7. Selecciona si quieres conservar los metadatos, cuándo quieres sobrescribir y cuándo quieres eliminar los archivos de origen o de destino.

    8. Selecciona las opciones de registro.

    9. En Opciones de notificación, puedes seleccionar el tema de Pub/Sub y los eventos de los que quieres recibir notificaciones. Para obtener más información, consulta las notificaciones de Pub/Sub.

    10. Si quieres delegar permisos de agente de servicio en una cuenta de servicio gestionada por un usuario, selecciona esa opción e introduce la dirección de correo de la cuenta de servicio con el formato SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.

    11. Para crear la tarea de transferencia, haz clic en Crear.

CLI de gcloud

Para crear una tarea de transferencia, usa el comando gcloud transfer jobs create. Al crear una tarea, se inicia la transferencia especificada, a menos que se indique una programación o un --do-not-run.

gcloud transfer jobs create \
  SOURCE DESTINATION

Donde:

  • SOURCE es la fuente de datos de esta transferencia. El formato de cada fuente es el siguiente:

    • Cloud Storage: gs://BUCKET_NAME. Para transferir contenido de una carpeta específica, indica gs://BUCKET_NAME/FOLDER_PATH/, incluida la barra diagonal final.
    • Amazon S3: s3://BUCKET_NAME/FOLDER_PATH
    • Almacenamiento compatible con S3: s3://BUCKET_NAME. El nombre del contenedor es relativo al endpoint. Por ejemplo, si tus datos se encuentran en https://us-east-1.example.com/folder1/bucket_a, introduce s3://folder1/bucket_a.
    • Microsoft Azure Storage: https://myaccount.blob.core.windows.net/CONTAINER_NAME
    • Lista de URLs: https://PATH_TO_URL_LIST o http://PATH_TO_URL_LIST
    • Sistema de archivos POSIX: posix:///PATH. Debe ser una ruta absoluta desde la raíz del equipo host del agente.
    • HDFS: hdfs:///PATH
  • DESTINATION es uno de los siguientes valores:

    • Cloud Storage: gs://BUCKET_NAME. Para transferir archivos a un directorio específico, especifica gs://BUCKET_NAME/FOLDER_PATH/, incluida la barra al final.
    • Sistema de archivos POSIX: posix:///PATH. Debe ser una ruta absoluta desde la raíz del equipo host del agente.

Si la transferencia requiere agentes de transferencia, tienes las siguientes opciones:

  • --source-agent-pool especifica el grupo de agentes de origen que se usará para esta transferencia. Es necesario para las transferencias que se originan en un sistema de archivos.

  • --destination-agent-pool especifica el grupo de agentes de destino que se usará para esta transferencia. Obligatorio para las transferencias a un sistema de archivos.

  • --intermediate-storage-path es la ruta a un segmento de Cloud Storage con el formato gs://my-intermediary-bucket. Obligatorio para las transferencias entre dos sistemas de archivos. Consulta Crear un segmento de Cloud Storage como intermediario para obtener información sobre cómo crear el segmento intermedio.

Entre las opciones adicionales se incluyen:

  • --source-creds-file especifica la ruta relativa a un archivo local de tu ordenador que incluye las credenciales de AWS o Azure de la fuente de transferencia. Para obtener información sobre el formato de los archivos de credenciales, consulta la referencia de TransferSpec.

  • --do-not-run impide que el Servicio de transferencia de Storage ejecute el trabajo al enviar el comando. Para ejecutar el trabajo, actualízalo para añadir una programación o usa jobs run para iniciarlo manualmente.

  • --manifest-file especifica la ruta a un archivo CSV de Cloud Storage que contiene una lista de archivos que se van a transferir desde la fuente. Para obtener información sobre el formato del archivo de manifiesto, consulta el artículo Transferir archivos u objetos específicos mediante un manifiesto.

  • Información del trabajo: puedes especificar --name, --description y --source-creds-file.

  • Programación: especifica --schedule-starts, --schedule-repeats-every y --schedule-repeats-until, o --do-not-run.

  • Condiciones de los objetos: usa condiciones para determinar qué objetos se transfieren. Entre ellas se incluyen --include-prefixes y --exclude-prefixes, así como las condiciones basadas en el tiempo de --include-modified-[before | after]-[absolute | relative]. Si has especificado una carpeta con tu fuente, los filtros de prefijo se aplican a esa carpeta. Para obtener más información, consulta Filtrar objetos de origen por prefijo.

    Las condiciones de objeto no se admiten en las transferencias que implican sistemas de archivos.

  • Opciones de transferencia: especifica si quieres sobrescribir los archivos de destino (--overwrite-when=different o always) y si quieres eliminar determinados archivos durante o después de la transferencia (--delete-from=destination-if-unique o source-after-transfer); especifica qué valores de metadatos quieres conservar (--preserve-metadata) y, opcionalmente, define una clase de almacenamiento para los objetos transferidos (--custom-storage-class).

  • Notificaciones: configura las notificaciones de Pub/Sub para las transferencias con --notification-pubsub-topic, --notification-event-types y --notification-payload-format.

  • Cloud Logging: habilita Cloud Logging para transferencias sin agente o transferencias desde fuentes compatibles con S3 con --log-actions y --log-action-states. Consulta más información en Cloud Logging para el Servicio de transferencia de Storage.

Las transferencias desde fuentes compatibles con S3 también usan las siguientes opciones:

  • --source-endpoint (obligatorio) especifica el endpoint de tu sistema de almacenamiento. Por ejemplo, s3.example.com. Ponte en contacto con tu proveedor para obtener el formato correcto. No especifiques el protocolo (http:// o https://).
  • --source-signing-region especifica una región para firmar solicitudes. Omite esta marca si tu proveedor de almacenamiento no requiere una región de firma.
  • --source-auth-method especifica el método de autenticación que se va a usar. Los valores válidos son AWS_SIGNATURE_V2 y AWS_SIGNATURE_V4. Consulta la documentación de SigV4 y SigV2 de Amazon para obtener más información.
  • --source-request-model especifica el estilo de dirección que se va a usar. Los valores válidos son PATH_STYLE o VIRTUAL_HOSTED_STYLE. El estilo de ruta utiliza el formato https://s3.example.com/BUCKET_NAME/KEY_NAME. El estilo de alojamiento virtual usa el formato `https://BUCKET_NAME.s3.example.com/KEY_NAME.
  • --source-network-protocol especifica el protocolo de red que deben usar los agentes para este trabajo. Los valores válidos son HTTP y HTTPS.
  • --source-list-api especifica la versión de la API de listado de S3 para devolver objetos del segmento. Los valores válidos son LIST_OBJECTS y LIST_OBJECTS_V2. Consulta la documentación de ListObjectsV2 y ListObjects de Amazon para obtener más información.

Para ver todas las opciones, ejecuta gcloud transfer jobs create --help o consulta la documentación de referencia de gcloud.

Ejemplos

De Amazon S3 a Cloud Storage

Consulta Transferir datos de Amazon S3 a Cloud Storage.

Almacenamiento compatible con S3 a Cloud Storage

Consulta Transferir datos desde un almacenamiento compatible con S3 a Cloud Storage.

Sistema de archivos a Cloud Storage

Consulta Transferir datos de un sistema de archivos a Cloud Storage.

Cloud Storage a sistema de archivos

Para transferir datos de un segmento de Cloud Storage a un sistema de archivos, especifica lo siguiente.

gcloud transfer jobs create \
  gs://my-storage-bucket posix:///tmp/destination \
  --destination-agent-pool=my-destination-agent-pool

De sistema de archivos a sistema de archivos

Para transferir datos entre dos sistemas de archivos, debes especificar un grupo de agentes de origen, un grupo de agentes de destino y un segmento de Cloud Storage intermedio a través del cual pasarán los datos.

Consulta los detalles sobre el segmento intermedio en el artículo Crear un segmento de Cloud Storage como intermediario.

A continuación, especifica estos tres recursos al llamar a transfer jobs create:

gcloud transfer jobs create \
  posix:///tmp/source/on/systemA posix:///tmp/destination/on/systemB \
  --source-agent-pool=source_agent_pool \
  --destination-agent-pool=destination_agent_pool \
  --intermediate-storage-path=gs://my-intermediary-bucket

REST

En los siguientes ejemplos se muestra cómo usar el Servicio de transferencia de Storage a través de la API REST.

Cuando configure o edite tareas de transferencia mediante la API Storage Transfer Service, la hora debe estar en UTC. Para obtener más información sobre cómo especificar la programación de una tarea de transferencia, consulta Programación.

Transferir datos entre segmentos de Cloud Storage

En este ejemplo, aprenderás a mover archivos de un segmento de Cloud Storage a otro. Por ejemplo, puedes mover datos a un segmento de otra ubicación.

Solicitud con transferJobs create:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "description": "YOUR DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "schedule": {
      "scheduleStartDate": {
          "day": 1,
          "month": 1,
          "year": 2015
      },
      "startTimeOfDay": {
          "hours": 1,
          "minutes": 1
      }
  },
  "transferSpec": {
      "gcsDataSource": {
          "bucketName": "GCS_SOURCE_NAME"
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME"
      },
      "transferOptions": {
          "deleteObjectsFromSourceAfterTransfer": true
      }
  }
}
Respuesta:
200 OK
{
  "transferJob": [
      {
          "creationTime": "2015-01-01T01:01:00.000000000Z",
          "description": "YOUR DESCRIPTION",
          "name": "transferJobs/JOB_ID",
          "status": "ENABLED",
          "lastModificationTime": "2015-01-01T01:01:00.000000000Z",
          "projectId": "PROJECT_ID",
          "schedule": {
              "scheduleStartDate": {
                  "day": 1,
                  "month": 1,
                  "year": 2015
              },
              "startTimeOfDay": {
                  "hours": 1,
                  "minutes": 1
              }
          },
          "transferSpec": {
              "gcsDataSource": {
                  "bucketName": "GCS_SOURCE_NAME",
              },
              "gcsDataSink": {
                  "bucketName": "GCS_NEARLINE_SINK_NAME"
              },
              "objectConditions": {
                  "minTimeElapsedSinceLastModification": "2592000.000s"
              },
              "transferOptions": {
                  "deleteObjectsFromSourceAfterTransfer": true
              }
          }
      }
  ]
}

Transferir datos de Amazon S3 a Cloud Storage

Consulta Transferir datos de Amazon S3 a Cloud Storage.

Transferir datos entre Microsoft Azure Blob Storage y Cloud Storage

En este ejemplo, aprenderá a mover archivos de Microsoft Azure Storage a un segmento de Cloud Storage mediante un token de firma de acceso compartido (SAS) de Microsoft Azure Storage.

Para obtener más información sobre las SAS de Microsoft Azure Storage, consulta el artículo Conceder acceso limitado a recursos de Azure Storage mediante firmas de acceso compartido (SAS).

Antes de empezar, consulta las secciones Configurar el acceso a Microsoft Azure Storage y Precios para conocer las implicaciones de mover datos de Microsoft Azure Storage a Cloud Storage.

Solicitud con transferJobs create:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "description": "YOUR DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "schedule": {
      "scheduleStartDate": {
          "day": 14,
          "month": 2,
          "year": 2020
      },
      "scheduleEndDate": {
          "day": 14
          "month": 2,
          "year": 2020
      },
      "startTimeOfDay": {
          "hours": 1,
          "minutes": 1
      }
  },
  "transferSpec": {
      "azureBlobStorageDataSource": {
          "storageAccount": "AZURE_SOURCE_NAME",
          "azureCredentials": {
              "sasToken": "AZURE_SAS_TOKEN",
          },
          "container": "AZURE_CONTAINER",
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME"
      }
  }
}
Respuesta:
200 OK
{
  "transferJob": [
      {
          "creationTime": "2020-02-14T01:01:00.000000000Z",
          "description": "YOUR DESCRIPTION",
          "name": "transferJobs/JOB_ID",
          "status": "ENABLED",
          "lastModificationTime": "2020-02-14T01:01:00.000000000Z",
          "projectId": "PROJECT_ID",
          "schedule": {
              "scheduleStartDate": {
                  "day": 14
                  "month": 2,
                  "year": 2020
              },
              "scheduleEndDate": {
                  "day": 14,
                  "month": 2,
                  "year": 2020
              },
              "startTimeOfDay": {
                  "hours": 1,
                  "minutes": 1
              }
          },
          "transferSpec": {
              "azureBlobStorageDataSource": {
                  "storageAccount": "AZURE_SOURCE_NAME",
                  "azureCredentials": {
                      "sasToken": "AZURE_SAS_TOKEN",
                  },
                  "container": "AZURE_CONTAINER",
              },
              "objectConditions": {},
              "transferOptions": {}
          }
      }
  ]
}

Transferir desde un sistema de archivos

Consulta Transferir datos de un sistema de archivos a Cloud Storage.

Especificar las rutas de origen y destino

Las rutas de origen y destino te permiten especificar los directorios de origen y destino al transferir datos a tu segmento de Cloud Storage. Por ejemplo, supongamos que tiene los archivos file1.txt y file2.txt, y un segmento de Cloud Storage llamado B. Si defines una ruta de destino llamada my-stuff, una vez completada la transferencia, tus archivos se encontrarán en gs://B/my-stuff/file1.txt y gs://B/my-stuff/file2.txt.

Especificar una ruta de origen

Para especificar una ruta de origen al crear un trabajo de transferencia, añada un campo path al campo gcsDataSource de su especificación TransferSpec:

{
gcsDataSource: {
  bucketName: "SOURCE_BUCKET",
  path: "SOURCE_PATH/",
},
}

En este ejemplo:

  • SOURCE_BUCKET: el bucket de Cloud Storage de origen.
  • SOURCE_PATH: la ruta de Cloud Storage de origen.

Especificar una ruta de destino

Para especificar una carpeta de destino al crear un trabajo de transferencia, añade un campo path al campo gcsDataSink de tu especificación TransferSpec:

{
gcsDataSink: {
  bucketName: "DESTINATION_BUCKET",
  path: "DESTINATION_PATH/",
},
}

En este ejemplo:

  • DESTINATION_BUCKET: el segmento de Cloud Storage de destino.
  • DESTINATION_PATH: la ruta de Cloud Storage de destino.

Solicitud de ejemplo completa

A continuación, se muestra un ejemplo de solicitud completa:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "description": "YOUR DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "schedule": {
      "scheduleStartDate": {
          "day": 1,
          "month": 1,
          "year": 2015
      },
      "startTimeOfDay": {
          "hours": 1,
          "minutes": 1
      }
  },
  "transferSpec": {
      "gcsDataSource": {
          "bucketName": "GCS_SOURCE_NAME",
          "path": "GCS_SOURCE_PATH",
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME",
          "path": "GCS_SINK_PATH",
      },
      "objectConditions": {
          "minTimeElapsedSinceLastModification": "2592000s"
      },
      "transferOptions": {
          "deleteObjectsFromSourceAfterTransfer": true
      }
  }

}

Bibliotecas de cliente

En los siguientes ejemplos se muestra cómo usar Storage Transfer Service de forma programática con Go, Java, Node.js y Python.

Cuando configures o edites tareas de transferencia mediante programación, la hora debe estar en UTC. Para obtener más información sobre cómo especificar la programación de una tarea de transferencia, consulta Programación.

Para obtener más información sobre las bibliotecas de cliente del Servicio de transferencia de Storage, consulta el artículo Empezar a usar las bibliotecas de cliente del Servicio de transferencia de Storage.

Transferir datos entre segmentos de Cloud Storage

En este ejemplo, aprenderás a mover archivos de un segmento de Cloud Storage a otro. Por ejemplo, puedes mover datos a un segmento de otra ubicación.

Go

import (
	"context"
	"fmt"
	"io"
	"time"

	"google.golang.org/genproto/googleapis/type/date"
	"google.golang.org/genproto/googleapis/type/timeofday"
	"google.golang.org/protobuf/types/known/durationpb"

	storagetransfer "cloud.google.com/go/storagetransfer/apiv1"
	"cloud.google.com/go/storagetransfer/apiv1/storagetransferpb"
)

func transferToNearline(w io.Writer, projectID string, gcsSourceBucket string, gcsNearlineSinkBucket string) (*storagetransferpb.TransferJob, error) {
	// Your Google Cloud Project ID
	// projectID := "my-project-id"

	// The name of the GCS bucket to transfer objects from
	// gcsSourceBucket := "my-source-bucket"

	// The name of the Nearline GCS bucket to transfer objects to
	// gcsNearlineSinkBucket := "my-sink-bucket"

	ctx := context.Background()
	client, err := storagetransfer.NewClient(ctx)
	if err != nil {
		return nil, fmt.Errorf("storagetransfer.NewClient: %w", err)
	}
	defer client.Close()

	// A description of this job
	jobDescription := "Transfers objects that haven't been modified in 30 days to a Nearline bucket"

	// The time to start the transfer
	startTime := time.Now().UTC()

	req := &storagetransferpb.CreateTransferJobRequest{
		TransferJob: &storagetransferpb.TransferJob{
			ProjectId:   projectID,
			Description: jobDescription,
			TransferSpec: &storagetransferpb.TransferSpec{
				DataSink: &storagetransferpb.TransferSpec_GcsDataSink{
					GcsDataSink: &storagetransferpb.GcsData{BucketName: gcsNearlineSinkBucket}},
				DataSource: &storagetransferpb.TransferSpec_GcsDataSource{
					GcsDataSource: &storagetransferpb.GcsData{BucketName: gcsSourceBucket},
				},
				ObjectConditions: &storagetransferpb.ObjectConditions{
					MinTimeElapsedSinceLastModification: &durationpb.Duration{Seconds: 2592000 /*30 days */},
				},
				TransferOptions: &storagetransferpb.TransferOptions{DeleteObjectsFromSourceAfterTransfer: true},
			},
			Schedule: &storagetransferpb.Schedule{
				ScheduleStartDate: &date.Date{
					Year:  int32(startTime.Year()),
					Month: int32(startTime.Month()),
					Day:   int32(startTime.Day()),
				},
				ScheduleEndDate: &date.Date{
					Year:  int32(startTime.Year()),
					Month: int32(startTime.Month()),
					Day:   int32(startTime.Day()),
				},
				StartTimeOfDay: &timeofday.TimeOfDay{
					Hours:   int32(startTime.Hour()),
					Minutes: int32(startTime.Minute()),
					Seconds: int32(startTime.Second()),
				},
			},
			Status: storagetransferpb.TransferJob_ENABLED,
		},
	}
	resp, err := client.CreateTransferJob(ctx, req)
	if err != nil {
		return nil, fmt.Errorf("failed to create transfer job: %w", err)
	}
	if _, err = client.RunTransferJob(ctx, &storagetransferpb.RunTransferJobRequest{
		ProjectId: projectID,
		JobName:   resp.Name,
	}); err != nil {
		return nil, fmt.Errorf("failed to run transfer job: %w", err)
	}
	fmt.Fprintf(w, "Created and ran transfer job from %v to %v with name %v", gcsSourceBucket, gcsNearlineSinkBucket, resp.Name)
	return resp, nil
}

Java

¿Buscas muestras anteriores? Consulta la guía de migración de Servicio de transferencia de Storage.

import com.google.protobuf.Duration;
import com.google.storagetransfer.v1.proto.StorageTransferServiceClient;
import com.google.storagetransfer.v1.proto.TransferProto.CreateTransferJobRequest;
import com.google.storagetransfer.v1.proto.TransferTypes.GcsData;
import com.google.storagetransfer.v1.proto.TransferTypes.ObjectConditions;
import com.google.storagetransfer.v1.proto.TransferTypes.Schedule;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferJob;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferJob.Status;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferOptions;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferSpec;
import com.google.type.Date;
import com.google.type.TimeOfDay;
import java.io.IOException;
import java.util.Calendar;

public class TransferToNearline {
  /**
   * Creates a one-off transfer job that transfers objects in a standard GCS bucket that are more
   * than 30 days old to a Nearline GCS bucket.
   */
  public static void transferToNearline(
      String projectId,
      String jobDescription,
      String gcsSourceBucket,
      String gcsNearlineSinkBucket,
      long startDateTime)
      throws IOException {

    // Your Google Cloud Project ID
    // String projectId = "your-project-id";

    // A short description of this job
    // String jobDescription = "Sample transfer job of old objects to a Nearline GCS bucket.";

    // The name of the source GCS bucket to transfer data from
    // String gcsSourceBucket = "your-gcs-source-bucket";

    // The name of the Nearline GCS bucket to transfer old objects to
    // String gcsSinkBucket = "your-nearline-gcs-bucket";

    // What day and time in UTC to start the transfer, expressed as an epoch date timestamp.
    // If this is in the past relative to when the job is created, it will run the next day.
    // long startDateTime =
    //     new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2000-01-01 00:00:00").getTime();

    // Parse epoch timestamp into the model classes
    Calendar startCalendar = Calendar.getInstance();
    startCalendar.setTimeInMillis(startDateTime);
    // Note that this is a Date from the model class package, not a java.util.Date
    Date date =
        Date.newBuilder()
            .setYear(startCalendar.get(Calendar.YEAR))
            .setMonth(startCalendar.get(Calendar.MONTH) + 1)
            .setDay(startCalendar.get(Calendar.DAY_OF_MONTH))
            .build();
    TimeOfDay time =
        TimeOfDay.newBuilder()
            .setHours(startCalendar.get(Calendar.HOUR_OF_DAY))
            .setMinutes(startCalendar.get(Calendar.MINUTE))
            .setSeconds(startCalendar.get(Calendar.SECOND))
            .build();

    TransferJob transferJob =
        TransferJob.newBuilder()
            .setDescription(jobDescription)
            .setProjectId(projectId)
            .setTransferSpec(
                TransferSpec.newBuilder()
                    .setGcsDataSource(GcsData.newBuilder().setBucketName(gcsSourceBucket))
                    .setGcsDataSink(GcsData.newBuilder().setBucketName(gcsNearlineSinkBucket))
                    .setObjectConditions(
                        ObjectConditions.newBuilder()
                            .setMinTimeElapsedSinceLastModification(
                                Duration.newBuilder().setSeconds(2592000 /* 30 days */)))
                    .setTransferOptions(
                        TransferOptions.newBuilder().setDeleteObjectsFromSourceAfterTransfer(true)))
            .setSchedule(Schedule.newBuilder().setScheduleStartDate(date).setStartTimeOfDay(time))
            .setStatus(Status.ENABLED)
            .build();

    // Create a Transfer Service client
    StorageTransferServiceClient storageTransfer = StorageTransferServiceClient.create();

    // Create the transfer job
    TransferJob response =
        storageTransfer.createTransferJob(
            CreateTransferJobRequest.newBuilder().setTransferJob(transferJob).build());

    System.out.println("Created transfer job from standard bucket to Nearline bucket:");
    System.out.println(response.toString());
  }
}

Node.js


// Imports the Google Cloud client library
const {
  StorageTransferServiceClient,
} = require('@google-cloud/storage-transfer');

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// The ID of the Google Cloud Platform Project that owns the job
// projectId = 'my-project-id'

// A useful description for your transfer job
// description = 'My transfer job'

// Google Cloud Storage source bucket name
// gcsSourceBucket = 'my-gcs-source-bucket'

// Google Cloud Storage destination bucket name
// gcsSinkBucket = 'my-gcs-destination-bucket'

// Date to start daily migration
// startDate = new Date()

// Creates a client
const client = new StorageTransferServiceClient();

/**
 * Create a daily migration from a GCS bucket to another GCS bucket for
 * objects untouched for 30+ days.
 */
async function createDailyNearline30DayMigration() {
  // Runs the request and creates the job
  const [transferJob] = await client.createTransferJob({
    transferJob: {
      projectId,
      description,
      status: 'ENABLED',
      schedule: {
        scheduleStartDate: {
          day: startDate.getDate(),
          month: startDate.getMonth() + 1,
          year: startDate.getFullYear(),
        },
      },
      transferSpec: {
        gcsDataSource: {
          bucketName: gcsSourceBucket,
        },
        gcsDataSink: {
          bucketName: gcsSinkBucket,
        },
        objectConditions: {
          minTimeElapsedSinceLastModification: {
            seconds: 2592000, // 30 days
          },
        },
        transferOptions: {
          deleteObjectsFromSourceAfterTransfer: true,
        },
      },
    },
  });

  console.log(`Created transferJob: ${transferJob.name}`);
}

createDailyNearline30DayMigration();

Python

¿Buscas muestras anteriores? Consulta la guía de migración de Servicio de transferencia de Storage.

from datetime import datetime

from google.cloud import storage_transfer
from google.protobuf.duration_pb2 import Duration


def create_daily_nearline_30_day_migration(
    project_id: str,
    description: str,
    source_bucket: str,
    sink_bucket: str,
    start_date: datetime,
):
    """Create a daily migration from a GCS bucket to a Nearline GCS bucket
    for objects untouched for 30 days."""

    client = storage_transfer.StorageTransferServiceClient()

    # The ID of the Google Cloud Platform Project that owns the job
    # project_id = 'my-project-id'

    # A useful description for your transfer job
    # description = 'My transfer job'

    # Google Cloud Storage source bucket name
    # source_bucket = 'my-gcs-source-bucket'

    # Google Cloud Storage destination bucket name
    # sink_bucket = 'my-gcs-destination-bucket'

    transfer_job_request = storage_transfer.CreateTransferJobRequest(
        {
            "transfer_job": {
                "project_id": project_id,
                "description": description,
                "status": storage_transfer.TransferJob.Status.ENABLED,
                "schedule": {
                    "schedule_start_date": {
                        "day": start_date.day,
                        "month": start_date.month,
                        "year": start_date.year,
                    }
                },
                "transfer_spec": {
                    "gcs_data_source": {
                        "bucket_name": source_bucket,
                    },
                    "gcs_data_sink": {
                        "bucket_name": sink_bucket,
                    },
                    "object_conditions": {
                        "min_time_elapsed_since_last_modification": Duration(
                            seconds=2592000  # 30 days
                        )
                    },
                    "transfer_options": {
                        "delete_objects_from_source_after_transfer": True
                    },
                },
            }
        }
    )

    result = client.create_transfer_job(transfer_job_request)
    print(f"Created transferJob: {result.name}")

Transferir datos de Amazon S3 a Cloud Storage

Consulta Transferir datos de Amazon S3 a Cloud Storage.

Transferir datos entre Microsoft Azure Blob Storage y Cloud Storage

En este ejemplo, aprenderá a mover archivos de Microsoft Azure Storage a un segmento de Cloud Storage mediante un token de firma de acceso compartido (SAS) de Microsoft Azure Storage.

Para obtener más información sobre las SAS de Microsoft Azure Storage, consulta el artículo Conceder acceso limitado a recursos de Azure Storage mediante firmas de acceso compartido (SAS).

Antes de empezar, consulta las secciones Configurar el acceso a Microsoft Azure Storage y Precios para conocer las implicaciones de mover datos de Microsoft Azure Storage a Cloud Storage.

Go

Para saber cómo instalar y usar la biblioteca de cliente de Servicio de transferencia de Storage, consulta Bibliotecas de cliente de Servicio de transferencia de Storage. Para obtener más información, consulta la documentación de referencia de la API Go del Servicio de transferencia de Storage.

Para autenticarte en el Servicio de transferencia de Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

import (
	"context"
	"fmt"
	"io"
	"os"

	storagetransfer "cloud.google.com/go/storagetransfer/apiv1"
	"cloud.google.com/go/storagetransfer/apiv1/storagetransferpb"
)

func transferFromAzure(w io.Writer, projectID string, azureStorageAccountName string, azureSourceContainer string, gcsSinkBucket string) (*storagetransferpb.TransferJob, error) {
	// Your Google Cloud Project ID.
	// projectID := "my-project-id"

	// The name of your Azure Storage account.
	// azureStorageAccountName := "my-azure-storage-acc"

	// The name of the Azure container to transfer objects from.
	// azureSourceContainer := "my-source-container"

	// The name of the GCS bucket to transfer objects to.
	// gcsSinkBucket := "my-sink-bucket"

	ctx := context.Background()
	client, err := storagetransfer.NewClient(ctx)
	if err != nil {
		return nil, fmt.Errorf("storagetransfer.NewClient: %w", err)
	}
	defer client.Close()

	// The Azure SAS token, should be accessed via environment variable for security
	azureSasToken := os.Getenv("AZURE_SAS_TOKEN")

	req := &storagetransferpb.CreateTransferJobRequest{
		TransferJob: &storagetransferpb.TransferJob{
			ProjectId: projectID,
			TransferSpec: &storagetransferpb.TransferSpec{
				DataSource: &storagetransferpb.TransferSpec_AzureBlobStorageDataSource{
					AzureBlobStorageDataSource: &storagetransferpb.AzureBlobStorageData{
						StorageAccount: azureStorageAccountName,
						AzureCredentials: &storagetransferpb.AzureCredentials{
							SasToken: azureSasToken,
						},
						Container: azureSourceContainer,
					},
				},
				DataSink: &storagetransferpb.TransferSpec_GcsDataSink{
					GcsDataSink: &storagetransferpb.GcsData{BucketName: gcsSinkBucket}},
			},
			Status: storagetransferpb.TransferJob_ENABLED,
		},
	}
	resp, err := client.CreateTransferJob(ctx, req)
	if err != nil {
		return nil, fmt.Errorf("failed to create transfer job: %w", err)
	}
	if _, err = client.RunTransferJob(ctx, &storagetransferpb.RunTransferJobRequest{
		ProjectId: projectID,
		JobName:   resp.Name,
	}); err != nil {
		return nil, fmt.Errorf("failed to run transfer job: %w", err)
	}
	fmt.Fprintf(w, "Created and ran transfer job from %v to %v with name %v", azureSourceContainer, gcsSinkBucket, resp.Name)
	return resp, nil
}

Java

Para saber cómo instalar y usar la biblioteca de cliente de Servicio de transferencia de Storage, consulta Bibliotecas de cliente de Servicio de transferencia de Storage. Para obtener más información, consulta la documentación de referencia de la API Java del Servicio de transferencia de Storage.

Para autenticarte en el Servicio de transferencia de Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

import com.google.storagetransfer.v1.proto.StorageTransferServiceClient;
import com.google.storagetransfer.v1.proto.TransferProto;
import com.google.storagetransfer.v1.proto.TransferProto.RunTransferJobRequest;
import com.google.storagetransfer.v1.proto.TransferTypes.AzureBlobStorageData;
import com.google.storagetransfer.v1.proto.TransferTypes.AzureCredentials;
import com.google.storagetransfer.v1.proto.TransferTypes.GcsData;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferJob;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferJob.Status;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferSpec;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

public class TransferFromAzure {
  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    // Your Google Cloud Project ID
    String projectId = "my-project-id";

    // Your Azure Storage Account name
    String azureStorageAccount = "my-azure-account";

    // The Azure source container to transfer data from
    String azureSourceContainer = "my-source-container";

    // The GCS bucket to transfer data to
    String gcsSinkBucket = "my-sink-bucket";

    transferFromAzureBlobStorage(
        projectId, azureStorageAccount, azureSourceContainer, gcsSinkBucket);
  }

  /**
   * Creates and runs a transfer job to transfer all data from an Azure container to a GCS bucket.
   */
  public static void transferFromAzureBlobStorage(
      String projectId,
      String azureStorageAccount,
      String azureSourceContainer,
      String gcsSinkBucket)
      throws IOException, ExecutionException, InterruptedException {

    // Your Azure SAS token, should be accessed via environment variable
    String azureSasToken = System.getenv("AZURE_SAS_TOKEN");

    TransferSpec transferSpec =
        TransferSpec.newBuilder()
            .setAzureBlobStorageDataSource(
                AzureBlobStorageData.newBuilder()
                    .setAzureCredentials(
                        AzureCredentials.newBuilder().setSasToken(azureSasToken).build())
                    .setContainer(azureSourceContainer)
                    .setStorageAccount(azureStorageAccount))
            .setGcsDataSink(GcsData.newBuilder().setBucketName(gcsSinkBucket).build())
            .build();

    TransferJob transferJob =
        TransferJob.newBuilder()
            .setProjectId(projectId)
            .setStatus(Status.ENABLED)
            .setTransferSpec(transferSpec)
            .build();

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources,
    // or use "try-with-close" statement to do this automatically.
    try (StorageTransferServiceClient storageTransfer = StorageTransferServiceClient.create()) {
      // Create the transfer job
      TransferJob response =
          storageTransfer.createTransferJob(
              TransferProto.CreateTransferJobRequest.newBuilder()
                  .setTransferJob(transferJob)
                  .build());

      // Run the created job
      storageTransfer
          .runTransferJobAsync(
              RunTransferJobRequest.newBuilder()
                  .setProjectId(projectId)
                  .setJobName(response.getName())
                  .build())
          .get();

      System.out.println(
          "Created and ran a transfer job from "
              + azureSourceContainer
              + " to "
              + gcsSinkBucket
              + " with "
              + "name "
              + response.getName());
    }
  }
}

Node.js

Para saber cómo instalar y usar la biblioteca de cliente de Servicio de transferencia de Storage, consulta Bibliotecas de cliente de Servicio de transferencia de Storage. Para obtener más información, consulta la documentación de referencia de la API Node.js del Servicio de transferencia de Storage.

Para autenticarte en el Servicio de transferencia de Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.


// Imports the Google Cloud client library
const {
  StorageTransferServiceClient,
} = require('@google-cloud/storage-transfer');

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// The ID of the Google Cloud Platform Project that owns the job
// projectId = 'my-project-id'

// A useful description for your transfer job
// description = 'My transfer job'

// Azure Storage Account name
// azureStorageAccount = 'accountname'

// Azure Storage Account name
// azureSourceContainer = 'my-azure-source-bucket'

// Azure Shared Access Signature token
// azureSASToken = '?sv=...'

// Google Cloud Storage destination bucket name
// gcsSinkBucket = 'my-gcs-destination-bucket'

// Creates a client
const client = new StorageTransferServiceClient();

/**
 * Creates a one-time transfer job from Azure Blob Storage to Google Cloud Storage.
 */
async function transferFromBlobStorage() {
  // Setting the start date and the end date as the same time creates a
  // one-time transfer
  const now = new Date();
  const oneTimeSchedule = {
    day: now.getDate(),
    month: now.getMonth() + 1,
    year: now.getFullYear(),
  };

  // Runs the request and creates the job
  const [transferJob] = await client.createTransferJob({
    transferJob: {
      projectId,
      description,
      status: 'ENABLED',
      schedule: {
        scheduleStartDate: oneTimeSchedule,
        scheduleEndDate: oneTimeSchedule,
      },
      transferSpec: {
        azureBlobStorageDataSource: {
          azureCredentials: {
            sasToken: azureSASToken,
          },
          container: azureSourceContainer,
          storageAccount: azureStorageAccount,
        },
        gcsDataSink: {
          bucketName: gcsSinkBucket,
        },
      },
    },
  });

  console.log(
    `Created and ran a transfer job from '${azureSourceContainer}' to '${gcsSinkBucket}' with name ${transferJob.name}`
  );
}

transferFromBlobStorage();

Python

Para saber cómo instalar y usar la biblioteca de cliente de Servicio de transferencia de Storage, consulta Bibliotecas de cliente de Servicio de transferencia de Storage. Para obtener más información, consulta la documentación de referencia de la API Python del Servicio de transferencia de Storage.

Para autenticarte en el Servicio de transferencia de Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

from datetime import datetime

from google.cloud import storage_transfer


def create_one_time_azure_transfer(
    project_id: str,
    description: str,
    azure_storage_account: str,
    azure_sas_token: str,
    source_container: str,
    sink_bucket: str,
):
    """Creates a one-time transfer job from Azure Blob Storage to Google Cloud
    Storage."""

    # Initialize client that will be used to create storage transfer requests.
    # This client only needs to be created once, and can be reused for
    # multiple requests.
    client = storage_transfer.StorageTransferServiceClient()

    # The ID of the Google Cloud Platform Project that owns the job
    # project_id = 'my-project-id'

    # A useful description for your transfer job
    # description = 'My transfer job'

    # Azure Storage Account name
    # azure_storage_account = 'accountname'

    # Azure Shared Access Signature token
    # azure_sas_token = '?sv=...'

    # Azure Blob source container name
    # source_container = 'my-azure-source-bucket'

    # Google Cloud Storage destination bucket name
    # sink_bucket = 'my-gcs-destination-bucket'

    now = datetime.utcnow()
    # Setting the start date and the end date as
    # the same time creates a one-time transfer
    one_time_schedule = {"day": now.day, "month": now.month, "year": now.year}

    transfer_job_request = storage_transfer.CreateTransferJobRequest(
        {
            "transfer_job": {
                "project_id": project_id,
                "description": description,
                "status": storage_transfer.TransferJob.Status.ENABLED,
                "schedule": {
                    "schedule_start_date": one_time_schedule,
                    "schedule_end_date": one_time_schedule,
                },
                "transfer_spec": {
                    "azure_blob_storage_data_source": {
                        "storage_account": azure_storage_account,
                        "azure_credentials": {"sas_token": azure_sas_token},
                        "container": source_container,
                    },
                    "gcs_data_sink": {
                        "bucket_name": sink_bucket,
                    },
                },
            }
        }
    )

    result = client.create_transfer_job(transfer_job_request)
    print(f"Created transferJob: {result.name}")

Transferir desde un sistema de archivos

Consulta Transferir datos de un sistema de archivos a Cloud Storage.