Transferir datos de Amazon S3 a Cloud Storage

En esta página se explica cómo crear y empezar trabajos de transferencia de Amazon S3 a Cloud Storage.

Configurar permisos

Antes de crear una transferencia, debe configurar los permisos en su contenedor de Amazon S3. Para obtener más información, consulta el artículo Configurar el acceso a una fuente: Amazon S3.

También debe configurar los permisos de las siguientes entidades deGoogle Cloud :

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.

Consulta las instrucciones en Permisos de transferencia sin agente.

Opciones de salida

Servicio de transferencia de Storage ofrece varias opciones para transferir tus datos de S3 a Cloud Storage.

Opción de salida Descripción
Sin agente predeterminado Esta opción usa una transferencia gestionada y sin agentes desde S3. Amazon te cobra por la salida.

Sigue las instrucciones de esta página para usar esta opción.
Distribución de CloudFront Usa una distribución de Amazon CloudFront como ruta de salida. Las transferencias de datos a través de CloudFront pueden beneficiarse de costes de salida de AWS más bajos en comparación con la transferencia directa desde S3. Para obtener más información, consulta los precios de CloudFront y los cargos de salida de S3.

Sigue las instrucciones de Transferir desde S3 a través de CloudFront para configurar tu distribución y crear una transferencia.
Red privada gestionada Transfiere tus datos a través de una red gestionada por Google. No pagas gastos de salida de S3, sino una tarifa por GiB aGoogle Cloud. Consulta la página Precios para obtener más información. Es posible que AWS te siga cobrando por las operaciones (por ejemplo, LIST o GET llamadas). Consulta sus precios para obtener más información.

Todas las transferencias de los proyectos a través de la red privada gestionada comparten el mismo ancho de banda. En momentos de mucho uso, la transferencia puede ir más lenta. Las transferencias con archivos grandes se ven más afectadas que las que tienen archivos pequeños.

Siga las instrucciones de esta página para usar esta opción. Especifica la opción Red privada gestionada en la consola Google Cloud o el campo managedPrivateNetwork en la API REST. La CLI de gcloud y las bibliotecas de cliente no admiten transferencias de redes privadas gestionadas. Consulta las regiones admitidas.
Impulsado por agentes Válido para todo el almacenamiento compatible con S3, incluido Amazon S3. Si instalas el software del agente en máquinas con acceso a tus segmentos de S3, puedes controlar la ruta de red y el ancho de banda. Esta opción requiere agentes y grupos de agentes.

Sigue las instrucciones de la sección Transferir desde fuentes compatibles con S3 para usar esta opción.

Regiones disponibles

Storage Transfer Service admite las siguientes regiones de Amazon S3:
af-south-1
ap-east-1
ap-northeast-1
ap-northeast-2
ap-northeast-3
ap-south-1
ap-south-2
ap-southeast-1
ap-southeast-2
ap-southeast-3
ap-southeast-4
ca-central-1
ca-west-1
eu-central-1
eu-central-2
eu-north-1
eu-south-1
eu-south-2
eu-west-1
eu-west-2
eu-west-3
il-central-1
me-central-1
me-south-1
sa-east-1
us-east-1
us-east-2
us-west-1
us-west-2
Las transferencias que usan la red privada gestionada admiten las siguientes regiones de AWS:
ap-east-1
ap-northeast-1
ap-northeast-2
ap-northeast-3
ap-south-1
ap-south-2
ap-southeast-1
ca-central-1
ca-west-1
eu-central-1
eu-central-2
eu-north-1
eu-south-1
eu-south-2
eu-west-1
eu-west-2
eu-west-3
us-east-1
us-east-2
us-west-1
us-west-2
 

Opciones de transferencia

Las siguientes funciones del Servicio de transferencia de Storage están disponibles para las transferencias de 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.
Filtrar objetos de origen por prefijo o por fecha de última modificación

Puede incluir o excluir objetos de la transferencia en función del nombre y la ruta del archivo, o bien de la hora de la última modificación.

Los filtros de prefijo se describen en la sección Filtros de prefijo.

Los filtros basados en el tiempo son los siguientes:

  • Tiempo mínimo y máximo transcurrido desde la última modificación. Ambos aceptan un valor en segundos para filtrar los objetos que se han modificado o no en un periodo determinado.
  • Última modificación desde y Última modificación anterior a, que aceptan un valor de fecha y hora.

Ten en cuenta que los filtros basados en el tiempo de las transferencias de S3 se basan en la definición de AWS de "hora de la última modificación", que es la hora en la que un objeto empieza a subirse. Como un objeto no está disponible hasta que finaliza la subida, es posible que encuentres objetos cuya hora de última modificación cumpla los criterios de tu filtro, pero que aún se estén subiendo. Estos objetos no se incluirán en tu tarea de transferencia. Para evitar problemas, te recomendamos que hagas lo siguiente:

  • En lugar de filtros basados en el tiempo, usa [transferencias basadas en eventos](/storage-transfer/docs/event-driven-aws) para transferir objetos a medida que estén disponibles.
  • Para evitar que falten objetos en las transferencias periódicas, la ventana retrospectiva "hora de última modificación" debe ser mayor que la programación periódica. Por ejemplo, en el caso de una tarea que se ejecuta cada hora, un periodo retrospectivo de dos horas proporciona un margen.
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 S3, el Servicio de transferencia de Storage puede conservar de forma opcional determinados atributos como metadatos personalizados.

Consulta la sección De Amazon S3 a Cloud Storage de Conservación de metadatos para obtener información sobre los metadatos que se pueden conservar y cómo configurar la transferencia.

Transferencias basadas en eventos
Storage Transfer Service puede monitorizar las notificaciones de eventos de Amazon S3 enviadas a Amazon SQS para transferir automáticamente los datos que se hayan añadido o actualizado en la ubicación de origen. Para obtener más información, consulta el artículo sobre las transferencias basadas en eventos.
Almacenamiento de registros y monitorización
Las transferencias desde 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 una transferencia

El Servicio de transferencia de Storage ofrece varias interfaces para 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. En Tipo de fuente, selecciona Amazon S3.

  4. En Tipo de destino, seleccione Google Cloud Storage.

  5. 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.

  6. Haz clic en Siguiente paso.

  7. En el campo Nombre del segmento o de la carpeta, introduce el nombre del segmento de origen.

    El nombre del contenedor es el nombre tal como aparece en la consola de administración de AWS.

  8. Si usas una distribución de CloudFront para transferir datos de S3, introduce el nombre de dominio de la distribución en el campo Dominio de CloudFront. Por ejemplo, https://dy1h2n3l4ob56.cloudfront.net. Consulta Transferir desde S3 a través de CloudFront para configurar una distribución de CloudFront.

  9. Para usar una red privada gestionada en esta transferencia, marca la casilla. Consulta más información sobre las opciones de salida.

  10. Selecciona tu método de autenticación de Amazon Web Services (AWS). Para obtener más información, consulta el artículo sobre cómo configurar el acceso a una fuente: Amazon S3.

    • Clave de acceso: introduce tu clave de acceso en el campo ID de clave de acceso y el secreto asociado a tu clave de acceso en el campo Clave de acceso secreta.

    • Rol de gestión de identidades y accesos de AWS para la federación de identidades: introduce tu ARN en el campo ARN de rol de gestión de identidades y accesos de AWS con la siguiente sintaxis:

      arn:aws:iam::ACCOUNT:role/ROLE-NAME-WITH-PATH
      

      Donde:

      • ACCOUNT: el ID de cuenta de AWS sin guiones.
      • ROLE-NAME-WITH-PATH: nombre del rol de AWS, incluida la ruta.

      Para obtener más información sobre los ARNs, consulta ARNs de gestión de identidades y accesos.

    • Recurso secreto: selecciona esta opción para usar una credencial de Amazon guardada en Secret Manager. Selecciona un secreto de la lista o introduce uno manualmente con el formato projects/PROJECT_NUMBER/secrets/SECRET_NAME.

  11. Si se trata de una transferencia basada en eventos, introduce el ARN de la cola de Amazon SQS, que tiene el siguiente formato:

    arn:aws:sqs:us-east-1:1234567890:event-queue
    
  12. 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.
  13. Haz clic en Siguiente paso.

  14. 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.

  15. Haz clic en Siguiente paso.

  16. Elige la configuración del trabajo de 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.

  17. Haz clic en Siguiente paso.

  18. 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.

    3. 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.

La CLI de gcloud no admite transferencias a través de CloudFront ni de una red privada gestionada.

gcloud transfer jobs create \
  s3://S3_BUCKET_NAME gs://STORAGE_BUCKET_NAME \
  --source-creds-file="relative_path/to/creds.json"

Donde:

  • S3_BUCKET_NAME es la fuente de datos de esta transferencia. Puedes incluir una ruta de forma opcional: s3://S3_BUCKET_NAME/S3_FOLDER_PATH

  • STORAGE_BUCKET_NAME es el segmento de Cloud Storage al que se va a transferir. Para transferir archivos a un directorio específico, especifica gs://STORAGE_BUCKET_NAME/STORAGE_FOLDER_PATH/, incluida la barra al final.

  • --source-creds-file especifica la ruta relativa a un archivo local de tu ordenador que incluye las credenciales de AWS de la fuente de transferencia. El contenido debe tener el siguiente formato JSON:

    {
      "accessKeyId": string,
      "secretAccessKey": string
    }

Entre las opciones adicionales se incluyen:

  • --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 y --description.

  • 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.

  • 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 con --log-actions y --log-action-states. Consulta más información en Cloud Logging para el Servicio de transferencia de Storage.

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

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.

Cuando crees trabajos de transferencia, no incluyas el prefijo s3:// para bucketName en los nombres de origen de los segmentos de Amazon S3.

Transferencia sin agentes

En el siguiente ejemplo se crea una tarea de transferencia con la configuración estándar sin agente. Consulta la referencia de transferJobs.create para obtener más información.

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "description": "DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
      "awsS3DataSource": {
          "bucketName": "AWS_SOURCE_NAME",
          "awsAccessKey": {
            "accessKeyId": "AWS_ACCESS_KEY_ID",
            "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
          }
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME"
      }
  }
}

Consulta Configurar el acceso a una fuente: Amazon S3 para ver otras opciones de autenticación.

Distribución de CloudFront

Si vas a transferir datos desde S3 a través de una distribución de CloudFront, especifica el nombre de dominio de la distribución como valor del campo transferSpec.awsS3DataSource.cloudfrontDomain:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "description": "DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
      "awsS3DataSource": {
          "bucketName": "AWS_SOURCE_NAME",
          "cloudfrontDomain": "https://dy1h2n3l4ob56.cloudfront.net",
          "awsAccessKey": {
            "accessKeyId": "AWS_ACCESS_KEY_ID",
            "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
          }
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME"
      }
  }
}

Red privada gestionada

Para transferir datos desde S3 mediante una red privada gestionada por Google, especifica el campo transferSpec.awsS3DataSource.managedPrivateNetwork:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "description": "DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
      "awsS3DataSource": {
          "bucketName": "AWS_SOURCE_NAME",
          "managedPrivateNetwork": TRUE,
          "awsAccessKey": {
            "accessKeyId": "AWS_ACCESS_KEY_ID",
            "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
          }
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME"
      }
  }
}

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 de Amazon S3 a Cloud Storage

En este ejemplo, aprenderá a mover archivos de Amazon S3 a un segmento de Cloud Storage.

Cuando crees trabajos de transferencia, no incluyas el prefijo s3:// para bucketName en los nombres de origen de los segmentos de Amazon S3.

Las bibliotecas cliente de Storage Transfer Service no admiten transferencias a través de CloudFront ni de una red privada gestionada.

Go

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

	storagetransfer "cloud.google.com/go/storagetransfer/apiv1"
	"cloud.google.com/go/storagetransfer/apiv1/storagetransferpb"
	"google.golang.org/genproto/googleapis/type/date"
	"google.golang.org/genproto/googleapis/type/timeofday"
)

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

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

	// 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()

	// A description of this job
	jobDescription := "Transfers objects from an AWS bucket to a GCS bucket"

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

	// The AWS access key credential, should be accessed via environment variable for security
	awsAccessKeyID := os.Getenv("AWS_ACCESS_KEY_ID")

	// The AWS secret key credential, should be accessed via environment variable for security
	awsSecretKey := os.Getenv("AWS_SECRET_ACCESS_KEY")

	req := &storagetransferpb.CreateTransferJobRequest{
		TransferJob: &storagetransferpb.TransferJob{
			ProjectId:   projectID,
			Description: jobDescription,
			TransferSpec: &storagetransferpb.TransferSpec{
				DataSource: &storagetransferpb.TransferSpec_AwsS3DataSource{
					AwsS3DataSource: &storagetransferpb.AwsS3Data{
						BucketName: awsSourceBucket,
						AwsAccessKey: &storagetransferpb.AwsAccessKey{
							AccessKeyId:     awsAccessKeyID,
							SecretAccessKey: awsSecretKey,
						}},
				},
				DataSink: &storagetransferpb.TransferSpec_GcsDataSink{
					GcsDataSink: &storagetransferpb.GcsData{BucketName: gcsSinkBucket}},
			},
			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", awsSourceBucket, gcsSinkBucket, 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.storagetransfer.v1.proto.StorageTransferServiceClient;
import com.google.storagetransfer.v1.proto.TransferProto.CreateTransferJobRequest;
import com.google.storagetransfer.v1.proto.TransferTypes.AwsAccessKey;
import com.google.storagetransfer.v1.proto.TransferTypes.AwsS3Data;
import com.google.storagetransfer.v1.proto.TransferTypes.GcsData;
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.TransferSpec;
import com.google.type.Date;
import com.google.type.TimeOfDay;
import java.io.IOException;
import java.util.Calendar;

public class TransferFromAws {

  // Creates a one-off transfer job from Amazon S3 to Google Cloud Storage.
  public static void transferFromAws(
      String projectId,
      String jobDescription,
      String awsSourceBucket,
      String gcsSinkBucket,
      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 from S3 to GCS.";

    // The name of the source AWS bucket to transfer data from
    // String awsSourceBucket = "yourAwsSourceBucket";

    // The name of the GCS bucket to transfer data to
    // String gcsSinkBucket = "your-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();

    // The ID used to access your AWS account. Should be accessed via environment variable.
    String awsAccessKeyId = System.getenv("AWS_ACCESS_KEY_ID");

    // The Secret Key used to access your AWS account. Should be accessed via environment variable.
    String awsSecretAccessKey = System.getenv("AWS_SECRET_ACCESS_KEY");

    // Set up source and sink
    TransferSpec transferSpec =
        TransferSpec.newBuilder()
            .setAwsS3DataSource(
                AwsS3Data.newBuilder()
                    .setBucketName(awsSourceBucket)
                    .setAwsAccessKey(
                        AwsAccessKey.newBuilder()
                            .setAccessKeyId(awsAccessKeyId)
                            .setSecretAccessKey(awsSecretAccessKey)))
            .setGcsDataSink(GcsData.newBuilder().setBucketName(gcsSinkBucket))
            .build();

    // 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 startDate =
        Date.newBuilder()
            .setYear(startCalendar.get(Calendar.YEAR))
            .setMonth(startCalendar.get(Calendar.MONTH) + 1)
            .setDay(startCalendar.get(Calendar.DAY_OF_MONTH))
            .build();
    TimeOfDay startTime =
        TimeOfDay.newBuilder()
            .setHours(startCalendar.get(Calendar.HOUR_OF_DAY))
            .setMinutes(startCalendar.get(Calendar.MINUTE))
            .setSeconds(startCalendar.get(Calendar.SECOND))
            .build();
    Schedule schedule =
        Schedule.newBuilder()
            .setScheduleStartDate(startDate)
            .setScheduleEndDate(startDate)
            .setStartTimeOfDay(startTime)
            .build();

    // Set up the transfer job
    TransferJob transferJob =
        TransferJob.newBuilder()
            .setDescription(jobDescription)
            .setProjectId(projectId)
            .setTransferSpec(transferSpec)
            .setSchedule(schedule)
            .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 AWS to GCS:");
    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'

// AWS S3 source bucket name
// awsSourceBucket = 'my-s3-source-bucket'

// AWS Access Key ID
// awsAccessKeyId = 'AKIA...'

// AWS Secret Access Key
// awsSecretAccessKey = 'HEAoMK2.../...ku8'

// 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 Amazon S3 to Google Cloud Storage.
 */
async function transferFromS3() {
  // 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: {
        awsS3DataSource: {
          bucketName: awsSourceBucket,
          awsAccessKey: {
            accessKeyId: awsAccessKeyId,
            secretAccessKey: awsSecretAccessKey,
          },
        },
        gcsDataSink: {
          bucketName: gcsSinkBucket,
        },
      },
    },
  });

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

transferFromS3();

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


def create_one_time_aws_transfer(
    project_id: str,
    description: str,
    source_bucket: str,
    aws_access_key_id: str,
    aws_secret_access_key: str,
    sink_bucket: str,
):
    """Creates a one-time transfer job from Amazon S3 to Google Cloud
    Storage."""

    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'

    # AWS S3 source bucket name
    # source_bucket = 'my-s3-source-bucket'

    # AWS Access Key ID
    # aws_access_key_id = 'AKIA...'

    # AWS Secret Access Key
    # aws_secret_access_key = 'HEAoMK2.../...ku8'

    # 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": {
                    "aws_s3_data_source": {
                        "bucket_name": source_bucket,
                        "aws_access_key": {
                            "access_key_id": aws_access_key_id,
                            "secret_access_key": aws_secret_access_key,
                        },
                    },
                    "gcs_data_sink": {
                        "bucket_name": sink_bucket,
                    },
                },
            }
        }
    )

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