Storage Transfer Service può essere utilizzato per trasferire grandi quantità di dati tra i bucket Cloud Storage, all'interno dello stesso progetto Google Cloud o tra progetti diversi.
Le migrazioni dei bucket sono utili in diversi scenari. Possono essere utilizzati per consolidare i dati di progetti distinti, per spostare i dati in una posizione di backup o per cambiare la posizione dei dati.
Quando utilizzare Storage Transfer Service
Google Cloud offre diverse opzioni per trasferire dati tra di archiviazione dei bucket Cloud Storage. Consigliamo di attenerti alle seguenti linee guida:
Trasferimento di meno di 1 TB: utilizza
gcloud
. Per le istruzioni, consulta Spostare e rinominare i bucket.Trasferimento di più di 1 TB: usa Storage Transfer Service. Storage Transfer Service è un'opzione di trasferimento gestita che offre sicurezza, affidabilità e prestazioni immediate. Elimina la necessità di ottimizzare e gestire gli script, e gestire i nuovi tentativi.
Questa guida illustra le best practice per il trasferimento di dati tra Bucket Cloud Storage usando Storage Transfer Service.
Definire una strategia di trasferimento
La strategia di trasferimento dipende dalla complessità della situazione. Assicurati di includere nel piano le seguenti considerazioni.
Scegli un nome per il bucket
Per spostare i dati in un bucket di archiviazione con una località diversa, scegli una delle i seguenti approcci:
- Nuovo nome del bucket. Aggiorna le applicazioni in modo che rimandino a un bucket di archiviazione con un nome diverso.
- Mantieni il nome del bucket. Sostituisci il bucket di archiviazione per mantenere il nome corrente, in modo da non dover aggiornare le applicazioni.
In entrambi i casi, devi pianificare il tempo di riposo e informare gli utenti in modo adeguato che è imminente. Leggi le seguenti spiegazioni per capire qual è la scelta migliore per te.
Nome del nuovo bucket
Con un nuovo nome per il bucket, devi aggiornare tutto il codice e i servizi che utilizzano bucket attuale. La procedura dipende da come vengono create e dipiattate le applicazioni.
Per alcune configurazioni questo approccio potrebbe avere meno tempi di inattività, ma richiede più tempo garantire una transizione senza problemi. La procedura prevede i seguenti passaggi:
- Copiare i dati in un nuovo bucket di archiviazione.
- Inizia il tempo di riposo.
- Aggiornamento delle applicazioni in modo che punti al nuovo bucket.
- Verificare che tutto funzioni come previsto e che tutti i sistemi pertinenti e gli account hanno accesso al bucket.
- Eliminazione del bucket originale.
- Fine del tempo di riposo.
Mantieni il nome del bucket
Utilizza questo approccio se preferisci non modificare il codice in modo che punti a un nuovo bucket nome. La procedura prevede i seguenti passaggi:
- Copiare i dati in un bucket di archiviazione temporaneo.
- Avvio del tempo di riposo.
- Eliminazione del bucket originale.
- È in corso la creazione di un nuovo bucket con lo stesso nome del bucket originale.
- Copia dei dati nel nuovo bucket dal bucket temporaneo in corso.
- Eliminazione del bucket temporaneo.
- Verificare che tutto funzioni come previsto e che tutti gli account e i sistemi pertinenti abbiano accesso al bucket.
- Fine del tempo di riposo.
Ridurre al minimo i tempi di inattività
Storage Transfer Service non blocca le letture o le scritture sull'origine o sulla destinazione durante un trasferimento.
Se scegli di bloccare manualmente le letture/le scritture nel bucket, puoi ridurre al minimo il tempo di riposo trasferendo i dati in due passaggi: seed e sincronizzazione.
Trasferimento di seed: esegui un trasferimento collettivo senza bloccare la lettura/scrittura sull'origine.
Trasferimento sincronizzato: al termine della prima esecuzione, blocca la lettura/scrittura sul bucket di origine ed esegui un altro trasferimento. I trasferimenti di Storage Transfer Service sono incrementali per impostazione predefinita, pertanto questo secondo trasferimento trasferisce solo i dati modificati durante il trasferimento del seed.
Ottimizza la velocità di trasferimento
Quando stimi il tempo necessario per un job di trasferimento, tieni conto dei possibili colli di bottiglia. Ad esempio, se l'origine ha miliardi di file di piccole dimensioni, la velocità di trasferimento sarà legata a QPS. Se gli oggetti sono di grandi dimensioni, potrebbe essere un collo di bottiglia.
I limiti di larghezza di banda sono impostati a livello di regione e sono abbastanza allocati tra tutti in modo programmatico a gestire i progetti. Se è disponibile una larghezza di banda sufficiente, Storage Transfer Service può completare circa 1000 attività per job di trasferimento al secondo. In questo caso, puoi accelerare un trasferimento dividendo il job in più job di trasferimento di piccole dimensioni, ad esempio utilizzando i prefissi di inclusione ed esclusione per trasferire determinati file.
Se la località, la classe di archiviazione e la chiave di crittografia sono uguali, Storage Transfer Service non crea una nuova copia dei byte. viene invece creato una nuova voce di metadati che rimanda al blob di origine. Di conseguenza, le copie della stessa località e della stessa classe di un corpus di grandi dimensioni vengono completate molto rapidamente e sono vincolate solo dal QPS.
Anche le eliminazioni sono operazioni solo sui metadati. Per questi trasferimenti, la parallelizzazione del trasferimento suddividendolo in più job di piccole dimensioni può aumentare la velocità.
Conserva i metadati
I seguenti metadati degli oggetti vengono conservati durante il trasferimento di dati tra Bucket Cloud Storage con Storage Transfer Service:
- Metadati personalizzati creati dall'utente.
- Campi di metadati a chiave fissa di Cloud Storage, come Cache-Control, Content-Disposition, Content-Type e Custom-Time.
- Dimensioni dell'oggetto.
- Il numero di generazione viene mantenuto.
come campo di metadati personalizzato con la chiave
x-goog-reserved-source-generation
, che puoi modificare o rimuovere in un secondo momento.
Se vuoi, puoi conservare i seguenti campi dei metadati durante il trasferimento utilizzando l'API:
- ACL (
acl
) - Classe di archiviazione (
storageClass
) - CMEK (
kmsKey
) - trattenuta temporanea (
temporaryHold
) - Data/ora creazione oggetto (
customTime
)
Consulta la documentazione di riferimento dell'API TransferSpec
per ulteriori dettagli.
I seguenti campi dei metadati non vengono conservati:
- Ora ultimo aggiornamento (
updated
) etag
componentCount
Se conservata, l'ora di creazione dell'oggetto viene memorizzata come campo personalizzato,customTime
. Il tempo updated
dell'oggetto viene reimpostato al momento del trasferimento, quindi
viene reimpostato anche il tempo trascorso
dall'oggetto nella sua classe di archiviazione. Ciò significa che un oggetto
La classe Coldline Storage, dopo il trasferimento, deve esistere di nuovo per 90 giorni
ed evitare addebiti per l'eliminazione anticipata.
Puoi applicare i criteri del ciclo di vita basati su createTime
utilizzando customTime
. I valori customTime
esistenti vengono sovrascritti.
Per ulteriori dettagli su cosa viene conservato e cosa no, consulta la sezione Conservazione dei metadati.
Gestire gli oggetti sottoposti a controllo delle versioni
Se vuoi trasferire tutte le versioni dei tuoi oggetti di archiviazione e non solo la più recente, devi utilizzare l'interfaccia a riga di comando gcloud
o l'API REST per trasferire i tuoi dati, combinata con la funzionalità manifest di Storage Transfer Service.
Per trasferire tutte le versioni degli oggetti:
Elenca gli oggetti del bucket e copiali in un file JSON:
gcloud storage ls --all-versions --recursive --json [SOURCE_BUCKET] > object-listing.json
In genere, questo comando elenca circa 1000 oggetti al secondo.
Suddividi il file JSON in due file CSV, uno con versioni non correnti e un'altra con le versioni live:
jq -r '.[] | select( .type=="cloud_object" and (.metadata | has("timeDeleted") | not)) | [.metadata.name, .metadata.generation] | @csv' object-listing.json > live-object-manifest.csv jq -r '.[] | select( .type=="cloud_object" and (.metadata | has("timeDeleted"))) | [.metadata.name, .metadata.generation] | @csv' object-listing.json > non-current-object-manifest.csv
Attiva il controllo delle versioni degli oggetti nel bucket di destinazione.
Trasferisci prima le versioni non correnti passando il file manifest
non-current-object-manifest.csv
come valore del campotransferManifest
.Quindi, trasferisci le versioni pubblicate nello stesso modo, specificando
live-object-manifest.csv
come file manifest.
Configurare le opzioni di trasferimento
Ecco alcune delle opzioni disponibili durante la configurazione del trasferimento:
Logging: Cloud Logging fornisce log dettagliati dei singoli oggetti, consentendoti di verificare lo stato del trasferimento ed eseguire ulteriori controlli di integrità dei dati.
Filtro: puoi utilizzare i prefissi di inclusione ed esclusione per limitare gli oggetti su cui opera Storage Transfer Service. Questa opzione può essere utilizzata per suddividere un trasferimento in più job di trasferimento in modo che possano essere eseguiti in parallelo. Consulta: Ottimizza la velocità di trasferimento informazioni.
Opzioni di trasferimento: Puoi configurare il trasferimento in modo da sovrascrivere gli elementi esistenti nel nel bucket di destinazione. per eliminare gli oggetti nella destinazione che non esistono il set di trasferimento; o eliminare gli oggetti trasferiti dall'origine.
Trasferire i dati
Dopo aver definito la strategia di trasferimento, puoi: eseguire il trasferimento stesso.
Creazione di un nuovo bucket
Prima di iniziare il trasferimento, crea un bucket di archiviazione. Consulta location_considerations per scegliere una località del bucket appropriata.
Potresti voler copiare alcuni dei metadati dei bucket quando crei il nuovo bucket. Consulta Recuperare i metadati del bucket per scoprire come visualizzare i metadati del bucket di origine, in modo da poter applicare le stesse impostazioni al nuovo bucket.
Copia gli oggetti nel nuovo bucket
Puoi copiare gli oggetti dal bucket di origine in un nuovo bucket utilizzando la console Google Cloud, l'interfaccia a riga di comando gcloud
, l'API REST o le librerie client.
L'approccio scelto dipende dalla strategia di trasferimento.
Le seguenti istruzioni sono per il caso d'uso di base del trasferimento di oggetti da un bucket all'altro e deve essere modificato in base alle tue esigenze.
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 possono essere esposti ai sistemi interni di Google al di fuori del progetto.
Console Google Cloud
Utilizza Cloud Storage Transfer Service dalla console Google Cloud:
Apri la pagina Trasferisci nella console Google Cloud.
- Fai clic su Crea job di trasferimento.
Segui la procedura dettagliata, facendo clic su Passaggio successivo mentre per completare ogni passaggio:
Per iniziare: utilizza Google Cloud Storage sia come Tipo di origine sia come Tipo di destinazione.
Scegli un'origine: inserisci direttamente il nome del bucket desiderato oppure fai clic su Sfoglia per trovare e selezionare il bucket che ti interessa.
Scegli una destinazione: inserisci il nome del bucket desiderato direttamente oppure fai clic su Sfoglia per trovare e selezionare il bucket che preferisci.
Scegli le impostazioni: seleziona l'opzione Elimina i file dall'origine dopo il trasferimento.
Opzioni di pianificazione: puoi ignorare questa sezione.
Dopo aver completato la procedura dettagliata, fai clic su Crea.
Questo avvia il processo di copia degli oggetti dal bucket precedente quello nuovo. Questa procedura potrebbe richiedere del tempo; Tuttavia, dopo aver fatto clic Crea, puoi uscire dalla console Google Cloud.
Per visualizzare l'avanzamento del trasferimento:
Apri la pagina Trasferisci nella console Google Cloud.
Aperto alla pagina Trasferisci
Scopri come ottenere informazioni dettagliate sugli errori relativi a Storage Transfer Service non riuscito nella console Google Cloud, vedi Risoluzione dei problemi.
Al termine del trasferimento, non devi fare nulla per eliminare gli oggetti dal vecchio bucket se hai selezionato la casella di controllo Elimina gli oggetti di origine al termine del trasferimento durante la configurazione. Tuttavia, potresti anche eliminare il vecchio bucket, ma devi farlo separatamente.
Interfaccia a riga di comando gcloud
Installa la gcloud CLI
Se non l'hai già fatto, installare lo strumento a riga di comando gcloud.
Quindi, chiama gcloud init
per inizializzare lo strumento e specificare il tuo ID progetto
e account utente. Per maggiori dettagli, consulta la sezione Inizializza Cloud SDK.
gcloud init
Aggiungi l'account di servizio alla cartella di destinazione
Devi aggiungere l'account di servizio Storage Transfer Service al bucket di destinazione
prima di creare un trasferimento. Per farlo, utilizza
gcloud storage buckets add-iam-policy-binding
:
gcloud storage buckets add-iam-policy-binding gs://bucket_name \ --member=serviceAccount:project-12345678@storage-transfer-service.iam.gserviceaccount.com \ --role=roles/storage.admin
Per istruzioni sull'utilizzo della console o dell'API Google Cloud, consulta Utilizzare le autorizzazioni IAM nella documentazione di Cloud Storage.
Crea il job di trasferimento
Per creare un nuovo job di trasferimento, utilizza il comando gcloud transfer jobs create
.
La creazione di un nuovo job avvia il trasferimento specificato, a meno che non sia una pianificazione o
--do-not-run
è specificato.
gcloud transfer jobs create SOURCE DESTINATION
Dove:
L'origine dati di questo trasferimento è SOURCE, nel formato
gs://BUCKET_NAME
.DESTINATION è il tuo nuovo bucket, nel formato
gs://BUCKET_NAME
.
Altre opzioni includono:
Informazioni sul job: puoi specificare
--name
e--description
.Pianificazione: specifica
--schedule-starts
,--schedule-repeats-every
,--schedule-repeats-until
o--do-not-run
.Condizioni degli oggetti: utilizza le condizioni per determinare quali oggetti vengono trasferito. Questi includono
--include-prefixes
e--exclude-prefixes
, e le condizioni basate sul tempo--include-modified-[before | after]-[absolute | relative]
.Opzioni di trasferimento: specifica se sovrascrivere i file di destinazione (
--overwrite-when=different
oalways
) e se eliminare determinati file durante o dopo il trasferimento (--delete-from=destination-if-unique
osource-after-transfer
); specifica quali [metadata values to preserve]metadati; e se vuoi impostare facoltativamente una classe di archiviazione sugli oggetti trasferiti (--custom-storage-class
).Notifiche: configura le notifiche Pub/Sub per i trasferimenti con
--notification-pubsub-topic
,--notification-event-types
e--notification-payload-format
.
Per visualizzare tutte le opzioni, esegui gcloud transfer jobs create --help
.
Ad esempio, per trasferire tutti gli oggetti con il prefisso folder1
:
gcloud transfer jobs create gs://old-bucket gs://new-bucket \
--include-prefixes="folder1/"
REST
In questo esempio, scoprirai come spostare i file da un bucket Cloud Storage a un altro. Ad esempio, puoi spostare i dati in un bucket location.
Richiesta utilizzando transferJobs create:
POST https://storagetransfer.googleapis.com/v1/transferJobs { "description": "YOUR DESCRIPTION", "status": "ENABLED", "projectId": "PROJECT_ID", "schedule": { "scheduleStartDate": { "day": 1, "month": 1, "year": 2025 }, "startTimeOfDay": { "hours": 1, "minutes": 1 }, "scheduleEndDate": { "day": 1, "month": 1, "year": 2025 } }, "transferSpec": { "gcsDataSource": { "bucketName": "GCS_SOURCE_NAME" }, "gcsDataSink": { "bucketName": "GCS_SINK_NAME" }, "transferOptions": { "deleteObjectsFromSourceAfterTransfer": true } } }
Risposta:
200 OK { "transferJob": [ { "creationTime": "2015-01-01T01:01:00.000000000Z", "description": "YOUR DESCRIPTION", "name": "transferJobs/JOB_ID", "status": "ENABLED", "lastModificationTime": "2015-01-01T01:01:00.000000000Z", "projectId": "PROJECT_ID", "schedule": { "scheduleStartDate": { "day": 1, "month": 1, "year": 2015 }, "startTimeOfDay": { "hours": 1, "minutes": 1 } }, "transferSpec": { "gcsDataSource": { "bucketName": "GCS_SOURCE_NAME", }, "gcsDataSink": { "bucketName": "GCS_NEARLINE_SINK_NAME" }, "objectConditions": { "minTimeElapsedSinceLastModification": "2592000.000s" }, "transferOptions": { "deleteObjectsFromSourceAfterTransfer": true } } } ] }
Librerie client
In questo esempio, scoprirai come spostare i file da un bucket Cloud Storage a un altro. Ad esempio, puoi replicare i dati in un bucket in un'altra posizione.
Per saperne di più sulle librerie client di Storage Transfer Service, consulta Guida introduttiva alle librerie client di Storage Transfer Service.
Java
Cerchi campioni precedenti? Consulta la guida alla migrazione di Storage Transfer Service.
Python
Cerchi campioni precedenti? Consulta la guida alla migrazione di Storage Transfer Service.
Verificare gli oggetti copiati
Una volta completato il trasferimento, ti consigliamo di eseguire altri dati e controlli di integrità.
Verifica che gli oggetti siano stati copiati correttamente verificando i metadati sugli oggetti, ad esempio i checksum e le dimensioni.
Verifica che sia stata copiata la versione corretta degli oggetti. Storage Transfer Service offre un'opzione pronta all'uso per verificare che gli oggetti siano copie. Se hai attivato il logging, visualizza i log per verificare se tutti gli oggetti sono stati copiati correttamente, inclusi i relativi campi dei metadati.
Inizia a utilizzare il bucket di destinazione
Una volta completata e verificata la migrazione, aggiorna le applicazioni o i carichi di lavoro esistenti in modo che utilizzino il nome del bucket di destinazione. Controllare i log di accesso ai dati in Cloud Audit Logs per assicurarti che operazioni di modifica e lettura degli oggetti.
Elimina il bucket originale
Quando tutto ha funzionato bene, elimina il bucket originale.
Storage Transfer Service offre la possibilità di eliminare gli oggetti dopo che sono stati
trasferito specificando deleteObjectsFromSourceAfterTransfer: true
nel
configurazione del job o selezionando l'opzione nella console Google Cloud.
Pianificare l'eliminazione di oggetti
Per pianificare l'eliminazione degli oggetti in un secondo momento, utilizza una combinazione di un
job di trasferimento pianificato e l'opzione
deleteObjectsUniqueInSink = true
.
Il job di trasferimento deve essere configurato in modo da trasferire un bucket vuoto nel bucket che contengono i tuoi oggetti. In questo modo Storage Transfer Service elenca gli oggetti e per iniziare a eliminarle. Poiché le eliminazioni sono un'operazione solo di metadati, il job di trasferimento è limitato solo dal QPS. Per velocizzare il processo, suddividi il trasferimento in più job, ciascuno dei quali agisce su un insieme distinto di prefissi.
In alternativa, Google Cloud offre un pianificatore di cron job gestito. Per ulteriori informazioni, vedi Pianificare il job di trasferimento Google Cloud STS con Cloud Scheduler.