Transfiere archivos o objetos específicos con un manifiesto

En esta página, se muestra cómo crear un manifiesto de objetos o archivos específicos que deseas transferir. Un manifiesto es un objeto de Cloud Storage en formato CSV que contiene una lista de archivos o objetos para que la Transferencia de datos locales actúe. Los manifiestos te permiten hacer lo siguiente:

  • Transfiere una lista específica de archivos de un sistema de archivos POSIX a un bucket de Cloud Storage.
  • Transfiere una lista específica de objetos de un bucket de Cloud Storage a un sistema de archivos POSIX.
  • Transfiere una lista específica de objetos de AWS S3, Azure Blobstore o Cloud Storage a un bucket de Cloud Storage.

Si especificas un manifiesto en createTransferJob, solo se transfieren los archivos o objetos enumerados en el manifiesto.

Crea un manifiesto de archivos o de objetos para una transferencia

Los manifiestos deben estar en el formato de archivo CSV y pueden contener cualquier carácter UTF-8. La primera columna debe ser una ruta de archivo o un nombre de objeto especificado como una string. Recomendamos probar la transferencia con un pequeño subconjunto de archivos o objetos para evitar realizar una gran cantidad de llamadas a la API desperdiciadas debido a errores de configuración.

Puedes supervisar el estado de las transferencias de archivos desde la página Trabajos de transferencia. Los archivos o los objetos que no se pueden transferir se enumeran en los registros de transferencia.

Manifiesto de los archivos

Si deseas crear un manifiesto de archivos desde un sistema de archivos POSIX para transferir a Cloud Storage, crea un archivo CSV con una sola columna que contenga las rutas de acceso a archivos relacionadas con root_directory en createTransferJob.

Ejemplo de manifiesto de archivos

Un manifiesto de los siguientes archivos:

Ruta de acceso al archivo
rootdir/dir1/subdir1/file1.txt
rootdir/File2.txt
rootdir/dir1/subdir1/file3.txt
rootdir/dir1/subdir4/file4.txt
rootdir/dir1/subdir1/file5.txt

se vería de la siguiente manera:

"dir1/subdir1/file1.txt"
"File2.txt"
"dir1/subdir1/file3.txt"
"dir1/subdir4/file4.txt"
"dir1/subdir1/file5.txt"

Manifiesto de los objetos

Para crear un manifiesto de objetos, crea un archivo CSV con la primera columna que contenga los nombres de los objetos relacionados con bucketName/path en createTransferJob. Si el nombre de un objeto contiene comas, deben escaparse de forma correcta según los estándares CSV. También puedes especificar una segunda columna opcional con la versión del objeto. Todos los objetos enumerados deben estar en un bucket que se especifica en la ruta de origen.

Ejemplo de manifiesto de objetos

Un manifiesto de los siguientes objetos:

Ruta de acceso del objeto Versión del objeto (opcional)
SOURCE_PATH/object1.pdf 15857022
SOURCE_PATH/object2.pdf 585902
SOURCE_PATH/object3.pdf 74845
SOURCE_PATH/object4.jpg 149937

se vería de la siguiente manera:

object1.pdf,15857022
object2.pdf,585902
object3.pdf,74845
object4.jpg,149937

Sube el manifiesto a la ubicación correcta

Una vez que creaste el manifiesto, súbelo a un bucket de Cloud Storage. El agente de servicio que ejecuta la transferencia debe tener el permiso storage.objects.get para el bucket en el que subes el archivo de manifiesto. Para obtener instrucciones sobre cómo otorgar permisos al agente de servicio, consulta Configura el acceso a la fuente de datos.

Puedes encriptar los manifiestos ubicados en un bucket de Cloud Storage mediante claves de encriptación de Cloud KMS administradas por el cliente. En este caso, asegúrate de que cualquier cuenta de servicio que acceda al manifiesto tenga asignadas las claves de encriptación aplicables. No se admiten las claves proporcionadas por el cliente.

Inicia una transferencia con el manifiesto especificado.

Para transferir los archivos o los objetos que se enumeran en el manifiesto, realiza una llamada a la API de createTransferJob que especifique un transferSpec con el campo transferManifest agregado. Por ejemplo:

POST https://storagetransfer.googleapis.com/v1/transferJobs

...
    "transferSpec": {
        "PosixFilesystem": {
            "root_directory": "/home/",
        },
        "gcsDataSink": {
            "bucketName": "GCS_NEARLINE_SINK_NAME",
            "path": "GCS_SINK_PATH",
        },
        "transferManifest": {
            "location": "gs://my_bucket/sample_manifest.csv"
        }
    }

Los objetos o archivos del manifiesto no se transfieren necesariamente en el orden indicado.

Si el manifiesto incluye archivos que ya existen en el destino, se omitirán.

Si el manifiesto incluye objetos que existen en una versión diferente del destino, el objeto en el destino se reemplaza por la versión de origen del objeto. Si el destino es un bucket con control de versiones, se crea una versión nueva del objeto. Si el objeto de destino es el mismo que el objeto de origen, el objeto se omite, a menos que se especifique overwriteObjectsAlreadyExistingInSink=true.

¿Qué sigue?