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:
- Fazer o backup rodando apenas 1 único comando no terminal para ser fácil de automatizar.
- 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.
- 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:
Comando | Explicação |
---|---|
aws | Este é 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-remoto | Define o bucket de destino. |
--storage-class DEEP_ARCHIVE | Isso 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