Deletando um Bucket Versionado
Introdução
Quando se trabalha com buckets versionados em sistemas de armazenamento em nuvem, é comum enfrentar desafios relacionados à gestão e deleção de arquivos e suas múltiplas versões. Buckets versionados mantêm um histórico de todas as versões de um objeto, o que pode levar a um acúmulo significativo de dados, especialmente quando há várias versões de cada arquivo.
Com as instruções e scripts fornecidos, você poderá gerenciar e limpar buckets versionados de maneira mais eficaz, prevenindo problemas relacionados ao armazenamento excessivo e garantindo que seu ambiente de armazenamento permaneça organizado e otimizado.
Verificando se meu bucket é versionado
- MGC-CLI
- AWS-CLI
- RCLONE
Na MGC-CLI, usamos o comando versioning get
, que recebe o bucket como parâmetro.
Veja o exemplo abaixo:
mgc object-storage buckets versioning get bucket-name
Respostas possíveis:
-
Versionamento nunca ativado:
MfaDelete: ""
Status: "" -
Versionamento ativo:
MfaDelete: ""
Status: Enable -
Versionamento suspenso:
MfaDelete: ""
Status: Suspended
Na AWS-CLI, usamos o comando s3api get-bucket-versioning
, que também recebe o
bucket como parâmetro. Veja o exemplo abaixo:
aws s3api get-bucket-versioning --bucket bucket-name
Respostas possíveis:
-
Versionamento ativo:
{
"Status": "Enabled"
} -
Versionamento suspenso:
{
"Status": "Suspended"
}
O RCLONE não possui um comando direto para verificar o status de versionamento.
Deletando versões manualmente
- MGC-CLI
- AWS-CLI
- RCLONE
Na MGC-CLI, é necessário obter o VersionID
de cada versão e deletar. Veja o
exemplo abaixo:
Listando as versões:
mgc object-storage objects versions --dst bucket-name
Deletando uma versão:
mgc object-storage objects delete --dst bucket-name/object-name --obj-version "VersionID"
Na AWS-CLI, é necessário obter o VersionID
de cada versão e deletar. Veja o
exemplo abaixo:
Listando as versões por objeto:
aws s3api list-object-versions --bucket bucket-name
Deletando uma versão:
aws s3api delete-object --bucket bucket-name --key object-key --version-id version-id
A flag --s3-versions
no RCLONE permite listar as versões de objetos em um bucket
S3. No entanto, para ações mais específicas, como deletar uma versão, você precisará
usar a AWS CLI. Veja o exemplo abaixo:
rclone ls remote:path --s3-versions
Deletando versões via script
- MGC-CLI
- AWS-CLI
- RCLONE
Na MGC-CLI, não é possível rodar scripts diretamente. Para automação, siga o passo a passo do AWS-CLI.
Na AWS-CLI, podemos usar jq
para iterar sobre cada versão de arquivo:
- Deletando todas as versões:
BUCKET_NAME="seu-bucket" && \
aws s3api list-object-versions --bucket "$BUCKET_NAME" --query "Versions[].{Key:Key,VersionId:VersionId}" --output json | \
jq -c '.[]' | \
while IFS= read -r obj; do
key=$(echo "$obj" | jq -r .Key)
version_id=$(echo "$obj" | jq -r .VersionId)
aws s3api delete-object --bucket "$BUCKET_NAME" --key "$key" --version-id "$version_id"
done
Em alguns casos, ficarão DeleteMarkers
, que são reconhecidos como versões. Para
deletá-los, rode o seguinte script:
- Deletando os
DeleteMarkers
:
BUCKET_NAME="seu-bucket" && \
aws s3api list-object-versions --bucket "$BUCKET_NAME" --query "DeleteMarkers[].{Key:Key,VersionId:VersionId}" --output json | \
jq -c '.[]' | \
while IFS= read -r marker; do
key=$(echo "$marker" | jq -r .Key)
version_id=$(echo "$marker" | jq -r .VersionId)
aws s3api delete-object --bucket "$BUCKET_NAME" --key "$key" --version-id "$version_id"
done
Após esses comandos, se desejar, você pode excluir o bucket. Substitua seu-bucket
pelo nome do bucket que deseja apagar versões ou DeleteMarkers
.
No RCLONE, não há comandos para deletar versões de objetos diretamente. Para automação, siga o passo a passo do AWS-CLI.
Deletando um bucket, seus objetos e versões automaticamente
- MGC-CLI
- AWS-CLI
- RCLONE
Na MGC-CLI, não há um comando para deletar objetos e versões automaticamente. Para isso, siga o passo a passo do RCLONE.
Na AWS-CLI, também não há um comando para deletar objetos e versões automaticamente Para isso, siga o passo a passo do RCLONE.
No RCLONE, você pode usar o comando purge
para deletar todos os objetos e suas
versões. Veja o exemplo abaixo:
rclone purge remote:path
Este comando deleta todo o bucket e seus objetos, incluindo suas versões.
Conclusão
Neste documento, abordamos diferentes métodos para gerenciar e deletar buckets versionados, utilizando várias ferramentas. Para cada ferramenta, fornecemos comandos e scripts que permitem:
MGC-CLI: A verificação e exclusão de versões individuais dos objetos, mas com limitações na automação direta.
AWS-CLI: Métodos completos para listar e deletar versões e markers de exclusão através de scripts, proporcionando um controle mais detalhado e a possibilidade de automação.
RCLONE: Oferece uma solução prática para deletar todos os objetos e suas versões com o comando purge, ideal para uma remoção completa e automática de buckets.
Cada ferramenta tem suas particularidades e capacidades, e a escolha da abordagem ideal dependerá das suas necessidades específicas e do ambiente de operação. Em situações onde uma solução direta não está disponível, a automação via scripts pode oferecer a flexibilidade necessária para gerenciar buckets versionados de forma eficaz.
Se tiver dúvidas ou precisar de mais assistência, nossa equipe de suporte está pronta para ajudar. Não hesite em abrir um chamado de suporte para resolver qualquer questão adicional.