Trasferimento da uno spazio di archiviazione compatibile con S3 a Cloud Storage

Storage Transfer Service supporta i trasferimenti da sistemi di archiviazione di oggetti on-premise o cloud compatibili con l'API Amazon S3.

Storage Transfer Service accede ai tuoi dati nello spazio di archiviazione compatibile con S3 utilizzando agenti di trasferimento di cui è stato eseguito il deployment su VM vicine all'origine dati. Questi agenti vengono eseguiti in un container Docker e appartengono a un pool di agenti, ovvero una raccolta di agenti che utilizzano la stessa configurazione e che spostano collettivamente i dati in parallelo.

Questa funzionalità ti consente di eseguire la migrazione dall'archiviazione di oggetti on-premise o cloud a Cloud Storage, archiviare i dati per liberare capacità di archiviazione on-premise, replicare i dati inGoogle Cloud per la continuità operativa o trasferire i dati inGoogle Cloud per l'analisi e l'elaborazione. Per i clienti che eseguono la migrazione da AWS S3 a Cloud Storage, questa funzionalità offre un'opzione per controllare le route di rete a Google Cloud, con conseguenti addebiti per il trasferimento di dati in uscita notevolmente inferiori.

Prima di iniziare

Prima di configurare i trasferimenti, completa i seguenti passaggi:

Ottenere le credenziali dell'origine

Il trasferimento dallo spazio di archiviazione compatibile con S3 richiede un ID chiave di accesso e una chiave di accesso segreta.

I passaggi per ottenerli dipendono dal tuo provider di spazio di archiviazione.

L'account da cui vengono generati l'ID e la chiave richiede una delle seguenti autorizzazioni:

  • Autorizzazione di sola lettura sugli oggetti di origine, se non vuoi eliminare gli oggetti nell'origine.
  • Accesso completo agli oggetti di origine, se scegli di eliminarli nell'origine nell'ambito del trasferimento.

Dopo aver creato l'account, aggiunto le autorizzazioni e scaricato l'ID chiave di accesso e la chiave di accesso segreta, memorizza l'ID e la chiave in un luogo sicuro.

Configurare le autorizzazioni di Google Cloud

Prima di creare un trasferimento, devi configurare le autorizzazioni per le seguenti entità:

L'account utente utilizzato per creare il trasferimento. Questo è l'account con cui è stato eseguito l'accesso alla console Google Cloud oppure l'account specificato durante l'autenticazione a gcloud CLI. L'account utente può essere un account utente normale o un account di servizio gestito dall'utente.
Il service account gestito da Google, noto anche come agente di servizio, utilizzato da Storage Transfer Service. Questo account è generalmente identificato dal suo indirizzo email, che utilizza il formato project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.
L'account agente di trasferimento che fornisce Google Cloud autorizzazioni per gli agenti di trasferimento. Gli account agente di trasferimento utilizzano le credenziali dell'utente che li installa o le credenziali di un account di serviziont gestito dall'utente per l'autenticazione.

Per istruzioni, consulta la sezione Autorizzazioni di trasferimento basate sull'agente.

Opzioni di trasferimento

Le seguenti funzionalità di Storage Transfer Service sono disponibili per i trasferimenti da un archivio compatibile con S3 a Cloud Storage:

Trasferire file specifici utilizzando un manifest
Puoi trasmettere un elenco di file su cui Storage Transfer Service deve intervenire. Per maggiori dettagli, vedi Trasferimento di file o oggetti specifici utilizzando un manifest.
Specifica la classe di archiviazione
Puoi specificare la classe di archiviazione Cloud Storage da utilizzare per i dati nel bucket di destinazione. Consulta le opzioni StorageClass per i dettagli di REST oppure utilizza il flag --custom-storage-class con Google Cloud CLI.

Tieni presente che tutte le impostazioni della classe di archiviazione vengono ignorate se nel bucket di destinazione è abilitata la funzionalità Autoclass. Se Autoclass è abilitata, gli oggetti trasferiti nel bucket vengono inizialmente impostati su Standard Storage.

Conservazione dei metadati

Quando trasferisce file dallo spazio di archiviazione compatibile con S3, Storage Transfer Service può conservare facoltativamente determinati attributi come metadati personalizzati.

Per informazioni dettagliate su quali metadati possono essere conservati e su come configurare il trasferimento, consulta la sezione Da Amazon S3 o da un sistema di archiviazione compatibile con S3 a Cloud Storage della pagina Conservazione dei metadati.

Logging e monitoraggio
I trasferimenti dallo spazio di archiviazione compatibile con S3 possono essere visualizzati in Cloud Logging e Cloud Monitoring. Per maggiori dettagli, consulta Cloud Logging per Storage Transfer Service e Monitorare i job di trasferimento. Puoi anche configurare le notifiche Pub/Sub.

Crea un pool di agenti

Non includere informazioni sensibili come quelle che consentono l'identificazione personale (PII) o dati di sicurezza nel nome del pool di agenti o nel prefisso dell'ID agente. I nomi delle risorse potrebbero essere propagato ai nomi di altre risorse Google Cloud e potrebbero essere esposti a sistemi interni di Google al di fuori del tuo progetto.

Per creare un pool di agenti:

Google Cloud console

  1. Nella console Google Cloud , vai alla pagina Pool di agenti.

    Vai a Pool di agenti

    Viene visualizzata la pagina Pool di agenti, che elenca i pool di agenti esistenti.

  2. Fai clic su Crea un altro pool.

  3. Assegna un nome al pool e, facoltativamente, descrivilo.

  4. Puoi scegliere di impostare un limite di larghezza di banda che verrà applicato al pool nel suo complesso. La larghezza di banda specificata in MB/s verrà suddivisa tra tutti gli agenti del pool. Per ulteriori informazioni, consulta la sezione Gestire la larghezza di banda di rete.

  5. Fai clic su Crea.

API REST

Utilizza projects.agentPools.create:

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

Dove:

  • PROJECT_ID: l'ID progetto in cui stai creando il pool di agenti.
  • AGENT_POOL_ID: l'ID del pool di agenti che stai creando.

Se un pool di agenti rimane nello stato Creating per più di 30 minuti, ti consigliamo di eliminarlo e ricrearlo.

La revoca delle autorizzazioni richieste di Storage Transfer Service da un progetto mentre un pool di agenti si trova nello stato Creating comporta un comportamento errato del servizio.

Interfaccia a riga di comando gcloud

Per creare un pool di agenti con lo strumento a riga di comando gcloud, esegui [gcloud transfer agent-pools create][agent-pools-create].

gcloud transfer agent-pools create AGENT_POOL

Dove sono disponibili le seguenti opzioni:

  • AGENT_POOL è un identificatore univoco e permanente per questo pool.

  • --no-async blocca altre attività nel terminale finché il pool non è stato creato. Se non è incluso, la creazione del pool viene eseguita in modo asincrono.

  • --bandwidth-limit definisce la quantità di larghezza di banda in MB/s da rendere disponibile agli agenti del pool. Un limite di larghezza di banda si applica a tutti gli agenti in un pool e può contribuire a impedire che il workload di trasferimento del pool interrompa altre operazioni che condividono la tua larghezza di banda. Ad esempio, inserisci "50" per impostare un limite di larghezza di banda di 50 MB/s. Se non specifichi questo flag, gli agenti di questo pool utilizzeranno tutta la larghezza di banda disponibile.

  • --display-name è un nome modificabile che ti aiuta a identificare questo pool. Puoi includere dettagli che potrebbero non rientrare nel nome completo della risorsa univoco del pool.

Installare gli agenti di trasferimento

Gli agenti di trasferimento sono agenti software che coordinano le attività di trasferimento dall'origine tramite Storage Transfer Service. Devono essere installati su un sistema con accesso ai dati di origine.

Interfaccia a riga di comando gcloud

Per installare gli agenti da utilizzare con un'origine compatibile con S3 utilizzando l'interfaccia a riga di comando gcloud, utilizza il comando transfer agents install.

Devi fornire le credenziali di accesso come variabili di ambiente come valori di AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY o memorizzate come credenziali predefinite nei file di configurazione del sistema.

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

Per eseguire gli agenti utilizzando una chiave dell'account di servizio, utilizza l'opzione --creds-file:

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

Creare un job di trasferimento

Google Cloud console

Segui questi passaggi per creare un trasferimento da un'origine compatibile con S3 a un bucket Cloud Storage.

  1. Vai alla pagina Storage Transfer Service nella Google Cloud console.

    Vai a Storage Transfer Service

  2. Fai clic su Crea job di trasferimento. Viene visualizzata la pagina Crea un job di trasferimento.

  3. Seleziona Archiviazione di oggetti compatibile con S3 come Tipo di origine. La destinazione deve essere Google Cloud Storage.

    Fai clic su Passaggio successivo.

Configura l'origine

  1. Specifica le informazioni richieste per questo trasferimento:

    1. Seleziona il pool di agenti che hai configurato per questo trasferimento.

    2. Inserisci il nome del bucket relativo all'endpoint. Ad esempio, se i tuoi dati si trovano in:

      https://example.com/bucket_a

      Inserisci: bucket_a

    3. Inserisci l'endpoint. Non includere il protocollo (http:// o https://) o il nome del bucket. Ad esempio:

      example.com

  2. Specifica eventuali attributi facoltativi per questo trasferimento:

    1. Inserisci la Regione di firma da utilizzare per la firma delle richieste.

    2. Scegli la procedura di firma per questa richiesta.

    3. Seleziona lo stile di indirizzamento. Determina se il nome del bucket viene fornito in stile percorso (ad es. https://example.com/bucket-name/key-name) o con hosting virtuale (ad es. https://bucket-name.example.com/key-name). Per saperne di più, leggi Hosting virtuale dei bucket nella documentazione di Amazon.

    4. Seleziona il protocollo di rete.

    5. Seleziona la versione dell'API di schede da utilizzare. Per saperne di più, consulta la documentazione di ListObjectsV2 e ListObjects.

  3. Fai clic su Passaggio successivo.

Configurare il sink

  1. Nel campo Bucket o cartella, inserisci il nome del bucket di destinazione e (facoltativamente) della cartella oppure fai clic su Sfoglia per selezionare un bucket da un elenco di bucket esistenti nel progetto corrente. Per creare un nuovo bucket, fai clic su Crea nuovo bucket.

  2. Fai clic su Passaggio successivo.

Scegliere le impostazioni di trasferimento

  1. Nel campo Descrizione, inserisci una descrizione del trasferimento. Come best practice, inserisci una descrizione significativa e univoca in modo da poter distinguere i job.

  2. In Opzioni metadati, scegli di utilizzare le opzioni predefinite o fai clic su Visualizza e seleziona opzioni per specificare i valori per tutti i metadati supportati. Per i dettagli, vedi Conservazione dei metadati.

  3. In Quando sovrascrivere, seleziona una delle seguenti opzioni:

    • Se diverso: sovrascrive i file di destinazione se il file di origine con lo stesso nome ha ETag o valori di checksum diversi.

    • Sempre: sovrascrive sempre i file di destinazione quando il file di origine ha lo stesso nome, anche se sono identici.

  4. In Quando eliminare, seleziona una delle seguenti opzioni:

    • Mai: non eliminare mai i file dall'origine o dalla destinazione.

    • Elimina i file dall'origine dopo il trasferimento: elimina i file dall'origine dopo il trasferimento alla destinazione. Se un file di origine non viene trasferito, ad esempio perché esiste già nella destinazione, non viene eliminato.

    • Elimina i file dalla destinazione se non sono presenti anche nell'origine: se i file nel bucket Cloud Storage di destinazione non sono presenti anche nell'origine, elimina i file dal bucket Cloud Storage.

      Questa opzione garantisce che il bucket Cloud Storage di destinazione corrisponda esattamente all'origine.

  5. Nella sezione Opzioni di notifica, seleziona l'argomento Pub/Sub e gli eventi per cui ricevere notifiche. Per maggiori dettagli, consulta Notifiche Pub/Sub.

  6. Fai clic su Passaggio successivo.

Pianificare il trasferimento

Puoi pianificare l'esecuzione del trasferimento una sola volta o configurare un trasferimento ricorrente.

Fai clic su Crea per creare il job di trasferimento.

Interfaccia a riga di comando gcloud

Prima di utilizzare la CLI gcloud per creare un trasferimento, segui le istruzioni riportate in Configura l'accesso a un sink Cloud Storage.

Per utilizzare la CLI gcloud per creare un trasferimento da un'origine compatibile con S3 a un bucket Cloud Storage, utilizza il seguente 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

Sono necessari i seguenti flag:

  • --source-agent-pool è il nome del pool di agenti da utilizzare per questo trasferimento.

  • --source-endpoint specifica l'endpoint del sistema di archiviazione. Ad esempio, s3.us-east.example.com. Rivolgiti al tuo fornitore per la formattazione corretta. Non includere il protocollo (ad es. https://) o il nome del bucket.

I flag rimanenti sono facoltativi:

  • --source-signing-region specifica una regione per la firma delle richieste. Ometti questo flag se il provider di spazio di archiviazione non richiede una regione di firma.
  • --source-auth-method specifica il metodo di autenticazione da utilizzare. I valori validi sono AWS_SIGNATURE_V2 o AWS_SIGNATURE_V4. Per saperne di più, consulta la documentazione di Amazon su SigV4 e SigV2.
  • --source-request-model specifica lo stile di indirizzamento da utilizzare. I valori validi sono PATH_STYLE o VIRTUAL_HOSTED_STYLE. Lo stile del percorso utilizza il formato https://s3.REGION.example.com/BUCKET_NAME/KEY_NAME. Lo stile con hosting virtuale utilizza il formato `https://BUCKET_NAME.s3.REGION.example.com/KEY_NAME.
  • --source-network-protocol specifica il protocollo di rete che gli agenti devono utilizzare per questo job. I valori validi sono HTTP o HTTPS.
  • --source-list-api specifica la versione dell'API Listing S3 per restituire gli oggetti dal bucket. I valori validi sono LIST_OBJECTS o LIST_OBJECTS_V2. Per saperne di più, consulta la documentazione di Amazon su ListObjectsV2 e ListObjects.

Per ulteriori opzioni per i job di trasferimento, esegui gcloud transfer jobs create --help o consulta la documentazione di riferimento di gcloud.

API REST

Prima di utilizzare l'API REST per creare un trasferimento, segui le istruzioni riportate in Configurare l'accesso a un sink Cloud Storage.

Per creare un trasferimento da un'origine compatibile con S3 utilizzando l'API REST, crea un oggetto JSON simile al seguente esempio.

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

Per le descrizioni dei campi, consulta il riferimento dell'API AwsS3CompatibleData.

Librerie client

Prima di utilizzare le librerie client per creare un trasferimento, segui le istruzioni riportate in Configura l'accesso a un sink Cloud Storage.

Go

Per scoprire come installare e utilizzare la libreria client per Storage Transfer Service, consulta Librerie client di Storage Transfer Service. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Go di Storage Transfer Service.

Per eseguire l'autenticazione in Storage Transfer Service, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.


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

Per scoprire come installare e utilizzare la libreria client per Storage Transfer Service, consulta Librerie client di Storage Transfer Service. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java di Storage Transfer Service.

Per eseguire l'autenticazione in Storage Transfer Service, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Storage Transfer Service, consulta Librerie client di Storage Transfer Service. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Node.js di Storage Transfer Service.

Per eseguire l'autenticazione in Storage Transfer Service, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.


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

Per scoprire come installare e utilizzare la libreria client per Storage Transfer Service, consulta Librerie client di Storage Transfer Service. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Python di Storage Transfer Service.

Per eseguire l'autenticazione in Storage Transfer Service, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

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

Domande frequenti

È previsto un costo per il trasferimento dallo spazio di archiviazione compatibile con S3?

I trasferimenti dallo spazio di archiviazione compatibile con S3 non comportano la commissione "Trasferimenti di Storage Transfer Service che richiedono agenti". Consulta la sezione Prezzi per eventuali altre tariffe che potrebbero essere addebitate. Potrebbero essere applicati costi operativi e per il trasferimento di dati in uscita dal tuo cloud provider di origine.

Cloud Logging è supportato per i trasferimenti di spazio di archiviazione compatibile con S3?

Sì, puoi abilitare Cloud Logging per i trasferimenti seguendo le istruzioni riportate in Cloud Logging per Storage Transfer Service.

I trasferimenti che utilizzano un manifest sono supportati?

Sì, i file manifest sono supportati per i trasferimenti compatibili con S3.

Se aggiungo un oggetto al bucket di origine dopo l'avvio del job, l'oggetto viene trasferito?

Storage Transfer Service esegue un'operazione di elenco sul bucket di origine per calcolare la differenza rispetto alla destinazione. Se l'operazione di elenco è già stata completata quando viene aggiunto il nuovo oggetto, questo viene ignorato fino al trasferimento successivo.

Storage Transfer Service esegue la corrispondenza dei checksum sulle origini compatibili con S3?

Storage Transfer Service si basa sui dati di checksum restituiti dall'origine. Per l'archiviazione compatibile con S3, Storage Transfer Service prevede che l'Etag dell'oggetto sia l'hash MD5 dell'oggetto.

Tuttavia, gli oggetti trasferiti all'archiviazione compatibile con S3 utilizzando il caricamento in più parti di S3 non hanno ETag MD5. In questo caso, Storage Transfer Service utilizza le dimensioni del file per convalidare l'oggetto trasferito.

Quale throughput è possibile ottenere per i trasferimenti dallo spazio di archiviazione compatibile con S3?

La velocità effettiva di trasferimento può essere scalata aggiungendo altri agenti di trasferimento. Consigliamo di utilizzare tre agenti per la tolleranza agli errori e per riempire una pipe da <10 Gbps. Per aumentare ulteriormente le dimensioni, aggiungi altri agenti. Gli agenti possono essere aggiunti e rimossi durante l'elaborazione di un trasferimento.

Dove devono essere implementati gli agenti di trasferimento per trasferire i dati da Amazon S3 a Cloud Storage?

Puoi installare agenti in Amazon EC2 o EKS nella stessa regione del tuo bucket. Puoi anche eseguire gli agenti su Google Cloud nella regione più vicina.