Transfira do armazenamento compatível com S3 para o Cloud Storage

O Serviço de transferência de armazenamento suporta transferências de sistemas de armazenamento de objetos na nuvem ou nas instalações que sejam compatíveis com a API Amazon S3.

O Serviço de transferência de armazenamento acede aos seus dados no armazenamento compatível com S3 através de agentes de transferência implementados em VMs perto da origem de dados. Estes agentes são executados num contentor do Docker e pertencem a um conjunto de agentes, que é uma coleção de agentes que usam a mesma configuração e que movem os seus dados em paralelo.

Esta funcionalidade permite-lhe migrar do armazenamento de objetos na nuvem ou no local para o Cloud Storage, arquivar dados para libertar capacidade de armazenamento no local, replicar dados para Google Cloud para continuidade da empresa ou transferir dados para Google Cloud para análise e processamento. Para os clientes que migram do AWS S3 para o Cloud Storage, esta funcionalidade oferece uma opção para controlar as rotas de rede para Google Cloud, o que resulta em custos de transferência de dados de saída consideravelmente mais baixos.

Antes de começar

Antes de configurar as transferências, conclua os seguintes passos:

Obtenha credenciais de origem

A transferência a partir de armazenamento compatível com o S3 requer um ID da chave de acesso e uma chave de acesso secreta.

Os passos para os obter dependem do seu fornecedor de armazenamento.

A conta a partir da qual o ID e a chave são gerados requer uma das seguintes autorizações:

  • Autorização só de leitura nos objetos de origem, se não quiser eliminar objetos na origem.
  • Acesso total aos objetos de origem, se optar por eliminar objetos na origem como parte da transferência.

Depois de criar a conta, adicionar autorizações e transferir o ID da chave de acesso e a chave de acesso secreta, armazene o ID e a chave num local seguro.

Configure as Google Cloud autorizações

Antes de criar uma transferência, tem de configurar as autorizações para as seguintes 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.
A conta de agente de transferência que concede Google Cloud autorizações aos agentes de transferência. As contas de agente de transferência usam as credenciais do utilizador que as instala ou as credenciais de uma conta de serviço gerida pelo utilizador para autenticar.

Consulte as autorizações de transferência baseadas em agentes para ver instruções.

Opções de transferência

As seguintes funcionalidades do Serviço de transferência de armazenamento estão disponíveis para transferências de armazenamento compatível com 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.
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 de armazenamento compatível com S3, o Serviço de transferência de armazenamento pode preservar opcionalmente determinados atributos como metadados personalizados.

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

Registo e monitorização
As transferências de armazenamento compatível com 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 um conjunto de agentes

Não inclua informações confidenciais, como informações de identificação pessoal (IIP) ou dados de segurança, no nome do conjunto de agentes ou no prefixo do ID do agente. 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.

Para criar um conjunto de agentes:

Google Cloud consola

  1. Na Google Cloud consola, aceda à página Pools de agentes.

    Aceda a Conjuntos de agentes

    É apresentada a página Conjuntos de agentes, que lista os conjuntos de agentes existentes.

  2. Clique em Criar outro conjunto.

  3. Atribua um nome ao conjunto e, opcionalmente, descreva-o.

  4. Pode optar por definir um limite de largura de banda que se aplica ao conjunto como um todo. A largura de banda especificada em MB/s é dividida entre todos os agentes no conjunto. Consulte o artigo Faça a gestão da largura de banda da rede para mais informações.

  5. Clique em Criar.

API REST

Use projects.agentPools.create:

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

Onde:

  • PROJECT_ID: o ID do projeto no qual está a criar o conjunto de agentes.
  • AGENT_POOL_ID: o ID do conjunto de agentes que está a criar.

Se um conjunto de agentes estiver bloqueado no estado Creating durante mais de 30 minutos, recomendamos que elimine o conjunto de agentes e o crie novamente.

A revogação das autorizações necessárias do serviço de transferência de armazenamento de um projeto enquanto um conjunto de agentes está no estado Creating leva a um comportamento incorreto do serviço.

CLI gcloud

Para criar um conjunto de agentes com a ferramenta de linha de comandos gcloud, execute [gcloud transfer agent-pools create][agent-pools-create].

gcloud transfer agent-pools create AGENT_POOL

Onde estão disponíveis as seguintes opções:

  • AGENT_POOL é um identificador exclusivo e permanente deste conjunto.

  • --no-async bloqueia outras tarefas no terminal até que o conjunto seja criado. Se não for incluído, a criação do grupo é executada de forma assíncrona.

  • --bandwidth-limit define a quantidade de largura de banda em MB/s a disponibilizar aos agentes deste conjunto. É aplicado um limite de largura de banda a todos os agentes num conjunto e pode ajudar a impedir que a carga de trabalho de transferência do conjunto interrompa outras operações que partilham a sua largura de banda. Por exemplo, introduza "50" para definir um limite de largura de banda de 50 MB/s. Se não especificar este indicador, os agentes deste conjunto usam toda a largura de banda disponível.

  • --display-name é um nome modificável para ajudar a identificar este conjunto. Pode incluir detalhes que podem não caber no nome completo do recurso exclusivo do conjunto.

Instale agentes de transferência

Os agentes de transferência são agentes de software que coordenam as atividades de transferência a partir da sua origem através do Serviço de transferência de armazenamento. Têm de ser instalados num sistema com acesso aos dados de origem.

CLI gcloud

Para instalar agentes para usar com uma origem compatível com S3 através da CLI gcloud, use o comando transfer agents install.

Tem de fornecer credenciais de acesso como variáveis de ambiente, como os valores de AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY, ou armazenadas como credenciais predefinidas nos ficheiros de configuração do seu sistema.

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

Para executar agentes com uma chave de conta de serviço, use a opção --creds-file:

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

Crie uma tarefa de transferência

Google Cloud consola

Siga estes passos para criar uma transferência de uma origem compatível com S3 para um contentor do Cloud Storage.

  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. Selecione Armazenamento de objetos compatível com S3 como o Tipo de origem. O destino tem de ser o Google Cloud Storage.

    Clique em Passo seguinte.

Configure a sua origem

  1. Especifique as informações necessárias para esta transferência:

    1. Selecione o conjunto de agentes que configurou para esta transferência.

    2. Introduza o Nome do contentor relativo ao ponto final. Por exemplo, se os seus dados residirem em:

      https://example.com/bucket_a

      Introduza: bucket_a

    3. Introduza o ponto final. Não inclua o protocolo (http:// ou https://) nem o nome do contentor. Por exemplo:

      example.com

  2. Especifique quaisquer atributos opcionais para esta transferência:

    1. Introduza a Região de assinatura a usar para a assinatura de pedidos.

    2. Escolha o Processo de assinatura para este pedido.

    3. Selecione o Estilo de morada. Isto determina se o nome do contentor é fornecido no estilo de caminho (por exemplo, https://example.com/bucket-name/key-name) ou virtual de estilo alojado (por exemplo, https://bucket-name.example.com/key-name). Leia o artigo Alojamento virtual de contentores na documentação da Amazon para mais informações.

    4. Selecione o Protocolo de rede.

    5. Selecione a versão da API de fichas a usar. Consulte a documentação de ListObjectsV2 e ListObjects para mais informações.

  3. Clique em Passo seguinte.

Configure o lava-louças

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

  2. Clique em Passo seguinte.

Escolha as definições 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.

  6. Clique em Passo seguinte.

Agende a transferência

Pode agendar a transferência para ser executada apenas uma vez ou configurar uma transferência recorrente.

Clique em Criar para criar a tarefa de transferência.

CLI gcloud

Antes de usar a CLI gcloud para criar uma transferência, siga as instruções em Configure o acesso a um destino do Cloud Storage.

Para usar a CLI gcloud para criar uma transferência de uma origem compatível com S3 para um contentor do Cloud Storage, use o seguinte 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

As seguintes flags são obrigatórias:

  • --source-agent-pool é o nome do conjunto de agentes a usar para esta transferência.

  • --source-endpoint especifica o ponto final do seu sistema de armazenamento. Por exemplo, s3.us-east.example.com. Consulte o seu fornecedor para saber qual é a formatação correta. Não inclua o protocolo (por exemplo, https://) ou o nome do contentor.

As restantes flags são opcionais:

  • --source-signing-region especifica uma região para pedidos de assinatura. Omita esta flag se o seu fornecedor de armazenamento não exigir uma região de assinatura.
  • --source-auth-method especifica o método de autenticação a usar. Os valores válidos são AWS_SIGNATURE_V2 ou AWS_SIGNATURE_V4. Consulte a documentação SigV4 e SigV2 da Amazon para mais informações.
  • --source-request-model especifica o estilo de endereçamento a usar. Os valores válidos são PATH_STYLE ou VIRTUAL_HOSTED_STYLE. O estilo de caminho usa o formato https://s3.REGION.example.com/BUCKET_NAME/KEY_NAME. O estilo alojado virtualmente usa o formato `https://BUCKET_NAME.s3.REGION.example.com/KEY_NAME.
  • --source-network-protocol especifica o protocolo de rede que os agentes devem usar para esta tarefa. Os valores válidos são HTTP ou HTTPS.
  • --source-list-api especifica a versão da API de listagem do S3 para devolver objetos do contentor. Os valores válidos são LIST_OBJECTS ou LIST_OBJECTS_V2. Consulte a documentação ListObjectsV2 e ListObjects da Amazon para mais informações.

Para opções adicionais de tarefas de transferência, execute gcloud transfer jobs create --help ou consulte a gclouddocumentação de referência.

API REST

Antes de usar a API REST para criar uma transferência, siga as instruções em Configure o acesso a um destino do Cloud Storage.

Para criar uma transferência a partir de uma origem compatível com S3 através da API REST, crie um objeto JSON semelhante ao seguinte exemplo.

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

Consulte a AwsS3CompatibleData referência da API para ver descrições dos campos.

Bibliotecas cliente

Antes de usar as bibliotecas de cliente para criar uma transferência, siga as instruções em Configure o acesso a um destino do Cloud Storage.

Go

Para saber como instalar e usar a biblioteca cliente do Serviço de transferência de armazenamento, consulte o artigo Bibliotecas cliente do Serviço de transferência de armazenamento. Para mais informações, consulte a documentação de referência da API Go do Storage Transfer Service.

Para se autenticar no serviço de transferência de armazenamento, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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 como instalar e usar a biblioteca cliente do Serviço de transferência de armazenamento, consulte o artigo Bibliotecas cliente do Serviço de transferência de armazenamento. Para mais informações, consulte a documentação de referência da API Java do Storage Transfer Service.

Para se autenticar no serviço de transferência de armazenamento, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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 como instalar e usar a biblioteca cliente do Serviço de transferência de armazenamento, consulte o artigo Bibliotecas cliente do Serviço de transferência de armazenamento. Para mais informações, consulte a documentação de referência da API Node.js do Storage Transfer Service.

Para se autenticar no serviço de transferência de armazenamento, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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 como instalar e usar a biblioteca cliente do Serviço de transferência de armazenamento, consulte o artigo Bibliotecas cliente do Serviço de transferência de armazenamento. Para mais informações, consulte a documentação de referência da API Python do Storage Transfer Service.

Para se autenticar no serviço de transferência de armazenamento, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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}")

Perguntas frequentes

Existe um custo para transferir do armazenamento compatível com S3?

As transferências de armazenamento compatível com S3 não incorrem na taxa de "transferências do Serviço de transferência de armazenamento que requerem agentes". Consulte os preços para ver outras taxas que possam ser aplicadas. Também pode incorrer em custos de transferência de dados de saída e operacionais por parte do seu fornecedor de nuvem de origem.

O Cloud Logging é suportado para transferências de armazenamento compatíveis com S3?

Sim, pode ativar o Cloud Logging para as suas transferências seguindo as instruções em Cloud Logging para o Serviço de transferência de armazenamento.

As transferências que usam um manifesto são suportadas?

Sim, os ficheiros de manifesto são suportados para transferências compatíveis com o S3.

Se adicionar um objeto ao contentor de origem após o início da tarefa, esse objeto é transferido?

O Storage Transfer Service executa uma operação de listagem no contentor de origem para calcular a diferença em relação ao destino. Se a operação de listagem já tiver sido concluída quando o novo objeto for adicionado, esse objeto é ignorado até à próxima transferência.

O Serviço de transferência de armazenamento realiza a correspondência de checksums em origens compatíveis com o S3?

O Serviço de transferência de armazenamento depende dos dados de soma de verificação devolvidos pela origem. Para o armazenamento compatível com S3, o Serviço de transferência de armazenamento espera que o Etag do objeto seja o hash MD5 do objeto.

No entanto, os objetos que foram transferidos para armazenamento compatível com S3 através do carregamento multipartes do S3 não têm ETags MD5. Neste caso, o Serviço de transferência de armazenamento usa o tamanho do ficheiro para validar o objeto transferido.

Que débito é possível alcançar para transferências a partir de armazenamento compatível com S3?

Pode aumentar a taxa de transferência adicionando mais agentes de transferência. Recomendamos a utilização de 3 agentes para tolerância a falhas e para preencher um canal de <10 Gbps. Para aumentar a escala, adicione mais agentes. Os agentes podem ser adicionados e removidos enquanto uma transferência está em processamento.

Onde devem ser implementados os agentes de transferência para transferir dados do Amazon S3 para o Cloud Storage?

Pode instalar agentes no Amazon EC2 ou EKS na mesma região que o seu contentor. Também pode executar agentes no Google Cloud na região mais próxima.