O versionamento no S3 permite reter todas as alterações feitas nos objetos enviados a um bucket. Isso ajuda a proteger os dados contra exclusões ou sobrescritas acidentais e permite restaurar versões anteriores quando necessário.
O versionamento pode ser ativado usando diferentes clientes, como AWS CLI, S3 Browser e outros. Este artigo aborda o trabalho com versões usando AWS CLI.
O versionamento pode ser ativado pelo painel de controle ou usando clientes como AWS CLI, S3 Browser e outros.

Confirme a ativação do versionamento clicando em Ativar versionamento.
Uma vez ativado, o versionamento não pode ser totalmente desativado para o bucket; ele só pode ser suspenso.
Para ativar o versionamento em um bucket S3 via AWS CLI, execute:
aws s3api put-bucket-versioning --bucket <bucket_name> --versioning-configuration Status=Enabled --endpoint-url https://s3.hmstorage.net
Para verificar se o versionamento está ativo:
aws s3api get-bucket-versioning --bucket <bucket_name> --endpoint-url https://s3.hmstorage.net
Saída esperada:
{
"Status": "Enabled",
"MFADelete": "Disabled"
}
Exemplo de como o versionamento funciona:
Crie um arquivo de teste:
echo "Version 1" > testfile.txt
Envie para o bucket:
aws s3 cp testfile.txt s3://<bucket_name>/ --endpoint-url https://s3.hmstorage.net
Atualize o arquivo:
echo "Version 2" > testfile.txt
Envie novamente:
aws s3 cp testfile.txt s3://<bucket_name>/ --endpoint-url https://s3.hmstorage.net
Agora o arquivo possui múltiplas versões. Para verificá-las:
aws s3api list-object-versions --bucket <bucket_name> --prefix testfile.txt --endpoint-url https://s3.hmstorage.net
Exemplo de saída:
{
"Versions": [
{
"Key": "testfile.txt",
"VersionId": "S7hpDH6F0RYfubNoTjin6hpBu5ewDj.",
"IsLatest": true
},
{
"Key": "testfile.txt",
"VersionId": "pdFehsuCbaPz2hNh4b9DBndfEwzjTfH",
"IsLatest": false
}
]
}
Para visualizar a lista de versões de um objeto:
aws s3api list-object-versions --bucket <bucket_name> --prefix <object_name> --endpoint-url https://s3.hmstorage.net
aws s3api list-object-versions --bucket <bucket_name> --query 'Versions[*].[Key, VersionId, Size]' --endpoint-url https://s3.hmstorage.net
Para baixar uma versão específica de um objeto, use:
aws s3api get-object --bucket <bucket_name> \
--key testfile.txt \
--version-id pdFehsuCbaPz2hNh4b9DBndfEwzjTfH \
testlocalfile.txt \
--endpoint-url https://s3.hmstorage.net
Parâmetros:
--key: nome do objeto no bucket.--version-id: ID da versão do objeto (obtido com list-object-versions).testlocalfile.txt: nome do arquivo local onde a versão será salva.Se um objeto foi atualizado ou excluído, você pode restaurar uma versão anterior copiando-a sobre a atual:
aws s3api copy-object --bucket <bucket_name> \
--key testfile.txt \
--copy-source <bucket_name>/<object_name>?versionId=<version_id> \
--endpoint-url https://s3.hmstorage.net
Parâmetros:
<bucket_name>/<object_name>: caminho completo do objeto no bucket.?versionId=<version_id>: versão a ser restaurada.Este comando criará uma nova versão no bucket idêntica à restaurada.
Para excluir uma versão específica de um objeto:
aws s3api delete-object --bucket <bucket_name> --key <object_name> --version-id <version_id> --endpoint-url https://s3.hmstorage.net
--version-id é o ID da versão do objeto a ser excluída.
Para evitar o acúmulo de versões antigas, você pode criar uma política de ciclo de vida de objetos.
lifecycle.json:{
"Rules": [
{
"ID": "DeleteOldVersions",
"Status": "Enabled",
"Filter": {},
"NoncurrentVersionExpiration": {
"NoncurrentDays": 30
}
}
]
}
Essa regra exclui versões de objetos com mais de 30 dias, mantendo as versões atuais intactas.
aws s3api put-bucket-lifecycle-configuration --bucket <bucket_name> --lifecycle-configuration file://lifecycle.json --endpoint-url https://s3.hmstorage.net
aws s3api get-bucket-lifecycle-configuration --bucket <bucket_name> --endpoint-url https://s3.hmstorage.net