Trasferisci da un file system a Cloud Storage

Questa pagina mostra come creare job di trasferimento tra un file system ( on-premise o nel cloud) e Cloud Storage.

I trasferimenti da file system a Cloud Storage sono basati su agenti, il che significa che installerai agenti software su una macchina con accesso al tuo per orchestrare il trasferimento.

Configura autorizzazioni

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

L'account utente utilizzato per creare il trasferimento. Questo è il collegato alla console Google Cloud o l'account collegato specificato durante l'autenticazione nell'interfaccia a riga di comando "gcloud". L'account utente può essere un normale account utente o un account di servizio gestito dall'utente.
L'account di servizio gestito da Google, chiamato anche servizio usato da Storage Transfer Service. Questo account è generalmente identificato da il suo indirizzo email, che utilizza il formato project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.
L'account dell'agente trasferito che fornisce Google Cloud autorizzazioni per gli agenti di trasferimento. Gli account agente di trasferimento utilizzano le credenziali dell'utente che le installano oppure le credenziali account di servizio dall'utente, per eseguire l'autenticazione.

Consulta Autorizzazioni per il trasferimento basato su agente per istruzioni.

Installa agenti in un pool di agenti

I trasferimenti basati su agenti utilizzano agenti software per orchestrare i trasferimenti. Questi agenti deve essere installato su una macchina con accesso al file system coinvolto nella trasferimento.

Non includere informazioni sensibili come informazioni 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 possono essere propagati ai nomi di altre risorse Google Cloud e potrebbero essere esposti a sistemi interni di Google al di fuori del tuo progetto.
  1. Crea un pool di agenti. Utilizza il tuo account utente Simbolo account utente per questa azione.
  2. Installa agenti nel pool di agenti. Utilizza il tuo account di agente per i trasferimenti per questa azione.

Consigliamo di iniziare con tre agenti nel pool di agenti di origine. Dopo il trasferimento è in corso, monitora la velocità di trasferimento; puoi aggiungere altri agenti, al pool mentre è in corso il trasferimento.

Consigliamo una VM per agente, ciascuna con un minimo di 4 CPU e 8 GiB di RAM.

Opzioni di trasferimento

Le seguenti funzionalità di Storage Transfer Service sono disponibili per i trasferimenti da: in Cloud Storage.

Trasferire file specifici utilizzando un manifest
Puoi trasmettere un elenco di file su cui Storage Transfer Service deve intervenire. Consulta Trasferisci file specifici o utilizzando un file manifest.
Specifica la classe di archiviazione
Puoi specificare Classe di archiviazione di Cloud Storage da utilizzare per i dati nella destinazione di sincronizzare la directory di una VM con un bucket. Consulta le StorageClass per i dettagli REST oppure utilizza il metodo --custom-storage-class con Google Cloud CLI.

Tieni presente che tutte le impostazioni della classe di archiviazione vengono ignorate se la destinazione in cui è abilitato Autoclass. Se Autoclass è abilitato, gli oggetti trasferiti nel bucket vengono inizialmente impostata su Standard Storage.

Conservazione dei metadati

Durante il trasferimento di file dai file system, Storage Transfer Service può può conservare alcuni attributi come metadati personalizzati. Se questi file vengono poi riscritte in un file system, Storage Transfer Service può i metadati conservati e riportarli agli attributi POSIX.

Consulta la sezione Trasferimenti del file system POSIX di Metadati conservazione per informazioni dettagliate su quali metadati possono essere conservati. come configurare il trasferimento.

Gestione della larghezza di banda della rete
Storage Transfer Service utilizza per impostazione predefinita la larghezza di banda disponibile per trasferire file dal tuo file system. Puoi impostare un limite di larghezza di banda su impedire che un trasferimento influisca su altro traffico di rete. Limiti di larghezza di banda vengono applicate a livello di pool di agenti.

Consulta Gestisci larghezza di banda della rete principale.

Il tuo account utente richiede Storage Transfer Admin (roles/storagetransfer.admin) ruolo da impostare o modificare limiti di larghezza di banda.

Logging
Storage Transfer Service supporta Cloud Logging per Storage Transfer Service (consigliato), nonché in base a un agente log di trasferimento.

Crea un trasferimento

Non includere informazioni sensibili come informazioni che consentono l'identificazione personale (PII) o dati di sicurezza nel nome del job di trasferimento. I nomi delle risorse possono essere propagati ai nomi di altre risorse Google Cloud e potrebbero essere esposti a sistemi interni di Google al di fuori del tuo progetto.

Storage Transfer Service offre diverse interfacce tramite le quali creare un'istanza trasferimento.

Console Google Cloud

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

    Vai a Storage Transfer Service

  2. Fai clic su Crea job di trasferimento. La pagina Crea un job di trasferimento visualizzati.

  3. Scegli POSIX file system come origine.

  4. Seleziona Cloud Storage come tipo di destinazione e fai clic su Passaggio successivo.

  5. Seleziona un pool di agenti esistente oppure Crea pool di agenti e segui le istruzioni per creare un nuovo pool.

  6. Specifica il percorso completo della directory del file system.

  7. Fai clic su Passaggio successivo.

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

  9. Fai clic su Passaggio successivo.

  10. Scegli le opzioni di pianificazione.

  11. Fai clic su Passaggio successivo.

  12. Scegli le impostazioni per il job di trasferimento.

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

    • In Opzioni metadati, utilizza le opzioni predefinite, o aggiornare uno o più valori. Consulta Conservazione dei metadati per maggiori dettagli.

    • In Quando sovrascrivere, seleziona una delle seguenti opzioni:

      • Mai: Storage Transfer Service salta il trasferimento di qualsiasi file da l'origine che hanno lo stesso nome di un file presente nella destinazione.

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

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

    • In Quando eliminare, seleziona una delle seguenti opzioni:

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

      • Elimina file dall'origine dopo il trasferimento: elimina i file dall'origine dopo il trasferimento alla destinazione.

      • Elimina i file dalla destinazione se non sono anche nell'origine: se anche i file nel bucket Cloud Storage di destinazione l'origine, quindi elimina i file da Cloud Storage di sincronizzare la directory di una VM con un bucket.

        Questa opzione garantisce che il bucket Cloud Storage di destinazione corrisponde esattamente alla fonte.

    • Scegli se abilitare il logging in Cloud Storage e/o Abilita il logging in Cloud Logging. Consulta Log di trasferimento del file system e Cloud Logging per Storage Transfer Service per ulteriori informazioni.

  13. Per creare il job di trasferimento, fai clic su Crea.

gcloud

Prima di utilizzare i comandi gcloud, installa Google Cloud CLI.

Per creare un nuovo job di trasferimento, utilizza gcloud transfer jobs create . La creazione di un nuovo job avvia il trasferimento specificato, a meno che non venga pianificazione o --do-not-run è specificato.

gcloud transfer jobs create \
  posix:///SOURCE \
  gs://DESTINATION/ \
  --source-agent-pool=SOURCE_POOL_NAME

Dove:

  • SOURCE è un percorso assoluto dal principale del file system. È preceduto dal prefisso posix:// e quindi il valore finale includerà tre barre. Ad esempio: posix:///tmp/data/.

  • DESTINATION è il nome di un bucket Cloud Storage facoltativamente, un percorso della cartella seguito da una barra finale. Ad esempio: gs://example-bucket/data/.

  • --source-agent-pool specifica il pool di agenti di origine da utilizzare per questa richiesta trasferimento.

Altre opzioni includono:

  • --do-not-run impedisce a Storage Transfer Service di eseguire il job al momento dell'invio del comando. Per eseguire il job, aggiornalo a aggiungi una programmazione o utilizza jobs run per avviarla manualmente.

  • --manifest-file specifica il percorso di un file CSV in Cloud Storage contenente un elenco di file da trasferire dall'origine. Per il file manifest formattazione, consulta Trasferisci file o oggetti specifici utilizzando un manifest.

  • Informazioni job: puoi specificare --name e --description.

  • Pianifica: specifica --schedule-starts, --schedule-repeats-every e --schedule-repeats-until o --do-not-run.

  • Opzioni di trasferimento: specifica se sovrascrivere la destinazione file (--overwrite-when=different o always) e indica se eliminare determinati file durante o dopo il trasferimento (--delete-from=destination-if-unique o source-after-transfer); specificare i valori dei metadati da conservare (--preserve-metadata); e facoltativamente, impostare una classe di archiviazione sugli oggetti trasferiti (--custom-storage-class).

Per visualizzare tutte le opzioni, esegui gcloud transfer jobs create --help o consulta le documentazione di riferimento gcloud. Tieni presente che non tutte le opzioni sono supportate per i trasferimenti basati su agente. le opzioni non supportate contengono una nota in tal senso nel testo della guida.

REST

L'esempio seguente mostra come utilizzare Storage Transfer Service tramite REST API.

Quando configuri o modifichi i job di trasferimento utilizzando nell'API Storage Transfer Service, l'ora deve essere nel fuso orario UTC. Per ulteriori informazioni che specifica la pianificazione di un job di trasferimento, Programmazione.

Per spostare i file da un file system POSIX a un bucket Cloud Storage, utilizza transferJobs.create con un posixDataSource:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
 "name":"transferJobs/sample_transfer",
 "description": "My First Transfer",
 "status": "ENABLED",
 "projectId": "my_transfer_project_id",
 "schedule": {
     "scheduleStartDate": {
         "year": 2022,
         "month": 5,
         "day": 2
     },
     "startTimeOfDay": {
         "hours": 22,
         "minutes": 30,
         "seconds": 0,
         "nanos": 0
     }
     "scheduleEndDate": {
         "year": 2022,
         "month": 12,
         "day": 31
     },
     "repeatInterval": {
         "259200s"
     },
 },
 "transferSpec": {
     "posixDataSource": {
          "rootDirectory": "/bar/",
     },
     "sourceAgentPoolName": "my_example_pool",
     "gcsDataSink": {
          "bucketName": "destination_bucket"
          "path": "foo/bar/"
     },
  }
}

La schedule è facoltativo; Se non è incluso, il job di trasferimento deve essere avviato con una richiesta transferJobs.run.

Per controllare lo stato del trasferimento dopo aver creato un job, utilizza transferJobs.get:

GET https://storagetransfer.googleapis.com/v1/transferJobs/sample_transfer?project_id=my_transfer_project_id

Librerie client

Gli esempi riportati di seguito mostrano come utilizzare Storage Transfer Service in modo programmatico con Go, Java, Node.js e Python.

Quando configuri o modifichi i job di trasferimento in modo programmatico, l'ora deve essere nel fuso orario UTC. Per ulteriori informazioni che specifica la pianificazione di un job di trasferimento, Programmazione.

Per saperne di più sulle librerie client di Storage Transfer Service, consulta Guida introduttiva alle librerie client di Storage Transfer Service.

Per spostare file da un file system POSIX a un bucket Cloud Storage:

Vai


import (
	"context"
	"fmt"
	"io"

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

func transferFromPosix(w io.Writer, projectID string, sourceAgentPoolName string, rootDirectory string, gcsSinkBucket string) (*storagetransferpb.TransferJob, error) {
	// Your project id
	// projectId := "myproject-id"

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

	// The root directory path on the source filesystem
	// rootDirectory := "/directory/to/transfer/source"

	// The ID of the GCS bucket to transfer data 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()

	req := &storagetransferpb.CreateTransferJobRequest{
		TransferJob: &storagetransferpb.TransferJob{
			ProjectId: projectID,
			TransferSpec: &storagetransferpb.TransferSpec{
				SourceAgentPoolName: sourceAgentPoolName,
				DataSource: &storagetransferpb.TransferSpec_PosixDataSource{
					PosixDataSource: &storagetransferpb.PosixFilesystem{RootDirectory: rootDirectory},
				},
				DataSink: &storagetransferpb.TransferSpec_GcsDataSink{
					GcsDataSink: &storagetransferpb.GcsData{BucketName: gcsSinkBucket},
				},
			},
			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", rootDirectory, gcsSinkBucket, resp.Name)
	return resp, nil
}

Java

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

public class TransferFromPosix {

  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 POSIX data source. If not provided, defaults to the
    // default agent
    String sourceAgentPoolName = "projects/my-project-id/agentPools/transfer_service_default";

    // The root directory path on the source filesystem
    String rootDirectory = "/directory/to/transfer/source";

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

    transferFromPosix(projectId, sourceAgentPoolName, rootDirectory, gcsSinkBucket);
  }

  public static void transferFromPosix(
      String projectId, String sourceAgentPoolName, String rootDirectory, String gcsSinkBucket)
      throws IOException {
    TransferJob transferJob =
        TransferJob.newBuilder()
            .setProjectId(projectId)
            .setTransferSpec(
                TransferSpec.newBuilder()
                    .setSourceAgentPoolName(sourceAgentPoolName)
                    .setPosixDataSource(
                        PosixFilesystem.newBuilder().setRootDirectory(rootDirectory).build())
                    .setGcsDataSink(GcsData.newBuilder().setBucketName(gcsSinkBucket).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 "
              + rootDirectory
              + " to "
              + gcsSinkBucket
              + " with "
              + "name "
              + response.getName());
    }
  }
}

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.
 */
// Your project id
// const projectId = 'my-project'

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

// The root directory path on the source filesystem
// const rootDirectory = '/directory/to/transfer/source'

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

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

/**
 * Creates a request to transfer from the local file system to the sink bucket
 */
async function transferDirectory() {
  const createRequest = {
    transferJob: {
      projectId,
      transferSpec: {
        sourceAgentPoolName,
        posixDataSource: {
          rootDirectory,
        },
        gcsDataSink: {bucketName: gcsSinkBucket},
      },
      status: 'ENABLED',
    },
  };

  // Runs the request and creates the job
  const [transferJob] = await client.createTransferJob(createRequest);

  const runRequest = {
    jobName: transferJob.name,
    projectId: projectId,
  };

  await client.runTransferJob(runRequest);

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

transferDirectory();

Python

from google.cloud import storage_transfer


def transfer_from_posix_to_gcs(
    project_id: str,
    description: str,
    source_agent_pool_name: str,
    root_directory: str,
    sink_bucket: str,
):
    """Create a transfer from a POSIX file system to a GCS bucket."""

    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'

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

    # The root directory path on the source filesystem
    # root_directory = '/directory/to/transfer/source'

    # Google Cloud Storage sink bucket name
    # sink_bucket = 'my-gcs-sink-bucket'

    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,
                    "posix_data_source": {
                        "root_directory": root_directory,
                    },
                    "gcs_data_sink": {"bucket_name": sink_bucket},
                },
            }
        }
    )

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