Spostare i bucket

Questa pagina descrive la procedura per spostare i bucket da una località a un'altra. Per informazioni sullo spostamento dei bucket, vedi Spostamento dei bucket.

Prima di iniziare

Prima di poter spostare i bucket, completa i seguenti passaggi:

  1. Configura Storage Intelligence.

  2. Abilita l'eliminazione temporanea.

  3. Controlla le quote e i limiti per assicurarti che la nuova località disponga di quote sufficienti per ospitare i dati del bucket.

  4. Determina il tipo di ricollocamento del bucket per capire se è necessario un tempo di inattività per la scrittura.

  5. Rimuovi tutti i tag bucket esistenti.

  6. Se utilizzi i report sull'inventario, salva le configurazioni.

  7. Ottieni i ruoli richiesti, descritti nella sezione seguente.

Ottenere i ruoli richiesti

Per ottenere le autorizzazioni necessarie per trasferire i bucket, chiedi all'amministratore di concederti il ruolo IAM Storage Admin (roles/storage.admin) nel progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Questo ruolo predefinito contiene le autorizzazioni necessarie per riassegnare i bucket. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per spostare i bucket sono necessarie le seguenti autorizzazioni:

  • Per spostare un bucket: storage.buckets.relocate
  • Per visualizzare lo stato di un'operazione di trasferimento del bucket: storage.bucketOperations.get
  • Per visualizzare l'elenco delle operazioni di trasferimento dei bucket per un progetto: storage.bucketOperations.list
  • Per annullare un'operazione di trasferimento del bucket: storage.bucketOperations.cancel
  • Per visualizzare i metadati di un bucket durante le fasi di simulazione e copia incrementale dei dati del trasferimento del bucket: storage.buckets.get
  • Per ottenere un oggetto in un bucket che vuoi trasferire: storage.objects.get
  • Per elencare gli oggetti in un bucket che vuoi trasferire: storage.objects.list

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Sposta bucket

Questa sezione descrive il processo di trasferimento dei bucket Cloud Storage da una località a un'altra. Quando sposti un bucket, avvii il processo di copia incrementale dei dati, lo monitori e poi avvii il passaggio di sincronizzazione finale. Per ulteriori informazioni su questi passaggi, consulta Comprendere la procedura di spostamento dei bucket.

Eseguire una prova

Per ridurre al minimo i potenziali problemi durante il processo di trasferimento dei bucket, ti consigliamo di eseguire una prova dry run. Una prova dry run simula il processo di spostamento del bucket senza spostare i dati, aiutandoti a rilevare e risolvere i problemi in anticipo. La prova dry run verifica le seguenti incompatibilità:

Anche se una prova generale non può identificare ogni possibile problema, in quanto alcuni problemi potrebbero emergere solo durante la migrazione live a causa di fattori quali la disponibilità di risorse in tempo reale, riduce il rischio di affrontare problemi che richiedono molto tempo durante il trasferimento effettivo.

Riga di comando

Simula la prova dello spostamento del bucket:

gcloud storage buckets relocate gs://BUCKET_NAME --location=LOCATION --dry-run

Dove:

  • BUCKET_NAME è il nome del bucket che vuoi trasferire.

  • LOCATION è la posizione di destinazione del bucket.

Dopo aver avviato un test dry run, viene avviata un'operazione a lunga esecuzione. Riceverai un ID operazione e una descrizione dell'operazione. Monitora l'avanzamento e il completamento del test dry run ottenendo i dettagli dell'operazione a lunga esecuzione.

Se la prova generale rivela problemi, risolvili prima di procedere con il passaggio di copia incrementale dei dati.

API REST

API JSON

  1. Avere gcloud CLI installata e inizializzata, il che ti consente di generare un token di accesso per l'intestazione Authorization.

  2. Crea un file JSON contenente le impostazioni del bucket, che deve includere i parametri destinationLocation e validateOnly. Consulta la documentazione relativa a Buckets: relocate per un elenco completo delle impostazioni. Di seguito sono riportate le impostazioni comuni da includere:

    {
      "destinationLocation": "DESTINATION_LOCATION",
      "destinationCustomPlacementConfig": {
          "dataLocations": [
            LOCATIONS,
            ...
            ]
        },
      "validateOnly": "true"
    }

    Dove:

    • DESTINATION_LOCATION è la posizione di destinazione del bucket.
    • LOCATIONS è un elenco di codici di località da utilizzare per la doppia regione configurabile.
    • validateOnly è impostato su true per eseguire una prova.
  3. Utilizza cURL per chiamare l'API JSON:

    curl -X POST --data-binary @JSON_FILE_NAME \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json" \
     "https://storage.googleapis.com/storage/v1/b/bucket=BUCKET_NAME/relocate"

    Dove:

    • JSON_FILE_NAME è il nome del file JSON che hai creato.
    • BUCKET_NAME è il nome del bucket che vuoi trasferire.

    Dopo aver avviato un test dry run, viene avviata un'operazione a lunga esecuzione. La prova dry run ha esito positivo quando sono soddisfatte le seguenti condizioni:

    • La prova non segnala errori.
    • La risorsa operations restituisce un valore del campo done pari a true.

      {
      "kind": "storage#operation",
      "name": "projects/_/buckets/bucket/operations/operation_id",
      "metadata": {
        "@type": OperationMetadataType*,
        metadata OperationMetadata*
      },
      "done": "true",
      "response": {
        "@type": ResponseResourceType*,
        response ResponseResource*
      }
      }

    Se la prova generale rivela problemi, risolvili prima di procedere con il passaggio di copia incrementale dei dati.

Avviare la copia incrementale dei dati

Riga di comando

Avvia l'operazione di spostamento del bucket:

gcloud storage buckets relocate gs://BUCKET_NAME --location=LOCATION

Dove:

  • BUCKET_NAME è il nome del bucket che vuoi trasferire.

  • LOCATION è la posizione di destinazione del bucket.

API REST

API JSON

  1. Avere gcloud CLI installata e inizializzata, il che ti consente di generare un token di accesso per l'intestazione Authorization.

  2. Crea un file JSON contenente le impostazioni del bucket. Consulta la documentazione relativa a Buckets: relocate per un elenco completo delle impostazioni. Di seguito sono riportate le impostazioni comuni da includere:

    {
      "destinationLocation": "DESTINATION_LOCATION",
      "destinationCustomPlacementConfig": {
          "dataLocations": [
            LOCATIONS,
            ...
            ]
        },
      "validateOnly": "false"
    }

    Dove:

    • DESTINATION_LOCATION è la posizione di destinazione del bucket.
    • LOCATIONS è un elenco di codici di località da utilizzare per la doppia regione configurabile.
    • validateOnly è impostato su false per avviare il passaggio di copia incrementale dei dati del trasferimento del bucket.
  3. Utilizza cURL per chiamare l'API JSON:

    curl -X POST --data-binary @JSON_FILE_NAME \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json" \
     "https://storage.googleapis.com/storage/v1/b/bucket=BUCKET_NAME/relocate"

    Dove:

    • JSON_FILE_NAME è il nome del file JSON che hai creato.
    • BUCKET_NAME è il nome del bucket che vuoi trasferire.

Monitorare la copia incrementale dei dati

Il processo di trasferimento del bucket è un'operazione a lunga esecuzione che deve essere monitorata per vedere come procede. Puoi controllare regolarmente l'elenco delle operazioni a lunga esecuzione per visualizzare lo stato del passaggio di copia incrementale dei dati. Per informazioni su come ottenere i dettagli di un'operazione a lunga esecuzione, elencare o annullare operazioni a lunga esecuzione, consulta Utilizzare operazioni a lunga esecuzione in Cloud Storage.

L'esempio seguente mostra l'output generato da un'operazione di copia incrementale dei dati:

  done: false
  kind: storage#operation
  metadata:
  '@type': type.googleapis.com/google.storage.control.v2.RelocateBucketMetadata
  commonMetadata:
    createTime: '2024-10-21T04:26:59.666Z
    endTime: '2024-12-29T23:39:53.340Z'
    progressPercent: 99
    requestedCancellation: false
    type: relocate-bucket
    updateTime: '2024-10-21T04:27:03.2892'
  destinationLocation: US-CENTRAL1
  finalizationState: 'READY'
  progress:
    byteProgressPercent: 100
    discoveredBytes: 200
    remainingBytes: 0
    discoveredObjectCount: 10
    remainingObjectCount: 8
    objectProgressPercent: 100
    discoveredSyncCount: 8
    remainingSyncCount: 0
    syncProgressPercent: 100
  relocationState: SYNCING
  sourceLocation: US
  validateOnly: false
  estimatedWriteDowntimeDuration: '7200s'
  writeDowntimeExpireTime: '2024-12-30T10:34:01.786Z'
  name: projects//buckets/my-bucket1/operations/Bar7-1b0khdew@nhenUQRTF_R-Kk4dQ5V1f8fzezkFcPh3XMvlTqJ6xhnqJ1h_QXFIeAirrEqkjgu4zPKSRD6WSSG5UGXil6w
  response:
    '@type': type.googleapis.com/google.storage.control.v2.RelocateBucketResponse
      selfLink: https://storage.googleusercontent.com/storage/v1_ds/b/my-bucket1/operations/Bar7-1b0khdew@nhenUQRTF_R-Kk4dQ5V1f8fzezkFcPh3XMvlTqJ6xhnqJ1h_QXFIeAirrEqkjgu4zPKSRD6WSSG5UGXil6w
 

La tabella seguente fornisce informazioni sui campi chiave nell'output generato dall'operazione di copia incrementale dei dati:

Nome campo Descrizione Valori possibili
done Indica il completamento dell'operazione di trasferimento del bucket. true, false
kind Indica che questa risorsa rappresenta un'operazione di archiviazione.
metadata Fornisce informazioni sull'operazione.
metadata.@type Indica il tipo di operazione come trasferimento del bucket.
metadata.commonMetadata Metadati comuni a tutte le operazioni.
metadata.commonMetadata.createTime L'ora in cui è stata creata l'operazione a lunga esecuzione.
metadata.commonMetadata.endTime L'ora in cui è terminata l'operazione a lunga esecuzione.
metadata.commonMetadata.progressPercent L'avanzamento stimato dell'operazione a lunga esecuzione, in percentuale. Tra 0 e 100%. Un valore di -1 indica che lo stato di avanzamento è sconosciuto o non applicabile.
metadata.commonMetadata.requestedCancellation Indica se l'utente ha richiesto l'annullamento dell'operazione a lunga esecuzione. true, false
metadata.commonMetadata.type Indica il tipo di operazione a lunga esecuzione.
metadata.commonMetadata.updateTime L'ora dell'ultimo aggiornamento dell'operazione a lunga esecuzione.
metadata.destinationLocation La posizione di destinazione del bucket.
metadata.finalizationState Indica la preparazione per l'avvio del passaggio di sincronizzazione finale.
  • READY: indica che puoi avviare il passaggio di sincronizzazione finale. Tuttavia, ti consigliamo di attendere fino a quando il valore del campo progressPercent raggiunge 99.
  • WAITING_ON_SYNC: indica che non puoi avviare il passaggio di sincronizzazione finale.
  • NOT_REQUIRED: indica che il passaggio di sincronizzazione finale non è necessario per questo bucket e puoi saltarlo.
  • BLOCKED_ON_ERRORS: indica che il passaggio di finalizzazione è temporaneamente sospeso a causa di errori. Per procedere con il passaggio, devi risolvere gli errori.
  • RUNNING: indica che il passaggio di finalizzazione è in corso.
  • FINALIZED: indica che il passaggio di finalizzazione è stato completato correttamente.
metadata.progress Dettagli sull'avanzamento dell'operazione di trasferimento.
metadata.progress.byteProgressPercent Avanzamento della copia dei byte in percentuale. Tra 0 e 100%. Un valore di -1 indica che lo stato di avanzamento è sconosciuto o non applicabile.
metadata.progress.discoveredBytes Numero di byte rilevati nel bucket di origine.
metadata.progress.discoveredObjectCount Numero di oggetti rilevati nel bucket di origine.
metadata.progress.discoveredSyncCount Numero di aggiornamenti dei metadati degli oggetti rilevati nel bucket di origine.
metadata.progress.objectProgressPercent Avanzamento della copia degli oggetti in percentuale. Tra 0 e 100%. Un valore di -1 indica che lo stato di avanzamento è sconosciuto o non applicabile.
metadata.progress.remainingBytes Numero di byte rimanenti da copiare dal bucket di origine al bucket di destinazione.
metadata.progress.remainingObjectCount Numero di oggetti rimanenti da copiare dal bucket di origine al bucket di destinazione.
metadata.progress.remainingSyncCount Numero di aggiornamenti dei metadati degli oggetti rimanenti da sincronizzare.
metadata.progress.syncProgressPercent Avanzamento degli aggiornamenti dei metadati degli oggetti da sincronizzare in percentuale. Tra 0 e 100%. Un valore di -1 indica che lo stato di avanzamento è sconosciuto o non applicabile.
metadata.relocationState Stato complessivo dell'operazione di trasferimento del bucket.
  • SYNCING: indica che il passaggio di copia incrementale dei dati sta copiando attivamente gli oggetti dal bucket di origine al bucket di destinazione.
  • FINALIZING: indica che è stato avviato il passaggio di finalizzazione.
  • FAILED: indica che il passaggio di copia incrementale dei dati ha riscontrato un errore e non è stato completato correttamente.
  • SUCCEEDED: indica che il passaggio di copia incrementale dei dati è stato completato correttamente.
  • CANCELLED: indica che il passaggio di copia incrementale dei dati è stato annullato.
metadata.sourceLocation La posizione di origine del bucket.
metadata.validateOnly Indica se è stata avviata una simulazione del trasferimento del bucket. true, false
metadata.estimatedWriteDowntimeDuration La durata stimata del tempo di inattività di scrittura; viene compilata una volta che finalizationState è READY. Il valore minimo è 7200s.
metadata.writeDowntimeExpireTime L'ora in cui scade il tempo di inattività di scrittura.
name L'identificatore univoco di questa operazione di riassegnazione.
Formato: projects/_/buckets/bucket-name/operations/operation-id
response La risposta dell'operazione.
response.@type Il tipo di risposta.
selfLink Un link a questa operazione.

Se riscontri problemi durante l'interazione con altre funzionalità di Cloud Storage, consulta la sezione Limitazioni.

Avviare il passaggio di sincronizzazione finale

Il passaggio di sincronizzazione finale prevede un periodo durante il quale non puoi eseguire operazioni di scrittura sul bucket. Ti consigliamo di pianificare l'ultimo passaggio di sincronizzazione in un momento che riduca al minimo l'interruzione delle tue applicazioni.

Prima di procedere, verifica che il bucket sia completamente preparato controllando il valore di finalizationState nell'output del passaggio Copia incrementale dei dati. Per procedere, il valore di finalizationState deve essere READY.

Se avvii il passaggio di sincronizzazione finale in anticipo, il comando restituisce un messaggio di errore The relocate bucket operation is not ready to advance to finalization running state, ma il processo di trasferimento continua.

Ti consigliamo di attendere che il valore di progressPercent sia 99 prima di avviare il passaggio di sincronizzazione finale.

Riga di comando

Avvia il passaggio di sincronizzazione finale dell'operazione di trasferimento del bucket una volta che il valore di finalizationState è READY:

gcloud storage buckets relocate --finalize --operation=projects/_/buckets/BUCKET_NAME/operations/OPERATION_ID

Dove:

  • BUCKET_NAME è il nome del bucket che vuoi trasferire.
  • OPERATION_ID è l'ID dell'operazione a lunga esecuzione, che viene restituito nella risposta dei metodi che chiami. Ad esempio, la seguente risposta viene restituita dalla chiamata di gcloud storage operations list e l'ID operazione a lunga esecuzione è AbCJYd8jKT1n-Ciw1LCNXIcubwvij_TdqO-ZFjuF2YntK0r74.
 `name: projects/_/buckets/my-bucket/operations/AbCJYd8jKT1n-Ciw1LCNXIcubwvij_TdqO-ZFjuF2YntK0r74` 

Imposta il flag ttl per avere un maggiore controllo sul processo di trasferimento. Ad esempio:

gcloud storage buckets relocate --finalize --ttl TTL_DURATION --operation=projects/_/buckets/BUCKET_NAME/operations/OPERATION_ID

Dove:

TTL_DURATION è la durata (TTL) della fase di inattività di scrittura durante una procedura di trasferimento. È espressa come stringa, ad esempio 12h per 12 ore. Il TTL_DURATION determina la durata massima consentita per la fase di inattività di scrittura. Se il tempo di inattività di scrittura supera questo limite, il processo di trasferimento torna automaticamente al passaggio di copia incrementale e le operazioni di scrittura nel bucket vengono riattivate. Il valore deve essere compreso tra 6h (6 ore) e 48h (48 ore). Se non specificato, il valore predefinito è 12h (12 ore).

API REST

API JSON

  1. Avere gcloud CLI installata e inizializzata, il che ti consente di generare un token di accesso per l'intestazione Authorization.

  2. Crea un file JSON contenente le impostazioni per il trasferimento del bucket. Consulta la documentazione relativa a Buckets: advanceRelocateBucket per un elenco completo delle impostazioni. Di seguito sono riportate le impostazioni comuni da includere:

    {
        "expireTime": "EXPIRE_TIME",
        "ttl": "TTL_DURATION"
    }

    Dove:

    • EXPIRE_TIME è l'ora in cui scade il tempo di inattività di scrittura.
    • TTL_DURATION è la durata (TTL) della fase di inattività di scrittura durante una procedura di trasferimento. È espressa come stringa, ad esempio 12h per 12 ore. Il TTL_DURATION determina la durata massima consentita per la fase di inattività di scrittura. Se il tempo di inattività di scrittura supera questo limite, il processo di trasferimento torna automaticamente al passaggio di copia incrementale e le operazioni di scrittura nel bucket vengono riattivate. Il valore deve essere compreso tra 6h (6 ore) e 48h (48 ore). Se non specificato, il valore predefinito è 12h (12 ore).
  3. Utilizza cURL per chiamare l'API JSON:

    curl -X POST --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/bucket/BUCKET_NAME/operations/OPERATION_ID/advanceRelocateBucket"

    Dove:

    • JSON_FILE_NAME è il nome del file JSON che hai creato.
    • BUCKET_NAME è il nome del bucket che vuoi trasferire.
    • OPERATION_ID è l'ID dell'operazione a lunga esecuzione, che viene restituito nella risposta dei metodi che chiami. Ad esempio, la seguente risposta viene restituita dalla chiamata di Operations: list e l'ID operazione a lunga esecuzione è AbCJYd8jKT1n-Ciw1LCNXIcubwvij_TdqO-ZFjuF2YntK0r74.

Convalidare la procedura di spostamento del bucket

Dopo aver avviato un trasferimento, verifica che sia stato completato correttamente. Questa sezione fornisce indicazioni per confermare il trasferimento dei dati.

Verifica la riuscita della procedura di trasferimento utilizzando i seguenti metodi:

  • Esegui il polling delle operazioni a lunga esecuzione: il trasferimento del bucket è un'operazione a lunga esecuzione. Puoi eseguire il polling dell'operazione a lunga esecuzione utilizzando operation id per monitorare l'avanzamento dell'operazione e confermarne il completamento verificando lo stato success. Ciò comporta l'esecuzione periodica di query sullo stato dell'operazione finché non raggiunge uno stato terminale. Per informazioni sul monitoraggio delle operazioni di lunga durata, consulta Utilizzare le operazioni di lunga durata in Cloud Storage.

  • Analizza le voci di Cloud Audit Logs: Cloud Audit Logs fornisce un record dettagliato di eventi e operazioni nel tuo ambiente Google Cloud . Puoi analizzare le voci di Cloud Audit Logs associate al trasferimento per verificarne la riuscita. Analizza i log per individuare eventuali errori, avvisi o comportamenti imprevisti che potrebbero indicare problemi durante il trasferimento. Per informazioni sulla visualizzazione dei log di Cloud Audit Logs, vedi Visualizzazione dei log di controllo.

    Le seguenti voci di log ti aiutano a determinare se lo spostamento è riuscito o meno:

    • Rilocazione riuscita: Relocate bucket succeeded. All existing objects are now in the new placement configuration.

    • Rilocazione non riuscita: Relocate bucket has failed. Bucket location remains unchanged.

    Utilizzando le notifiche Pub/Sub, puoi anche configurare avvisi che ti informano quando l'evento specifico di esito positivo o negativo viene visualizzato nei log. Per informazioni sulla configurazione delle notifiche Pub/Sub, consulta Configurare le notifiche Pub/Sub per Cloud Storage.

Completare le attività di riposizionamento dei bucket post

Dopo aver trasferito correttamente il bucket, completa i seguenti passaggi:

  1. (Facoltativo) Ripristina i controlli dell'accesso basati su tag sul bucket.
  2. Le configurazioni esistenti del report sull'inventario non vengono mantenute durante la procedura di trasferimento e dovrai ricrearle manualmente. Per informazioni sulla creazione di una configurazione di report dell'inventario, consulta Creare una configurazione di report dell'inventario.
  3. Aggiorna le configurazioni dell'infrastruttura come codice, ad esempio Terraform e il connettore di configurazione Google Kubernetes Engine, per specificare la nuova posizione del bucket.
  4. Gli endpoint regionali sono associati a località specifiche e dovrai modificare il codice dell'applicazione per riflettere il nuovo endpoint.

Come gestire le operazioni di riposizionamento dei bucket non riuscite

Prima di gestire le operazioni di riassegnazione dei bucket non riuscite, considera i seguenti fattori:

  • Il trasferimento non riuscito di un bucket potrebbe lasciare risorse obsolete, come file temporanei o copie incomplete dei dati, nella destinazione. Devi attendere da 7 a 14 giorni prima di avviare un altro spostamento del bucket nella stessa destinazione. Puoi avviare immediatamente il trasferimento di un bucket in una destinazione diversa.

  • Se la posizione di destinazione non è quella ottimale per i tuoi dati, potresti voler annullare il trasferimento. Tuttavia, non puoi avviare un trasferimento immediatamente. È necessario un periodo di attesa di massimo 14 giorni prima di poter avviare nuovamente la procedura di trasferimento. Questa limitazione è in vigore per garantire la stabilità ed evitare conflitti di dati.

Passaggi successivi