Transferir datos de un almacenamiento compatible con S3 a Cloud Storage

El Servicio de transferencia de Storage admite transferencias desde sistemas de almacenamiento de objetos en la nube o locales que sean compatibles con la API de Amazon S3.

El Servicio de transferencia de Storage accede a tus datos en el almacenamiento compatible con S3 mediante agentes de transferencia implementados en VMs cercanas a la fuente de datos. Estos agentes se ejecutan en un contenedor Docker y pertenecen a un grupo de agentes, que es un conjunto de agentes que usan la misma configuración y que transfieren sus datos en paralelo.

Esta función te permite migrar de un almacenamiento de objetos local o en la nube a Cloud Storage, archivar datos para liberar capacidad de almacenamiento local, replicar datos enGoogle Cloud para garantizar la continuidad del negocio o transferir datos aGoogle Cloud para analizarlos y procesarlos. Para los clientes que migren de AWS S3 a Cloud Storage, esta función ofrece una opción para controlar las rutas de red a Google Cloud, lo que se traduce en unos costes de transferencia de datos salientes considerablemente más bajos.

Antes de empezar

Antes de configurar las transferencias, completa los siguientes pasos:

Obtener credenciales de origen

Para transferir datos desde un almacenamiento compatible con S3, se necesitan un ID de clave de acceso y una clave de acceso secreta.

Los pasos para obtenerlos dependen de tu proveedor de almacenamiento.

La cuenta desde la que se generan el ID y la clave debe tener uno de los siguientes permisos:

  • Permiso de solo lectura en los objetos de origen si no quieres eliminar objetos del origen.
  • Acceso total a los objetos de origen, si decides eliminar objetos del origen como parte de la transferencia.

Una vez que hayas creado la cuenta, añadido los permisos y descargado el ID de clave de acceso y la clave de acceso secreta, guarda el ID y la clave en un lugar seguro.

Configurar Google Cloud permisos

Antes de crear una transferencia, debe configurar los permisos de las siguientes entidades:

La cuenta de usuario que se usa para crear la transferencia. Esta es la cuenta con la que se ha iniciado sesión en la consola Google Cloud o la cuenta que se ha especificado al autenticar la CLI de `gcloud`. La cuenta de usuario puede ser una cuenta de usuario normal o una cuenta de servicio gestionada por el usuario.
La cuenta de servicio gestionada por Google, también conocida como agente de servicio, que usa el Servicio de transferencia de Storage. Esta cuenta se identifica generalmente por su dirección de correo, que tiene el formato project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.
La cuenta de agente de transferencia que proporciona Google Cloud permisos a los agentes de transferencia. Las cuentas de agente de transferencia usan las credenciales del usuario que las instala o las credenciales de una cuenta de servicio gestionada por el usuario para autenticarse.

Consulta las instrucciones en Permisos de transferencia basados en agentes.

Opciones de transferencia

Las siguientes funciones del servicio de transferencia de Storage están disponibles para las transferencias de almacenamiento compatible con S3 a Cloud Storage:

Transferir archivos específicos mediante un manifiesto
Puedes enviar una lista de archivos para que el Servicio de transferencia de Storage actúe sobre ellos. Para obtener más información, consulta Transferir archivos u objetos específicos mediante un archivo de manifiesto.
Especificar una clase de almacenamiento
Puedes especificar la clase de almacenamiento de Cloud Storage que quieras usar para tus datos en el segmento de destino. Consulta las opciones de StorageClass para obtener información sobre REST o usa la marca --custom-storage-class con la CLI de Google Cloud.

Ten en cuenta que se ignorarán los ajustes de la clase de almacenamiento si el Autoclass está habilitado en el cubo de destino. Si Autoclass está habilitado, los objetos transferidos al segmento se asignan inicialmente al almacenamiento Estándar.

Preservación de metadatos

Al transferir archivos desde un almacenamiento compatible con S3, el Servicio de transferencia de Storage puede conservar ciertos atributos como metadatos personalizados.

Consulta la sección Almacenamiento compatible con Amazon S3 o S3 en Cloud Storage de Conservación de metadatos para obtener información sobre los metadatos que se pueden conservar y cómo configurar la transferencia.

Almacenamiento de registros y monitorización
Las transferencias desde almacenamiento compatible con S3 se pueden ver en Cloud Logging y Cloud Monitoring. Para obtener más información, consulta los artículos Cloud Logging para el Servicio de transferencia de Storage y Monitorizar tareas de transferencia. También puede configurar notificaciones de Pub/Sub.

Crear un grupo de agentes

No incluyas información sensible, como información personal identificable (IPI) o datos de seguridad, en el nombre del grupo de agentes ni en el prefijo del ID de agente. 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.

Para crear un grupo de agentes, sigue estos pasos:

Google Cloud consola

  1. En la Google Cloud consola, 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. Ponle un nombre a tu grupo y, si quieres, descríbelo.

  4. Puede definir un límite de ancho de banda que se aplique a todo el grupo. El ancho de banda especificado en MB/s se dividirá entre todos los agentes del grupo. Consulta más información en el artículo Gestionar el ancho de banda de la red.

  5. Haz clic en Crear.

API REST

Usa projects.agentPools.create:

POST https://storagetransfer.googleapis.com/v1/projects/PROJECT_ID/agentPools?agent_pool_id=AGENT_POOL_ID

Donde:

  • PROJECT_ID: el ID del proyecto en el que vas a crear el grupo de agentes.
  • AGENT_POOL_ID: el ID del grupo de agentes que vas a crear.

Si un grupo de agentes se queda en el estado Creating durante más de 30 minutos, te recomendamos que lo elimines y lo vuelvas a crear.

Si se revocan los permisos necesarios del Servicio de transferencia de Storage de un proyecto mientras un grupo de agentes está en el estado Creating, el servicio no funcionará correctamente.

CLI de gcloud

Para crear un grupo de agentes con la herramienta de línea de comandos gcloud, ejecuta [gcloud transfer agent-pools create][agent-pools-create].

gcloud transfer agent-pools create AGENT_POOL

Donde están disponibles las siguientes opciones:

  • AGENT_POOL es un identificador único y permanente de este grupo.

  • --no-async bloquea otras tareas en tu terminal hasta que se haya creado el grupo. Si no se incluye, la creación del grupo se ejecuta de forma asíncrona.

  • --bandwidth-limit define la cantidad de ancho de banda en MB/s que se va a poner a disposición de los agentes de este grupo. El límite de ancho de banda se aplica a todos los agentes de un grupo y puede ayudar a que la carga de trabajo de transferencia del grupo no afecte al resto de las operaciones que compartan tu ancho de banda. Por ejemplo, introduce "50" para definir un límite de ancho de banda de 50 MB/s. Si no se especifica esta marca, los agentes de este grupo usarán todo el ancho de banda disponible.

  • --display-name es un nombre modificable que te ayudará a identificar este grupo. Puedes incluir detalles que no quepan en el nombre completo único del recurso del grupo.

Instalar agentes de transferencia

Los agentes de transferencia son agentes de software que coordinan las actividades de transferencia desde tu origen a través del Servicio de transferencia de Storage. Deben instalarse en un sistema que tenga acceso a los datos de origen.

CLI de gcloud

Para instalar agentes que se usen con una fuente compatible con S3 mediante la CLI de gcloud, usa el comando transfer agents install.

Debe proporcionar las credenciales de acceso como variables de entorno con los valores de AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY, o bien almacenarlas como credenciales predeterminadas en los archivos de configuración de su sistema.

export AWS_ACCESS_KEY_ID=ID
export AWS_SECRET_ACCESS_KEY=SECRET
gcloud transfer agents install --pool=POOL_NAME

Para ejecutar agentes con una clave de cuenta de servicio, usa la opción --creds-file:

gcloud transfer agents install --pool=POOL_NAME \
  --creds-file=/relative/path/to/service-account-key.json

Crear una tarea de transferencia

Google Cloud consola

Sigue estos pasos para crear una transferencia desde una fuente compatible con S3 a un segmento de Cloud Storage.

  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. Seleccione Almacenamiento de objetos compatible con S3 como Tipo de fuente. El destino debe ser Google Cloud Storage.

    Haz clic en Siguiente paso.

Configurar una base de datos de origen

  1. Especifica la información necesaria para esta transferencia:

    1. Selecciona el grupo de agentes que has configurado para esta transferencia.

    2. Introduzca el nombre del segmento en relación con el endpoint. Por ejemplo, si tus datos se encuentran en:

      https://example.com/bucket_a

      Introduce: bucket_a

    3. Introduce el Endpoint. No incluyas el protocolo (http:// o https://) ni el nombre del segmento. Por ejemplo:

      example.com

  2. Especifique los atributos opcionales de esta transferencia:

    1. Introduce la región de firma que quieras usar para firmar las solicitudes.

    2. Elige el proceso de firma de esta solicitud.

    3. Selecciona el Estilo de tratamiento. Esto determina si el nombre del bucket se proporciona en el estilo de ruta (por ejemplo, https://example.com/bucket-name/key-name) o virtual alojado (por ejemplo, https://bucket-name.example.com/key-name). Consulta más información sobre el hosting virtual de los contenedores en la documentación de Amazon.

    4. Selecciona el protocolo de red.

    5. Selecciona la versión de la API de fichas que quieras usar. Consulta la documentación de ListObjectsV2 y ListObjects para obtener más información.

  3. Haz clic en Siguiente paso.

Configurar el receptor

  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.

Elegir la configuración de la transferencia

  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 Opciones de notificación, selecciona el tema de Pub/Sub y los eventos de los que quieres recibir notificaciones. Consulta Notificaciones de Pub/Sub para obtener más información.

  6. Haz clic en Siguiente paso.

Programar la transferencia

Puedes programar la transferencia para que se ejecute una sola vez o configurar una transferencia periódica.

Haz clic en Crear para crear la tarea de transferencia.

CLI de gcloud

Antes de usar la CLI de gcloud para crear una transferencia, sigue las instrucciones de Configurar el acceso a un receptor de Cloud Storage.

Para usar la CLI de gcloud para crear una transferencia desde una fuente compatible con S3 a un segmento de Cloud Storage, usa el siguiente comando.

gcloud transfer jobs create s3://SOURCE_BUCKET_NAME gs://SINK_BUCKET_NAME \
  --source-agent-pool=POOL_NAME \
  --source-endpoint=ENDPOINT \
  --source-signing-region=REGION \
  --source-auth-method=AWS_SIGNATURE_V2 | AWS_SIGNATURE_V4 \
  --source-request-model=PATH_STYLE | VIRTUAL_HOSTED_STYLE \
  --source-network-protocol=HTTP | HTTPS \
  --source-list-api=LIST_OBJECTS | LIST_OBJECTS_V2

Se necesitan las siguientes marcas:

  • --source-agent-pool es el nombre del grupo de agentes que se va a usar en esta transferencia.

  • --source-endpoint especifica el endpoint de tu sistema de almacenamiento. Por ejemplo, s3.us-east.example.com. Ponte en contacto con tu proveedor para obtener el formato correcto. No incluyas el protocolo (por ejemplo, https://) o el nombre del contenedor.

Las demás marcas son opcionales:

  • --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.REGION.example.com/BUCKET_NAME/KEY_NAME. El estilo de alojamiento virtual usa el formato `https://BUCKET_NAME.s3.REGION.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 más opciones de trabajos de transferencia, ejecuta gcloud transfer jobs create --help o consulta la documentación de referencia de gcloud.

API REST

Antes de usar la API REST para crear una transferencia, sigue las instrucciones que se indican en Configurar el acceso a un receptor de Cloud Storage.

Para crear una transferencia desde una fuente compatible con S3 mediante la API REST, crea un objeto JSON similar al del siguiente ejemplo.

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  ...
  "transferSpec": {
    "source_agent_pool_name":"POOL_NAME",
    "awsS3CompatibleData": {
      "region":"us-east-1",
      "s3Metadata":{
        "protocol": "NETWORK_PROTOCOL_HTTPS",
        "requestModel": "REQUEST_MODEL_VIRTUAL_HOSTED_STYLE",
        "authMethod": "AUTH_METHOD_AWS_SIGNATURE_V4"
      },
      "endpoint": "example.com",
      "bucketName": "BUCKET_NAME",
      "path": "PATH",
    },
    "gcsDataSink": {
      "bucketName": "SINK_NAME",
      "path": "SINK_PATH"
    },
    "transferOptions": {
      "deleteObjectsFromSourceAfterTransfer": false
    }
  }
}

Consulta las descripciones de los campos en la referencia de la API AwsS3CompatibleData.

Bibliotecas de cliente

Antes de usar las bibliotecas de cliente para crear una transferencia, sigue las instrucciones que se indican en Configurar el acceso a un receptor de 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"

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

func transferFromS3CompatibleSource(w io.Writer, projectID string, sourceAgentPoolName string, sourceBucketName string, sourcePath string, gcsSinkBucket string, gcsPath string) (*storagetransferpb.TransferJob, error) {
	// Your project id.
	// projectId := "my-project-id"

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

	// The S3 compatible bucket name to transfer data from.
	//sourceBucketName = "my-bucket-name"

	// The S3 compatible path (object prefix) to transfer data from.
	//sourcePath = "path/to/data"

	// The ID of the GCS bucket to transfer data to.
	//gcsSinkBucket = "my-sink-bucket"

	// The GCS path (object prefix) to transfer data to.
	//gcsPath = "path/to/data"

	// The S3 region of the source bucket.
	region := "us-east-1"

	// The S3 compatible endpoint.
	endpoint := "us-east-1.example.com"

	// The S3 compatible network protocol.
	protocol := storagetransferpb.S3CompatibleMetadata_NETWORK_PROTOCOL_HTTPS

	// The S3 compatible request model.
	requestModel := storagetransferpb.S3CompatibleMetadata_REQUEST_MODEL_VIRTUAL_HOSTED_STYLE

	// The S3 Compatible auth method.
	authMethod := storagetransferpb.S3CompatibleMetadata_AUTH_METHOD_AWS_SIGNATURE_V4

	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_AwsS3CompatibleDataSource{
					AwsS3CompatibleDataSource: &storagetransferpb.AwsS3CompatibleData{
						BucketName: sourceBucketName,
						Path:       sourcePath,
						Endpoint:   endpoint,
						Region:     region,
						DataProvider: &storagetransferpb.AwsS3CompatibleData_S3Metadata{
							S3Metadata: &storagetransferpb.S3CompatibleMetadata{
								AuthMethod:   authMethod,
								RequestModel: requestModel,
								Protocol:     protocol,
							},
						},
					}},
				DataSink: &storagetransferpb.TransferSpec_GcsDataSink{
					GcsDataSink: &storagetransferpb.GcsData{
						BucketName: gcsSinkBucket,
						Path:       gcsPath,
					},
				},
			},
			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", sourceBucketName, 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 static com.google.storagetransfer.v1.proto.TransferTypes.S3CompatibleMetadata.AuthMethod;
import static com.google.storagetransfer.v1.proto.TransferTypes.S3CompatibleMetadata.NetworkProtocol;
import static com.google.storagetransfer.v1.proto.TransferTypes.S3CompatibleMetadata.RequestModel;

import com.google.storagetransfer.v1.proto.StorageTransferServiceClient;
import com.google.storagetransfer.v1.proto.TransferProto;
import com.google.storagetransfer.v1.proto.TransferTypes;
import com.google.storagetransfer.v1.proto.TransferTypes.GcsData;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferJob;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferSpec;
import java.io.IOException;

public class TransferFromS3CompatibleSource {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.

    // Your project id
    String projectId = "my-project-id";

    // The agent pool associated with the S3 compatible data source. If not provided, defaults to
    // the default agent
    String sourceAgentPoolName = "projects/my-project-id/agentPools/transfer_service_default";

    // The S3 compatible bucket name to transfer data from
    String sourceBucketName = "my-bucket-name";

    // The S3 compatible path (object prefix) to transfer data from
    String sourcePath = "path/to/data";

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

    // The GCS path (object prefix) to transfer data to
    String gcsPath = "path/to/data";

    // The S3 region of the source bucket
    String region = "us-east-1";

    // The S3 compatible endpoint
    String endpoint = "us-east-1.example.com";

    // The S3 compatible network protocol
    NetworkProtocol protocol = NetworkProtocol.NETWORK_PROTOCOL_HTTPS;

    // The S3 compatible request model
    RequestModel requestModel = RequestModel.REQUEST_MODEL_VIRTUAL_HOSTED_STYLE;

    // The S3 Compatible auth method
    AuthMethod authMethod = AuthMethod.AUTH_METHOD_AWS_SIGNATURE_V4;

    transferFromS3CompatibleSource(
        projectId,
        sourceAgentPoolName,
        sourceBucketName,
        sourcePath,
        region,
        endpoint,
        protocol,
        requestModel,
        authMethod,
        gcsSinkBucket,
        gcsPath);
  }

  public static void transferFromS3CompatibleSource(
      String projectId,
      String sourceAgentPoolName,
      String sourceBucketName,
      String sourcePath,
      String region,
      String endpoint,
      NetworkProtocol protocol,
      RequestModel requestModel,
      AuthMethod authMethod,
      String gcsSinkBucket,
      String gcsPath)
      throws IOException {
    TransferJob transferJob =
        TransferJob.newBuilder()
            .setProjectId(projectId)
            .setTransferSpec(
                TransferSpec.newBuilder()
                    .setSourceAgentPoolName(sourceAgentPoolName)
                    .setAwsS3CompatibleDataSource(
                        TransferTypes.AwsS3CompatibleData.newBuilder()
                            .setRegion(region)
                            .setEndpoint(endpoint)
                            .setBucketName(sourceBucketName)
                            .setPath(sourcePath)
                            .setS3Metadata(
                                TransferTypes.S3CompatibleMetadata.newBuilder()
                                    .setProtocol(protocol)
                                    .setRequestModel(requestModel)
                                    .setAuthMethod(authMethod)
                                    .build())
                            .build())
                    .setGcsDataSink(
                        GcsData.newBuilder().setBucketName(gcsSinkBucket).setPath(gcsPath).build()))
            .setStatus(TransferJob.Status.ENABLED)
            .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());

      System.out.println(
          "Created a transfer job from "
              + sourceBucketName
              + " 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 storageTransfer = require('@google-cloud/storage-transfer');

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// Useful enums for AWS S3-Compatible Transfers
// const {AuthMethod, NetworkProtocol, RequestModel} = storageTransfer.protos.google.storagetransfer.v1.S3CompatibleMetadata;

// Your project id
// const projectId = 'my-project';

// The agent pool associated with the S3-compatible data source. Defaults to the default agent
// const sourceAgentPoolName = 'projects/my-project/agentPools/transfer_service_default';

// The S3-compatible bucket name to transfer data from
// const sourceBucketName = "my-bucket-name";

// The S3-compatible path (object prefix) to transfer data from
// const sourcePath = "path/to/data/";

// The ID of the GCS bucket to transfer data to
// const gcsSinkBucket = "my-sink-bucket";

// The GCS path (object prefix) to transfer data to
// const gcsPath = "path/to/data/";

// The S3 region of the source bucket
// const region = 'us-east-1';

// The S3-compatible endpoint
// const endpoint = "us-east-1.example.com";

// The S3-compatible network protocol
// const protocol = NetworkProtocol.NETWORK_PROTOCOL_HTTPS;

// The S3-compatible request model
// const requestModel = RequestModel.REQUEST_MODEL_VIRTUAL_HOSTED_STYLE;

// The S3-compatible auth method
// const authMethod = AuthMethod.AUTH_METHOD_AWS_SIGNATURE_V4;

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

/**
 * Creates a transfer from an AWS S3-compatible source to GCS
 */
async function transferFromS3CompatibleSource() {
  // Runs the request and creates the job
  const [transferJob] = await client.createTransferJob({
    transferJob: {
      projectId,
      transferSpec: {
        sourceAgentPoolName,
        awsS3CompatibleDataSource: {
          region,
          s3Metadata: {
            authMethod,
            protocol,
            requestModel,
          },
          endpoint,
          bucketName: sourceBucketName,
          path: sourcePath,
        },
        gcsDataSink: {
          bucketName: gcsSinkBucket,
          path: gcsPath,
        },
      },
      status: 'ENABLED',
    },
  });

  await client.runTransferJob({
    jobName: transferJob.name,
    projectId,
  });

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

transferFromS3CompatibleSource();

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 google.cloud import storage_transfer

AuthMethod = storage_transfer.S3CompatibleMetadata.AuthMethod
NetworkProtocol = storage_transfer.S3CompatibleMetadata.NetworkProtocol
RequestModel = storage_transfer.S3CompatibleMetadata.RequestModel


def transfer_from_S3_compat_to_gcs(
    project_id: str,
    description: str,
    source_agent_pool_name: str,
    source_bucket_name: str,
    source_path: str,
    gcs_sink_bucket: str,
    gcs_path: str,
    region: str,
    endpoint: str,
    protocol: NetworkProtocol,
    request_model: RequestModel,
    auth_method: AuthMethod,
) -> None:
    """Creates a transfer from an AWS S3-compatible source to GCS"""

    client = storage_transfer.StorageTransferServiceClient()

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

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

    # The agent pool associated with the S3-compatible data source.
    # Defaults to 'projects/{project_id}/agentPools/transfer_service_default'
    # source_agent_pool_name = 'projects/my-project/agentPools/my-agent'

    # The S3 compatible bucket name to transfer data from
    # source_bucket_name = "my-bucket-name"

    # The S3 compatible path (object prefix) to transfer data from
    # source_path = "path/to/data/"

    # The ID of the GCS bucket to transfer data to
    # gcs_sink_bucket = "my-sink-bucket"

    # The GCS path (object prefix) to transfer data to
    # gcs_path = "path/to/data/"

    # The S3 region of the source bucket
    # region = 'us-east-1'

    # The S3-compatible endpoint
    # endpoint = "us-east-1.example.com"

    # The S3-compatible network protocol
    # protocol = NetworkProtocol.NETWORK_PROTOCOL_HTTPS

    # The S3-compatible request model
    # request_model = RequestModel.REQUEST_MODEL_VIRTUAL_HOSTED_STYLE

    # The S3-compatible auth method
    # auth_method = AuthMethod.AUTH_METHOD_AWS_SIGNATURE_V4

    transfer_job_request = storage_transfer.CreateTransferJobRequest(
        {
            "transfer_job": {
                "project_id": project_id,
                "description": description,
                "status": storage_transfer.TransferJob.Status.ENABLED,
                "transfer_spec": {
                    "source_agent_pool_name": source_agent_pool_name,
                    "aws_s3_compatible_data_source": {
                        "region": region,
                        "s3_metadata": {
                            "auth_method": auth_method,
                            "protocol": protocol,
                            "request_model": request_model,
                        },
                        "endpoint": endpoint,
                        "bucket_name": source_bucket_name,
                        "path": source_path,
                    },
                    "gcs_data_sink": {
                        "bucket_name": gcs_sink_bucket,
                        "path": gcs_path,
                    },
                },
            }
        }
    )

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

Preguntas frecuentes

¿Tiene algún coste la transferencia desde un almacenamiento compatible con S3?

Las transferencias desde almacenamiento compatible con S3 no conllevan la tarifa "Transferencias del Servicio de transferencia de almacenamiento que requieren agentes". Consulta la página Precios para ver otras tarifas que puedan aplicarse. Es posible que el proveedor de servicios en la nube de origen aplique cargos por operaciones y de salida para la transferencia de datos salientes.

¿Se admite Cloud Logging para las transferencias de almacenamiento compatible con S3?

Sí, puedes habilitar Cloud Logging para tus transferencias siguiendo las instrucciones que se indican en Cloud Logging para el servicio de transferencia de Storage.

¿Se admiten las transferencias mediante un manifiesto?

Sí, se admiten archivos de manifiesto para las transferencias compatibles con S3.

Si añado un objeto al contenedor de origen después de que se haya iniciado el trabajo, ¿se transferirá ese objeto?

El Servicio de transferencia de Storage realiza una operación de lista en el segmento de origen para calcular la diferencia con el destino. Si la operación de lista ya se ha completado cuando se añade el nuevo objeto, se omitirá ese objeto hasta la siguiente transferencia.

¿El Servicio de transferencia de Storage realiza una comprobación de la suma de comprobación en las fuentes compatibles con S3?

El Servicio de transferencia de Storage depende de que la fuente devuelva datos de suma de comprobación. En el caso del almacenamiento compatible con S3, el Servicio de transferencia de Storage espera que el Etag del objeto sea el hash MD5 del objeto.

Sin embargo, los objetos que se hayan transferido al almacenamiento compatible con S3 mediante la subida multiparte de S3 no tendrán etiquetas ETag MD5. En este caso, el Servicio de transferencia de Storage usa el tamaño del archivo para validar el objeto transferido.

¿Qué rendimiento se puede conseguir en las transferencias desde almacenamiento compatible con S3?

Puedes aumentar el rendimiento de la transferencia añadiendo más agentes de transferencia. Recomendamos usar 3 agentes para la tolerancia a fallos y para llenar una tubería de <10 Gbps. Para ampliar la escala, añade más agentes. Los agentes se pueden añadir y quitar mientras se esté procesando una transferencia.

¿Dónde se deben implementar los agentes de transferencia para transferir datos de Amazon S3 a Cloud Storage?

Puede instalar agentes en Amazon EC2 o EKS en la misma región que su segmento. También puedes ejecutar agentes en Google Cloud en la región más cercana.