Transfira do Amazon S3 para o armazenamento na nuvem

Esta página mostra como criar e iniciar tarefas de transferência do Amazon S3 para o Cloud Storage.

Configure autorizações

Antes de criar uma transferência, tem de configurar as autorizações no seu contentor do Amazon S3. Consulte o artigo Configurar o acesso a uma origem: Amazon S3 para ver detalhes.

Também tem de configurar autorizações para as seguintes Google Cloud entidades:

A conta de utilizador que está a ser usada para criar a transferência. Esta é a conta com sessão iniciada na consola ou a conta especificada quando se autentica na CLI `gcloud`. Google Cloud A conta de utilizador pode ser uma conta de utilizador normal ou uma conta de serviço gerida pelo utilizador.
A conta de serviço gerida pela Google, também conhecida como agente de serviço, usada pelo Serviço de Transferência de Armazenamento. Geralmente, esta conta é identificada pelo respetivo endereço de email, que usa o formato project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.

Consulte as autorizações de transferência sem agente para ver instruções.

Opções de saída

O Serviço de transferência de armazenamento oferece várias opções para transferir os seus dados do S3 para o Cloud Storage.

Opção de saída Descrição
Predefinição sem agente Esta opção usa uma transferência gerida e sem agente do S3. A Amazon cobra-lhe a saída.

Siga as instruções nesta página para usar esta opção.
Distribuição do CloudFront Use uma distribuição do Amazon CloudFront como um caminho de saída. As transferências de dados através do CloudFront podem beneficiar de custos de saída da AWS mais baixos em comparação com a transferência diretamente do S3. Consulte os preços do CloudFront e os custos de saída do S3 para ver detalhes.

Siga as instruções em Transferência do S3 através do CloudFront para configurar a sua distribuição e criar uma transferência.
Rede privada gerida Transfira os seus dados através de uma rede gerida pela Google. Não paga encargos de saída do S3. Em vez disso, paga uma taxa por GiB àGoogle Cloud. Consulte a página Preços para ver detalhes. Pode continuar a receber cobranças de operações da AWS (por exemplo, LIST ou GET chamadas); consulte os preços para ver detalhes.

Todas as transferências de projetos através da rede privada gerida partilham a mesma largura de banda. Em alturas de utilização elevada, a sua transferência pode ficar mais lenta. As transferências com ficheiros grandes são mais afetadas do que as transferências com ficheiros pequenos.

Siga as instruções nesta página para usar esta opção. Especifique a opção Rede privada gerida na Google Cloud consola ou o campo managedPrivateNetwork na API REST. A CLI gcloud e as bibliotecas cliente não suportam transferências de rede privada gerida. Consulte as regiões suportadas.
Orientado por agente Válido para todo o armazenamento compatível com o S3, incluindo o Amazon S3. Ao instalar software de agente em máquinas com acesso aos seus contentores S3, pode controlar o caminho e a largura de banda da rede. Esta opção requer agentes e conjuntos de agentes.

Siga as instruções em Transferir de origens compatíveis com S3 para usar esta opção.

Regiões suportadas

O Serviço de transferência de armazenamento suporta as seguintes regiões do 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
As transferências que usam a rede privada gerida suportam as seguintes regiões da 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
 

Opções de transferência

As seguintes funcionalidades do Serviço de transferência de armazenamento estão disponíveis para transferências do S3 para o Cloud Storage

Transfira ficheiros específicos através de um manifesto
Pode transmitir uma lista de ficheiros para o serviço de transferência de armazenamento agir. Consulte o artigo Transfira ficheiros ou objetos específicos através de um manifesto para ver detalhes.
Filtre objetos de origem por prefixo ou por hora da última modificação

Pode optar por incluir ou excluir objetos da transferência com base no nome do ficheiro e no caminho, ou na hora da última modificação.

Os filtros de prefixo são descritos nos filtros de prefixo.

Os filtros baseados no tempo incluem:

  • Tempo mínimo decorrido e tempo máximo decorrido desde a última modificação. Ambos aceitam um valor em segundos para filtrar objetos que foram ou não modificados num determinado período.
  • Last modified since e last modified before, que aceitam um valor dateTime.

Tenha em atenção que os filtros baseados no tempo para transferências do S3 dependem da definição da AWS de "hora da última modificação", que é a hora em que um objeto começa o carregamento. Uma vez que um objeto não está disponível até o carregamento terminar, pode encontrar objetos cuja hora da última modificação cumpre os critérios do filtro, mas que ainda estão a ser carregados. Estes objetos não vão ser incluídos na sua tarefa de transferência. Para evitar problemas, recomendamos o seguinte:

  • Em vez de filtros baseados no tempo, use [transferências orientadas por eventos](/storage-transfer/docs/event-driven-aws) para transferir objetos à medida que ficam disponíveis.
  • Para evitar objetos em falta em transferências recorrentes, o período de análise da "hora de modificação recente" deve ser superior à programação recorrente. Por exemplo, para uma tarefa executada a cada hora, um período de análise de duas horas oferece uma margem.
Especifique a classe de armazenamento
Pode especificar a classe de armazenamento do Cloud Storage a usar para os seus dados no contentor de destino. Consulte as opções StorageClass para ver detalhes do REST ou use a flag --custom-storage-class com a CLI do Google Cloud.

Tenha em atenção que todas as definições da classe de armazenamento são ignoradas se o contentor de destino tiver o Autoclass ativado. Se o Autoclass estiver ativado, os objetos transferidos para o contentor são inicialmente definidos como armazenamento padrão.

Preservação de metadados

Quando transfere ficheiros do S3, o Serviço de transferência de armazenamento pode preservar opcionalmente determinados atributos como metadados personalizados.

Consulte a secção Amazon S3 para Cloud Storage de Preservação de metadados para ver detalhes sobre os metadados que podem ser preservados e como configurar a transferência.

Transferências orientadas por eventos
O Serviço de transferência de armazenamento pode ouvir notificações de eventos do Amazon S3 enviadas para o Amazon SQS para transferir automaticamente dados que foram adicionados ou atualizados na localização de origem. Consulte o artigo Transferências baseadas em eventos para obter informações.
Registo e monitorização
As transferências do S3 podem ser vistas nos Registos na nuvem e no Cloud Monitoring. Consulte os artigos Cloud Logging para o Serviço de transferência de armazenamento e Monitorize tarefas de transferência para ver detalhes. Também pode configurar notificações do Pub/Sub.

Crie uma transferência

O serviço de transferência de armazenamento oferece várias interfaces através das quais pode criar uma transferência.

Não inclua informações confidenciais, como informações de identificação pessoal (IIP) ou dados de segurança, no nome da tarefa de transferência. Os nomes dos recursos podem ser propagados para os nomes de outros Google Cloud recursos e podem ser expostos a sistemas internos da Google fora do seu projeto.

Google Cloud consola

  1. Aceda à página Serviço de transferência de armazenamento na Google Cloud consola.

    Aceda ao Serviço de transferência de armazenamento

  2. Clique em Criar tarefa de transferência. É apresentada a página Criar tarefa de transferência.

  3. Em Tipo de origem, selecione Amazon S3.

  4. Como Tipo de destino, selecione Google Cloud Storage.

  5. Selecione o Modo de agendamento. As transferências em lote são executadas de forma única ou agendada. As transferências orientadas por eventos monitorizam continuamente a origem e transferem dados quando são adicionados ou modificados.

    Para configurar uma transferência baseada em eventos, siga as instruções em Transferências baseadas em eventos.

  6. Clique em Passo seguinte.

  7. No campo Nome do contentor ou da pasta, introduza o nome do contentor de origem.

    O nome do contentor é o nome apresentado na AWS Management Console.

  8. Se estiver a usar uma distribuição do CloudFront para transferir a partir do S3, introduza o nome do domínio de distribuição no campo Domínio do CloudFront. Por exemplo, https://dy1h2n3l4ob56.cloudfront.net. Consulte o artigo Transferir do S3 através do CloudFront para configurar uma distribuição do CloudFront.

  9. Para usar uma rede privada gerida para esta transferência, selecione a caixa de verificação. Consulte as Opções de saída para ver detalhes.

  10. Selecione o seu método de autenticação do Amazon Web Services (AWS). Consulte o artigo Configure o acesso a uma origem: Amazon S3 para ver detalhes.

    • Chave de acesso: introduza a chave de acesso no campo ID da chave de acesso e o segredo associado à chave de acesso no campo Chave de acesso secreta.

    • Função do IAM da AWS para federação de identidades: introduza o seu ARN no campo ARN da função do IAM da AWS, com a seguinte sintaxe:

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

      Onde:

      • ACCOUNT: O ID da conta da AWS sem hífenes.
      • ROLE-NAME-WITH-PATH: O nome da função da AWS, incluindo o caminho.

      Para mais informações sobre ARNs, consulte o artigo ARNs do IAM.

    • Recurso secreto: selecione esta opção para usar uma credencial da Amazon guardada no Gestor Secreto. Selecione um segredo na lista ou introduza um manualmente no formato projects/PROJECT_NUMBER/secrets/SECRET_NAME.

  11. Se for uma transferência baseada em eventos, introduza o ARN da fila do Amazon SQS, que tem o seguinte formato:

    arn:aws:sqs:us-east-1:1234567890:event-queue
    
  12. Opcionalmente, opte por filtrar objetos por prefixo ou por data da última modificação. Se especificou uma pasta como localização de origem, os filtros de prefixo são relativos a essa pasta. Por exemplo, se a origem for my-test-bucket/path/, um filtro de inclusão de file inclui todos os ficheiros que começam por my-test-bucket/path/file.
  13. Clique em Passo seguinte.

  14. No campo Bucket ou pasta, introduza o bucket de destino e (opcionalmente) o nome da pasta, ou clique em Procurar para selecionar um bucket numa lista de buckets existentes no seu projeto atual. Para criar um novo contentor, clique em Criar novo contentor.

  15. Clique em Passo seguinte.

  16. Escolha as definições para a tarefa de transferência.

    1. No campo Descrição, introduza uma descrição da transferência. Como prática recomendada, introduza uma descrição significativa e única para poder distinguir os trabalhos.

    2. Em Opções de metadados, opte por usar as opções predefinidas ou clique em Ver e selecionar opções para especificar valores para todos os metadados suportados. Consulte o artigo Preservação de metadados para ver detalhes.

    3. Em Quando substituir, selecione uma das seguintes opções:

      • Se for diferente: substitui os ficheiros de destino se o ficheiro de origem com o mesmo nome tiver valores de Etags ou de soma de verificação diferentes.

      • Sempre: substitui sempre os ficheiros de destino quando o ficheiro de origem tem o mesmo nome, mesmo que sejam idênticos.

    4. Em Quando eliminar, selecione uma das seguintes opções:

      • Nunca: nunca elimina ficheiros da origem nem do destino.

      • Eliminar ficheiro da origem após a transferência: elimine os ficheiros da origem após a transferência para o destino. Se um ficheiro de origem não for transferido, por exemplo, porque já existe no destino, o ficheiro de origem não é eliminado.

      • Eliminar ficheiros do destino se também não estiverem na origem: se os ficheiros no contentor do Cloud Storage de destino também não estiverem na origem, elimine os ficheiros do contentor do Cloud Storage.

        Esta opção garante que o contentor do Cloud Storage de destino corresponde exatamente à sua origem.

    5. Em Opções de notificação, selecione o tópico do Pub/Sub e os eventos para os quais quer receber notificações. Consulte as notificações do Pub/Sub para mais detalhes.

  17. Clique em Passo seguinte.

  18. Escolha as opções de programação:

    1. Na lista pendente Executar uma vez, selecione uma das seguintes opções:

      • Executar uma vez: executa uma única transferência, começando à hora que selecionar.

      • Executar todos os dias: executa uma transferência diariamente, a partir da hora que selecionar.

        Pode introduzir uma Data de conclusão opcional ou deixar a Data de conclusão em branco para executar a transferência continuamente.

      • Executar todas as semanas: executa uma transferência semanalmente, a partir da hora que selecionar.

      • Executar com frequência personalizada: executa uma transferência com a frequência que selecionar. Pode optar por repetir a transferência a um intervalo regular de horas, dias ou semanas.

        Pode introduzir uma Data de conclusão opcional ou deixar a Data de conclusão em branco para executar a transferência continuamente.

    2. Na lista pendente A partir de agora, selecione uma das seguintes opções:

      • A partir de agora: inicia a transferência depois de clicar em Criar.

      • A partir de: inicia a transferência na data e hora que selecionar. Clique em Calendário para apresentar um calendário para selecionar a data de início.

    3. Para criar a tarefa de transferência, clique em Criar.

CLI gcloud

Para criar uma nova tarefa de transferência, use o comando gcloud transfer jobs create. A criação de uma nova tarefa inicia a transferência especificada, a menos que seja especificado um horário ou um --do-not-run.

A CLI gcloud não suporta transferências através do CloudFront nem da rede privada gerida.

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

Onde:

  • S3_BUCKET_NAME é a origem de dados desta transferência. Opcionalmente, pode incluir um caminho: s3://S3_BUCKET_NAME/S3_FOLDER_PATH

  • STORAGE_BUCKET_NAME é o contentor do Cloud Storage para o qual transferir os dados. Para transferir para um diretório específico, especifique gs://STORAGE_BUCKET_NAME/STORAGE_FOLDER_PATH/, incluindo a barra invertida final.

  • --source-creds-file especifica o caminho relativo para um ficheiro local no seu computador que inclui credenciais da AWS para a origem da transferência. O conteúdo tem de estar no seguinte formato JSON:

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

As opções adicionais incluem:

  • --do-not-run impede que o serviço de transferência de armazenamento execute a tarefa após o envio do comando. Para executar a tarefa, atualize-a para adicionar uma programação ou use jobs run para iniciá-la manualmente.

  • --manifest-file especifica o caminho para um ficheiro CSV no Cloud Storage que contém uma lista de ficheiros a transferir da sua origem. Para ver a formatação do ficheiro de manifesto, consulte o artigo Transfira ficheiros ou objetos específicos através de um manifesto.

  • Informações da tarefa: pode especificar --name e --description.

  • Schedule: especifique --schedule-starts, --schedule-repeats-every e --schedule-repeats-until ou --do-not-run.

  • Condições de objetos: use condições para determinar que objetos são transferidos. Estes incluem --include-prefixes e --exclude-prefixes, e as condições baseadas no tempo em --include-modified-[before | after]-[absolute | relative]. Se tiver especificado uma pasta com a origem, os filtros de prefixo são relativos a essa pasta. Consulte o artigo Filtre objetos de origem por prefixo para mais informações.

  • Opções de transferência: especifique se quer substituir os ficheiros de destino (--overwrite-when=different ou always) e se quer eliminar determinados ficheiros durante ou após a transferência (--delete-from=destination-if-unique ou source-after-transfer); especifique que valores de metadados preservar (--preserve-metadata); e, opcionalmente, defina uma classe de armazenamento em objetos transferidos (--custom-storage-class).

  • Notificações: configure as notificações do Pub/Sub para transferências com --notification-pubsub-topic, --notification-event-types e --notification-payload-format.

  • Cloud Logging: ative o Cloud Logging com --log-actions e --log-action-states. Consulte o artigo Cloud Logging para o Serviço de transferência de armazenamento para ver detalhes.

Para ver todas as opções, execute gcloud transfer jobs create --help ou consulte a gcloud documentação de referência.

REST

Os exemplos seguintes mostram como usar o Serviço de transferência de armazenamento através da API REST.

Quando configura ou edita tarefas de transferência através da API Storage Transfer Service, a hora tem de estar em UTC. Para mais informações sobre como especificar a programação de uma tarefa de transferência, consulte o artigo Programação.

Ao criar tarefas de transferência, não inclua o prefixo s3:// para os nomes de origem do contentor do Amazon S3.bucketName

Transferência sem agente

O exemplo seguinte cria uma tarefa de transferência através da configuração padrão sem agente. Consulte a referência transferJobs.create para ver mais detalhes.

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"
      }
  }
}

Consulte o artigo Configurar o acesso a uma origem: Amazon S3 para ver outras opções de autenticação.

Distribuição do CloudFront

Se estiver a transferir a partir do S3 através de uma distribuição do CloudFront, especifique o nome do domínio de distribuição como o valor do 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"
      }
  }
}

Rede privada gerida

Para transferir a partir do S3 através de uma rede privada gerida pela Google, especifique o 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 cliente

Os exemplos seguintes mostram como usar o Serviço de transferência de armazenamento através de programação com Go, Java, Node.js e Python.

Quando configura ou edita tarefas de transferência através de programação, a hora tem de estar em UTC. Para mais informações sobre como especificar a programação de uma tarefa de transferência, consulte o artigo Programação.

Para mais informações sobre as bibliotecas de cliente do serviço de transferência de armazenamento, consulte o artigo Introdução às bibliotecas de cliente do serviço de transferência de armazenamento.

Transfira do Amazon S3 para o armazenamento na nuvem

Neste exemplo, vai aprender a mover ficheiros do Amazon S3 para um contentor do Cloud Storage.

Ao criar tarefas de transferência, não inclua o prefixo s3:// para os nomes de origem do contentor do Amazon S3.bucketName

As bibliotecas de cliente do serviço de transferência de armazenamento não suportam transferências através do CloudFront nem da rede privada gerida.

Ir

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

Procura exemplos mais antigos? Consulte o guia de migração do Serviço de transferência de armazenamento.


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

Procura exemplos mais antigos? Consulte o guia de migração do Serviço de transferência de armazenamento.

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}")