Como usar o controle de versão de um objeto no Google Cloud Storage

Nesta postagem, mostramos como usar o controle de versão de um objeto no Cloud Storage do Google Cloud.

O que é Cloud Storage?

Fornece, a nível mundial, um armazenamento de objetos altamente durável que escalona para exabytes de dados. É possível acessar dados instantaneamente de qualquer classe de armazenamento, integrar o armazenamento aos seus aplicativos com uma API exclusiva unificada e otimizar o preço e desempenho de forma fácil.    ​ 


O que é e por que usar o controle de versão no Cloud Storage? 

Controle de versões de objetos é um recurso do Cloud Storage que permite o “versionamento” de itens dentro de um bucket.

Ao utilizar esse recurso evitamos grandes dores de cabeça se um arquivo for excluído ou substituído por acidente.

No momento só é possível recuperar arquivos de um bucket ativo, ou seja, não é possível recuperar objetos de um bucket excluído, mesmo que nele tivesse o controle de versões de objetos ativado.

Ao subir um objeto que já exista no Cloud Storage, uma versão não atual é criada, assim o último upload vira a versão ativa.

Para identificar a versão de um objeto são utilizadas duas propriedades:

·       generation:

É o número identificador da criação de conteúdo do nosso objeto. É atualizado quando ocorre uma atualização no conteúdo desse objeto.

·       metageneration:

Esta propriedade é usada em conjunto com a anterior, ela identifica a geração dos metadados do objeto e aumenta sempre que os metadados são atualizados.


Passo a Passo - Linha de comando

1. O primeiro passo a fazer é o login em sua conta do GCP, para este tutorial você vai precisar de uma conta que possua um projeto.

2. Vá até a barra superior e clique no ícone do Cloud Shell, igual a imagem abaixo.

3. Selecione o projeto a ser utilizado.

gcloud config set project [SEU_PROJECT_ID]

4. Crie um novo bucket com o nome de teste_versionamento_[seu_project_id] na região de sua preferência.

gsutil mb -l [regiao] gs://teste_versionamento_[SEU_PROJECT_ID]

5. Habilite o versionamento no bucket, após executar o comando o Cloud Storage vai armazenar as versões antigas de um objeto sempre que houver um novo upload.

gsutil versioning set on gs://teste_versionamento_[SEU_PROJECT_ID]

Observação: As vezes pode demorar um pouco para essa opção ser ativada, geralmente demora 30 segundos.

6. Verifique se o versionamento foi ativado:

gsutil versioning get gs://teste_versionamento_[SEU_PROJECT_ID]

7. Crie um arquivo chamado teste.txt em seu bloco de notas, preencha o arquivo conforme abaixo:

“Este é primeiro upload deste arquivo.”

8. Dentro do Cloud Shell, faça o upload do seu arquivo.

9. Copie seu arquivo para seu bucket.

gsutil cp teste.txt gs://teste_versionamento_[SEU_PROJECT_ID]

10. Verifique seu arquivo no bucket.

gsutil ls -a gs://teste_versionamento_[SEU_PROJECT_ID]

Observação: O retorno deverá ser neste formato:

gs://[BUCKET]/[OBJETO]#[GENERATION]

Exemplo: gs://teste_versionamento_virtual-dog-26262/teste.txt#1596052922150974

11. Faça alguma alteração no arquivo e siga os passos 8,9 e 10 novamente para fazer upload, após a listagem vai ter duas versões do arquivo, conforme exemplo abaixo:

gs:// teste_versionamento_virtual-dog-26262/teste.txt#1596052922150974

gs:// teste_versionamento_virtual-dog-26262/teste.txt#1596113673793136

12. Mesmo após gerar uma nova versão é possível ler o conteúdo de uma antiga, basta colocar o número de geração após o nome do objeto, usarei o comando cat como exemplo:

gsutil cat gs://teste_versionamento_[SEU_PROJECT_ID]/teste.txt#[GENERATION]

Observações:

Para copiar este objeto para outro bucket use o comando conforme sintaxe abaixo:

gsutil cp gs://teste_versionamento_[SEU_PROJECT_ID]/teste.txt#[GENERATION] gs://[BUCKET_DESTINO]/[NOME_DO_OBJETO_NO_DESTINO]

Para remover uma versão específica de um objeto use o comando conforme sintaxe abaixo:

gsutil rm gs://teste_versionamento_[SEU_PROJECT_ID]/teste.txt#[GENERATION]

13. Para desativar o versionamento do Bucket utilize o comando abaixo:

gsutil versioning set off gs://teste_versionamento_[SEU_PROJECT_ID]


Referências

·        Object Versioning

https://cloud.google.com/storage/docs/object-versioning

·        Using Object Versioning

https://cloud.google.com/storage/docs/using-object-versioning