Executando verificação de segurança...
8

Tutorial: Como sincronizar (espelhar) arquivos com um Bucket S3 usando o CLI "aws" para fazer Backup

Turma, gostaria de deixar registrado aqui no TabNews algo que estou usando bastante recentemente para fazer backup dos arquivos originais de vídeo de um curso que estou criando.

São arquivos pesados e estava procurando uma solução onde eu pudesse:

  1. Fazer o backup rodando apenas 1 único comando no terminal para ser fácil de automatizar.
  2. Sincronizar apenas a diferença entre o que ainda não foi feito upload. Ou seja, fazer o mirror, ou espelhamento, mas apenas do que falta sincronizar entre o diretório de origem e o diretório de destino.
  3. Fosse o mais barato possível e usasse automaticamente o Storage Class mais barato da AWS.

O que me fez chegar no comando abaixo, e que vou explicar em detalhes em seguida:

aws s3 sync pasta-local/. s3://bucket-remoto --storage-class DEEP_ARCHIVE --exclude "*.DS_Store" --exclude "*/Resolve Projects/*"

Então explicando o comando em partes:

ComandoExplicação
awsEste é o CLI oficial da AWS.
s3  É uma das opções desse CLI e que trata do serviço S3 (Simple Storage Service) da AWS.
syncÉ uma das opções do s3 e que faz justamente esse espelhamento (sincronização) entre um lugar e outro. No meu caso, é o espelhamento entre uma pasta local e uma pasta remota. A opção desta forma sincroniza apenas o que falta (o "diff") entre a pasta de origem e a pasta de destino.
pasta-local/.Define a pasta de origem.
s3://bucket-remotoDefine o bucket de destino.
--storage-class DEEP_ARCHIVEIsso define de largada qual o Storage Class a ser usado e, por hora, o DEEP_ARCHIVE é o mais barato de todos.
--exclude "*.DS_Store"O --exclude irá excluir da sincronização todos os arquivos que derem match com o padrão que você colocar ao lado. No meu exemplo, não será sincronizado arquivos que terminarem com .DS_Store.
--exclude "*/Resolve Projects/*"Você pode encadear vários --exclude e neste caso também irá excluir da sincronização todas as pastas com o nome Resolve Projects.

Resultado final

O comando irá identificar quais arquivos faltam na pasta de destino e começar a fazer o upload instantâneamente.

Informações adicionais

  • Caso você esteja inseguro ao executar o comando por não saber o que vai acontecer, adicione a flag --dryrun. O CLI irá simular a sincronização (os arquivos a serem sincronizados), mas não irá executar nada de verdade.
  • Se você inverter a ordem da pasta de origem e destino, por exemplo ao colocar s3://bucket-remoto pasta-local/. você irá executar a mesma sincronização, mas fazendo download dos arquivos que estão no destino para dentro da pasta local.
  • Você pode encontrar a documentação do aws s3 neste link
1

Fiz uma simulação na calculadora e não pareceu caro, considerando que utilizaria um Bulk Restore ao invés de Standard Restore (a diferença de preço é bem grande entre os dois). Dá pra ver a diferença entre as recuperações em Archive retrieval options.

O S3 é bastante usado para backups? Hoje em dia eu só faço backups em HDs locais, mas tenho interesse em também armazenar na nuvem futuramente.

1

Muito interessante. Tenho vontade de fazer isso com algumas fotos que tenho ocupando espaço em um notebook antigo. Como ficou a relação de custo USDxGb?

1

Excelente artigo, importante frisar que o ideal é enviar os artigos compactados, mas nesse ponto fica um dúvida em relação ao processo de espelhamentos. Será que há uma lógica para comparar os arquivos compactados, tipo arquivos .gz ou .tar. O S# da AWS compara estes artigos acrescendo apenas aqueles modificados ou nesse caso haverá um novo envio de arquivo?

1

Excelente informação, Filipe, como sempre. Muito simples e objetivo.

Como adição ao conteúdo, recomendo a quem tiver interesse que deem uma olhada no R2 da Cloudflare. Ele utiliza todo o padrão s3 e tem custos bem interessantes.

https://developers.cloudflare.com/r2/platform/pricing/

Além disso, não há cobrança por fluxo de egress (saída).

Uso pra alguns projetos de backup e tem me servido muito bem.

1