Transferir datos entre sistemas de archivos

En esta página se explica cómo transferir datos entre dos sistemas de archivos POSIX. Entre los casos de uso habituales se incluyen los siguientes:

  • Transferencia a la nube y HPC híbrida: transfiere rápidamente grandes conjuntos de datos de entornos locales a la nube para procesarlos.
  • Migración y sincronización con Filestore: migra o sincroniza datos de un sistema de archivos local a Filestore.
  • Transferencia de archivos gestionada: transfiere datos de forma segura y fiable entre centros de datos o entre dos sistemas de archivos en la nube.

Directrices de rendimiento de las transferencias

Las siguientes directrices pueden ayudarle a maximizar el rendimiento durante las transferencias de un sistema de archivos a otro.

Despliegue de agentes

Por lo general, recomendamos usar tres agentes en cada uno de los grupos de agentes de origen y de destino. Monitoriza la transferencia y añade más agentes si es necesario. Cada agente necesita 4 vCPUs y 8 GiB de RAM.

Si vas a migrar a una instancia de Filestore, Filestore recomienda usar el tipo de instancia n2-standard-8 para cada agente. Especifica nconnect=2 cuando montes la instancia en una VM de Compute Engine. Consulta las directrices de rendimiento de Filestore para obtener más información sobre cómo optimizar y probar el rendimiento de las instancias.

Transferir un gran número de archivos pequeños

Para mejorar el rendimiento al transferir un gran número de archivos pequeños, te recomendamos que dividas los archivos en varios directorios y que evites tener un solo directorio con millones de archivos.

Antes de empezar

Antes de realizar las tareas que se describen en esta página, completa los pasos necesarios.

Crear grupos de agentes e instalar agentes

Para las transferencias de un sistema de archivos a otro, debes crear grupos de agentes y agentes para los sistemas de archivos de origen y de destino. Los agentes del grupo de agentes de origen deben instalarse en máquinas o VMs que tengan acceso al sistema de archivos de origen. Los agentes del grupo de agentes de destino deben instalarse en máquinas o VMs que tengan acceso al sistema de archivos de destino.

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

Crear un grupo de agentes de origen

Crea un grupo de agentes de origen con uno de los siguientes métodos:

CLI de gcloud

Crea un grupo de agentes de origen ejecutando el siguiente comando:

gcloud transfer agent-pools create SOURCE_AGENT_POOL

Sustituye SOURCE_AGENT_POOL por el nombre que quieras asignar al grupo de agentes de origen.

Google Cloud console

  1. En la consola de Google Cloud , ve a la página Grupos de agentes.

    Ir a Grupos de agentes

    Se muestra la página Grupos de agentes, con los grupos de agentes que ya tienes.

  2. Haz clic en Crear otro grupo.

  3. Introduce un nombre para el grupo.

  4. Haz clic en Crear.

Instalar agentes para el grupo de agentes de origen

Instala agentes para el grupo de agentes de origen en una máquina o una VM que tenga acceso al sistema de archivos de origen:

CLI de gcloud

Instala agentes para el grupo de agentes de origen ejecutando el siguiente comando:

gcloud transfer agents install --pool=SOURCE_AGENT_POOL --count=NUMBER_OF_AGENTS \
  --mount-directories=MOUNT_DIRECTORIES

Haz los cambios siguientes:

  • SOURCE_AGENT_POOL con el nombre del grupo de agentes de origen.
  • NUMBER_OF_AGENTS con el número de agentes que quieras instalar en el grupo de agentes de origen. Para determinar el número óptimo de agentes para tu entorno, consulta los requisitos y las prácticas recomendadas para agentes.
  • MOUNT_DIRECTORIES con una lista de directorios separada por comas en el sistema de archivos de origen desde el que se copiarán los archivos. Si se omite esta marca, se monta todo el sistema de archivos, lo que podría suponer un riesgo de seguridad.

Google Cloud console

  1. En la consola de Google Cloud , ve a la página Grupos de agentes.

    Ir a Grupos de agentes

    Se muestra la página Grupos de agentes, con los grupos de agentes que ya tienes.

  2. Haga clic en el nombre del grupo de agentes de origen que acaba de crear.

  3. En la pestaña Agentes, haz clic en Instalar agente.

  4. Sigue las instrucciones de la Google Cloud consola para instalar Docker e iniciar el agente.

Crear un grupo de agentes de destino e instalar agentes

Repite los pasos anteriores para crear un grupo de agentes de destino e instalar agentes.

Crear un segmento de Cloud Storage como intermediario

Para transferir datos de un sistema de archivos a otro, se necesita un segmento de Cloud Storage como intermediario.

  1. Crea un segmento de clase Standard de Cloud Storage con los siguientes ajustes:

    • Cifrado: puedes especificar una clave de cifrado gestionada por el cliente (CMEK). De lo contrario, se usaGoogle-owned and Google-managed encryption key .
    • Gestión de versiones de objetos, Bloqueo de segmentos y bloqueos de objetos predeterminados: mantén estas funciones inhabilitadas.
  2. Concede permisos y roles mediante uno de los siguientes métodos:

    • Asigna a la cuenta de servicio de Servicio de transferencia de Storage el rol Administrador de Storage (roles/storage.admin) del segmento.
    • Usa gcloud transfer authorize para autorizar tu cuenta en todas las funciones de Storage Transfer Service. Este comando concede permisos de administrador de Storage en todo el proyecto:

      gcloud transfer authorize --add-missing
      

Crear una tarea de transferencia

CLI de gcloud

Para crear una transferencia del sistema de archivos de origen al de destino, ejecuta

gcloud transfer jobs create SOURCE_DIRECTORY DESTINATION_DIRECTORY \
    --source-agent-pool=SOURCE_AGENT_POOL \
    --destination-agent-pool=DESTINATION_AGENT_POOL \
    --intermediate-storage-path= gs://STORAGE_BUCKET/FOLDER/

Sustituye las siguientes variables:

  • SOURCE_DIRECTORY con la ruta del directorio de origen.
  • DESTINATION_DIRECTORY con la ruta del directorio de destino.
  • SOURCE_AGENT_POOL con el nombre del grupo de agentes de origen.
  • DESTINATION_AGENT_POOL con el nombre del grupo de agentes de destino.
  • STORAGE_BUCKET con el nombre del segmento de Cloud Storage.
  • FOLDER con el nombre de la carpeta a la que quieras transferir los datos.

Cuando inicias una tarea de transferencia, el sistema primero calcula los datos de origen y de destino para determinar los datos de origen que son nuevos o que se han actualizado desde la transferencia anterior. Solo se transfieren los datos nuevos.

Bibliotecas de cliente

Go


import (
	"context"
	"fmt"
	"io"

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

func transferFromPosix(w io.Writer, projectID string, sourceAgentPoolName string, rootDirectory string, gcsSinkBucket string) (*storagetransferpb.TransferJob, error) {
	// Your project id
	// projectId := "myproject-id"

	// The agent pool associated with the POSIX data source. If not provided, defaults to the default agent
	// sourceAgentPoolName := "projects/my-project/agentPools/transfer_service_default"

	// The root directory path on the source filesystem
	// rootDirectory := "/directory/to/transfer/source"

	// The ID of the GCS bucket to transfer data 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()

	req := &storagetransferpb.CreateTransferJobRequest{
		TransferJob: &storagetransferpb.TransferJob{
			ProjectId: projectID,
			TransferSpec: &storagetransferpb.TransferSpec{
				SourceAgentPoolName: sourceAgentPoolName,
				DataSource: &storagetransferpb.TransferSpec_PosixDataSource{
					PosixDataSource: &storagetransferpb.PosixFilesystem{RootDirectory: rootDirectory},
				},
				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,