Mude a localização dos contentores

Esta página descreve o processo de mudança de contentores de uma localização para outra. Para obter informações sobre a mudança de contentores, consulte o artigo Mudança de contentores.

Antes de começar

Antes de poder mudar a localização dos contentores, conclua os seguintes passos:

  1. Configure as estatísticas de armazenamento.

  2. Ative a eliminação temporária.

  3. Verifique as quotas e os limites para garantir que a nova localização tem quotas suficientes para acomodar os dados do contentor.

  4. Determine o tipo de mudança de localização do contentor para compreender se é necessário tempo de inatividade de gravação.

  5. Remova quaisquer etiquetas de contentores existentes.

  6. Se usar relatórios de inventário, guarde as suas configurações.

  7. Obtenha as funções necessárias, que são descritas na secção seguinte.

Obtenha as funções necessárias

Para receber as autorizações de que precisa para mudar os contentores, peça ao seu administrador que lhe conceda a função de administrador de armazenamento (roles/storage.admin) do IAM no projeto. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função predefinida contém as autorizações necessárias para mudar a localização dos contentores. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações para mudar a localização dos contentores:

  • Para mudar um contentor: storage.buckets.relocate
  • Para ver o estado de uma operação de mudança de localização de um contentor: storage.bucketOperations.get
  • Para ver a lista de operações de mudança de localização de contentores de um projeto: storage.bucketOperations.list
  • Para cancelar uma operação de mudança de localização de um contentor: storage.bucketOperations.cancel
  • Para ver os metadados de um contentor durante as fases de teste e cópia incremental de dados da mudança de localização do contentor: storage.buckets.get
  • Para obter um objeto num contentor que quer mudar de localização: storage.objects.get
  • Para listar os objetos num contentor que quer mudar de localização: storage.objects.list

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Mude a localização dos contentores

Esta secção descreve o processo de mudança de localização de contentores do Cloud Storage de uma localização para outra. Quando muda um contentor de localização, inicia o processo de cópia de dados incremental, monitoriza o processo e, em seguida, inicia o passo de sincronização final. Para mais informações sobre estes passos, consulte o artigo Compreenda o processo de mudança de localização do contentor.

Faça uma execução de ensaio

Para minimizar potenciais problemas durante o processo de mudança de grupos, recomendamos que faça um teste prévio. Um teste prévio simula o processo de mudança de localização do contentor sem mover dados, o que ajuda a detetar e resolver problemas antecipadamente. O teste de simulação verifica as seguintes incompatibilidades:

Embora um teste prévio não possa identificar todos os problemas possíveis, uma vez que alguns problemas podem surgir apenas durante a migração em direto devido a fatores como a disponibilidade de recursos em tempo real, reduz o risco de enfrentar problemas demorados durante a mudança real.

Linha de comandos

Simule a execução de ensaio da mudança de localização do contentor:

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

Onde:

  • BUCKET_NAME é o nome do contentor que quer mudar de localização.

  • LOCATION é a localização de destino do contentor.

Depois de iniciar um ensaio, é iniciada uma operação de longa duração. Vai receber um ID da operação e uma descrição da operação. Acompanhe o progresso e a conclusão do teste de execução obtendo os detalhes da operação de longa duração.

Se o teste de execução revelar problemas, resolva-os antes de avançar para o Passo de início da cópia de dados incremental.

APIs REST

API JSON

  1. Ter a CLI gcloud instalada e inicializada, o que lhe permite gerar um token de acesso para o cabeçalho Authorization.

  2. Crie um ficheiro JSON que contenha as definições do contentor, que tem de incluir os parâmetros destinationLocation e validateOnly. Consulte a Buckets: relocate documentação para ver uma lista completa de definições. Seguem-se as definições comuns a incluir:

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

    Onde:

    • DESTINATION_LOCATION é a localização de destino do contentor.
    • LOCATIONS é uma lista de códigos de localização a usar para a região dupla configurável.
    • O valor validateOnly está definido como true para fazer um ensaio.
  3. Use cURL para chamar a 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"

    Onde:

    • JSON_FILE_NAME é o nome do ficheiro JSON que criou.
    • BUCKET_NAME é o nome do contentor que quer mudar de localização.

    Depois de iniciar um ensaio, é iniciada uma operação de longa duração. O teste de execução tem êxito quando as seguintes condições são cumpridas:

    • A simulação não comunica erros.
    • O recurso operations devolve um valor do campo done de true.

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

    Se o teste de execução revelar problemas, resolva-os antes de avançar para o Passo de início da cópia de dados incremental.

Inicie a cópia de dados incremental

Linha de comandos

Inicie a operação de mudança de localização do contentor:

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

Onde:

  • BUCKET_NAME é o nome do contentor que quer mudar de localização.

  • LOCATION é a localização de destino do contentor.

APIs REST

API JSON

  1. Ter a CLI gcloud instalada e inicializada, o que lhe permite gerar um token de acesso para o cabeçalho Authorization.

  2. Crie um ficheiro JSON que contenha as definições do contentor. Consulte a Buckets: relocate documentação para ver uma lista completa de definições. Seguem-se as definições comuns a incluir:

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

    Onde:

    • DESTINATION_LOCATION é a localização de destino do contentor.
    • LOCATIONS é uma lista de códigos de localização a usar para a região dupla configurável.
    • validateOnly está definido como false para iniciar o passo de cópia de dados incremental da mudança de localização do contentor.
  3. Use cURL para chamar a 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"

    Onde:

    • JSON_FILE_NAME é o nome do ficheiro JSON que criou.
    • BUCKET_NAME é o nome do contentor que quer mudar de localização.

Monitorize a cópia de dados incremental

O processo de mudança de localização do contentor é uma operação de longa duração que tem de ser monitorizada para ver o respetivo progresso. Pode verificar regularmente a lista de operações de longa duração para ver o estado do passo de cópia de dados incremental. Para obter informações sobre como aceder aos detalhes de uma operação de longa duração, listar ou cancelar operações de longa duração, consulte o artigo Use operações de longa duração no Cloud Storage.

O exemplo seguinte mostra o resultado gerado por uma operação de cópia de dados incremental:

  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
 

A tabela seguinte fornece informações sobre os campos principais no resultado gerado pela operação de cópia de dados incremental:

Nome do campo Descrição Valores possíveis
done Indica a conclusão da operação de mudança de localização do contentor. true, false
kind Indica que este recurso representa uma operação de armazenamento.
metadata Faculta informações sobre a operação.
metadata.@type Indica o tipo de operação como mudança de localização do contentor.
metadata.commonMetadata Metadados comuns a todas as operações.
metadata.commonMetadata.createTime A hora em que a operação de longa duração foi criada.
metadata.commonMetadata.endTime A hora em que a operação de longa duração terminou.
metadata.commonMetadata.progressPercent O progresso estimado da operação de longa duração, em percentagem. Entre 0 e 100%. Um valor de -1 significa que o progresso é desconhecido ou não aplicável.
metadata.commonMetadata.requestedCancellation Indica se o utilizador pediu o cancelamento da operação de longa duração. true, false
metadata.commonMetadata.type Indica o tipo de operação de longa duração.
metadata.commonMetadata.updateTime A hora da última atualização da operação de longa duração.
metadata.destinationLocation A localização de destino do contentor.
metadata.finalizationState Indica a prontidão para iniciar o passo de sincronização final.
  • READY: indica que pode iniciar o passo de sincronização final. No entanto, recomendamos que aguarde até que o valor do campo progressPercent atinja 99.
  • WAITING_ON_SYNC: indica que não pode iniciar o passo de sincronização final.
  • NOT_REQUIRED: indica que o passo de sincronização final não é necessário para este conjunto e pode ignorá-lo.
  • BLOCKED_ON_ERRORS: indica que o passo de finalização está temporariamente em pausa devido a erros. Tem de resolver os erros para continuar com o passo.
  • RUNNING: indica que o passo de finalização está em curso.
  • FINALIZED: indica que o passo de finalização foi concluído com êxito.
metadata.progress Detalhes do progresso da operação de mudança.
metadata.progress.byteProgressPercent Progresso dos bytes copiados em percentagem. Entre 0 e 100%. Um valor de -1 significa que o progresso é desconhecido ou não aplicável.
metadata.progress.discoveredBytes Número de bytes descobertos no contentor de origem.
metadata.progress.discoveredObjectCount Número de objetos descobertos no contentor de origem.
metadata.progress.discoveredSyncCount Número de atualizações de metadados de objetos detetadas no contentor de origem.
metadata.progress.objectProgressPercent Progresso dos objetos copiados em percentagem. Entre 0 e 100%. Um valor de -1 significa que o progresso é desconhecido ou não aplicável.
metadata.progress.remainingBytes Número de bytes restantes a copiar do contentor de origem para o contentor de destino.
metadata.progress.remainingObjectCount Número de objetos restantes a copiar do contentor de origem para o contentor de destino.
metadata.progress.remainingSyncCount Número de atualizações de metadados de objetos restantes a sincronizar.
metadata.progress.syncProgressPercent Progresso das atualizações de metadados de objetos a sincronizar em percentagem. Entre 0 e 100%. Um valor de -1 significa que o progresso é desconhecido ou não aplicável.
metadata.relocationState Estado geral da operação de mudança de localização do contentor.
  • SYNCING: indica que o passo de cópia de dados incremental está a copiar ativamente objetos do contentor de origem para o contentor de destino.
  • FINALIZING: indica que o passo de finalização foi iniciado.
  • FAILED: indica que o passo de cópia de dados incremental encontrou um erro e não foi concluído com êxito.
  • SUCCEEDED: indica que o passo de cópia de dados incremental foi concluído com êxito.
  • CANCELLED: indica que a etapa de cópia de dados incremental foi cancelada.
metadata.sourceLocation A localização de origem do contentor.
metadata.validateOnly Indica se foi iniciada uma execução de teste da mudança de localização do contentor. true, false
metadata.estimatedWriteDowntimeDuration A duração estimada do período de descanso de gravação; preenchida quando o elemento finalizationState é READY. O valor mínimo é 7200s.
metadata.writeDowntimeExpireTime A hora em que o período de descanso de escrita expira.
name O identificador exclusivo desta operação de mudança de localização.
Formato: projects/_/buckets/bucket-name/operations/operation-id
response A resposta da operação.
response.@type O tipo de resposta.
selfLink Um link para esta operação.

Se tiver problemas ao interagir com outras funcionalidades do Cloud Storage, consulte as Limitações.

Inicie o passo de sincronização final

O passo de sincronização final envolve um período durante o qual não pode realizar operações de escrita no contentor. Recomendamos que agende o passo de sincronização final para uma altura que minimize a interrupção das suas aplicações.

Antes de continuar, confirme que o contentor está totalmente preparado verificando o valor de finalizationState no resultado do passo de cópia de dados incremental. O valor finalizationState tem de ser READY para continuar.

Se iniciar o passo de sincronização final prematuramente, o comando devolve uma mensagem de erro The relocate bucket operation is not ready to advance to finalization running state, mas o processo de mudança continua.

Recomendamos que aguarde até que o valor de progressPercent seja 99 antes de iniciar o passo de sincronização final.

Linha de comandos

Inicie o passo de sincronização final da operação de mudança de localização do contentor assim que o valor de finalizationState for READY:

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

Onde:

  • BUCKET_NAME é o nome do contentor que quer mudar de localização.
  • OPERATION_ID é o ID da operação de longa duração, que é devolvido na resposta dos métodos que chama. Por exemplo, a seguinte resposta é devolvida ao chamar gcloud storage operations list e o ID da operação de longa duração é AbCJYd8jKT1n-Ciw1LCNXIcubwvij_TdqO-ZFjuF2YntK0r74.
 `name: projects/_/buckets/my-bucket/operations/AbCJYd8jKT1n-Ciw1LCNXIcubwvij_TdqO-ZFjuF2YntK0r74` 

Defina a flag ttl para ter maior controlo sobre o processo de mudança. Por exemplo:

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

Onde:

TTL_DURATION é o tempo de vida (TTL) para a fase de inatividade de gravação durante um processo de mudança. É expresso como uma string, como 12h para 12 horas. O TTL_DURATION determina a duração máxima permitida para a fase de inatividade de gravação. Se o tempo de inatividade de gravação exceder este limite, o processo de mudança reverte automaticamente para o passo de cópia incremental e as operações de gravação no contentor são reativadas. O valor tem de estar dentro do intervalo de 6h (6 horas) a 48h (48 horas). Se não for especificado, o valor predefinido é 12h (12 horas).

APIs REST

API JSON

  1. Ter a CLI gcloud instalada e inicializada, o que lhe permite gerar um token de acesso para o cabeçalho Authorization.

  2. Crie um ficheiro JSON que contenha as definições para a mudança de localização do contentor. Consulte a Buckets: advanceRelocateBucket documentação para ver uma lista completa de definições. Seguem-se as definições comuns a incluir:

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

    Onde:

    • EXPIRE_TIME é a hora em que a indisponibilidade de gravação expira.
    • TTL_DURATION é o tempo de vida (TTL) para a fase de inatividade de gravação durante um processo de mudança. É expresso como uma string, como 12h para 12 horas. O TTL_DURATION determina a duração máxima permitida para a fase de inatividade de gravação. Se o tempo de inatividade de gravação exceder este limite, o processo de mudança reverte automaticamente para o passo de cópia incremental e as operações de gravação no contentor são reativadas. O valor tem de estar dentro do intervalo de 6h (6 horas) a 48h (48 horas). Se não for especificado, o valor predefinido é 12h (12 horas).
  3. Use cURL para chamar a 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"

    Onde:

    • JSON_FILE_NAME é o nome do ficheiro JSON que criou.
    • BUCKET_NAME é o nome do contentor que quer mudar de localização.
    • OPERATION_ID é o ID da operação de longa duração, que é devolvido na resposta dos métodos que chama. Por exemplo, a seguinte resposta é devolvida ao chamar Operations: list e o ID da operação de longa duração é AbCJYd8jKT1n-Ciw1LCNXIcubwvij_TdqO-ZFjuF2YntK0r74.

Valide o processo de mudança de localização do contentor

Após iniciar uma mudança de localização, verifique se foi concluída com êxito. Esta secção fornece orientações sobre como confirmar a transferência bem-sucedida de dados.

Valide o sucesso do processo de mudança através dos seguintes métodos:

  • Verificar operações de longa duração: a mudança de localização do contentor é uma operação de longa duração. Pode sondar a operação de longa duração através do método operation id para monitorizar o progresso da operação e confirmar a respetiva conclusão bem-sucedida verificando o estado success. Isto envolve consultar periodicamente o estado da operação até atingir um estado terminal. Para obter informações sobre a monitorização de operações de longa duração, consulte o artigo Use operações de longa duração no Cloud Storage.

  • Analise as entradas dos registos de auditoria do Cloud: os registos de auditoria do Cloud fornecem um registo detalhado de eventos e operações no seu Google Cloud ambiente. Pode analisar as entradas dos registos de auditoria do Google Cloud associadas à mudança para validar o êxito da mesma. Analise os registos para verificar se existem erros, avisos ou comportamentos inesperados que possam indicar problemas durante a transferência. Para ver informações sobre a visualização de registos do Cloud Audit Logs, consulte o artigo Visualizar registos de auditoria.

    As seguintes entradas do registo ajudam a determinar se a mudança foi bem-sucedida ou não:

    • Relocação bem-sucedida: Relocate bucket succeeded. All existing objects are now in the new placement configuration.

    • Falha na mudança de localização: Relocate bucket has failed. Bucket location remains unchanged.

    Através das notificações do Pub/Sub, também pode configurar alertas que enviam uma notificação quando o evento de êxito ou falha específico aparece nos registos. Para obter informações sobre a configuração de notificações do Pub/Sub, consulte o artigo Configurar notificações do Pub/Sub para o Cloud Storage.

Conclua as tarefas de mudança de localização do contentor de publicação

Depois de mudar o seu contentor com êxito, conclua os seguintes passos:

  1. Opcional: restaure os controlos de acesso baseados em etiquetas no seu contentor.
  2. As configurações do relatório de inventário existentes não são preservadas durante o processo de mudança e tem de as recriar manualmente. Para obter informações sobre como criar uma configuração de relatório de inventário, consulte o artigo Crie uma configuração de relatório de inventário.
  3. Atualize as configurações de infraestrutura como código, como o Terraform e o conector de configuração do Google Kubernetes Engine, para especificar a nova localização do contentor.
  4. Os pontos finais regionais estão associados a localizações específicas e tem de modificar o código da aplicação para refletir o novo ponto final.

Como processar operações de mudança de contentor com falhas

Considere os seguintes fatores antes de processar operações de mudança de localização de contentores com falhas:

  • Uma mudança de localização do contentor com falhas pode deixar recursos obsoletos, como ficheiros temporários ou cópias de dados incompletas, no destino. Tem de aguardar entre 7 e 14 dias antes de iniciar outra mudança de contentor para o mesmo destino. Pode iniciar imediatamente uma mudança de localização do contentor para um destino diferente.

  • Se a localização de destino não for a localização ideal para os seus dados, é recomendável reverter a mudança de localização. No entanto, não pode iniciar uma mudança de localização imediatamente. É necessário um período de espera de até 14 dias antes de poder iniciar novamente o processo de mudança de localização. Esta restrição está em vigor para garantir a estabilidade e evitar conflitos de dados.

O que se segue?