Upload e Download de arquivos no serviço S3 da Amazon via linha de comando no Linux

Opa, tem um tempão que eu não escrevo por aqui. E, o motivo principal é que tirei férias durante um tempinho e resolvi dar um pequeno descanso para a mente. Meu foco, apesar de sempre ser aprender mais, este ano foi descansar.

Mas, nerd que é nerd não pára né ? E, por este motivo, eu ainda faço algumas brincadeiras por aqui. Como estou começando o uso do NetliFy para a maioria dos meus projetos on line, eu comecei também a brincar com o S3 da Amazon . E o projeto que eu comecei a migrar do Wordpress para o S3 + NetliFy é o Louco por Android.

E como é de conhecimento geral minha paciência com interface gráfica tende a zero e … sempre gosto de poder trabalhar na linha de comando. Procurando uma solução para subir mais de 100.000 arquivos para o S3 eu achei esta maravilha chamado aws-cli que é no fim, uma interface para interagir com a Amazon … via maravilhosa linha de comando.

Então, vamos brincar um pouquinho ?

Instale o pip do Python

A instalação do pip é bem simples. Ou seja.

$ sudo apt-get update
$ sudo apt-get install python-pip

Ou caso esteja em um sistema baseado em Red Hat como eu estou.

$ sudo dnf install python3-pip
$ sudo yum install python3-pip

Instale o AWS CLI

Após a instalação do pip a coisa fica bem fácil. É só usar o comando abaixo e ser feliz. Mas, pode ser que demore um pouquinho, então tenha paciência.

A documentação está aqui, caso seja tão curioso como eu sempre sou: http://docs.aws.amazon.com/cli/latest/userguide/installing.html .

$ pip install --upgrade --user awscli

Para facilitar, vamos adicionar o comando aws na variável PATH

E após instalar é só adicionar o comando na variável PATH ou então, criar um alias para ele no shell. Fica a seu critério.

$ export PATH=~/.local/bin:$PATH
$ source ~/.profile
$ which aws
/home/ataliba/.local/bin/aws

Aí é só testar se o comando realmente funcionou :

$ aws --version
aws-cli/1.16.196 Python/3.5.2 Linux/4.4.0-154-generic botocore/1.12.186

E agora que temos certeza que o aws-cli está funcionando é rodar o comando para configurar. Lembrando que eu não estou cobrindo aqui a criação do usuário no IAM, mas caso seja útil, posta nos comentários que eu tento postar algo aqui sobre isto.

E ele é bem fácil :

$ aws configure
AWS Access Key ID [None]: sua chave de acesso
AWS Secret Access Key [None]: sua chave secreta
Default region name [None]: região que você vai usar
Default output format [None]: json

Feito isto você já está com o seu aws-cli configurado. E aí é simplesmente pegar o diretório e ser feliz.

O comando para fazer a cópia é bem parecido com qualquer comando que se usa no Linux ou qualquer Unix-Like para cópia de arquivos.

A sintaxe básica é :

aws s3 cp –recursive ./diretorio/ s3://nomedobucket/

Este em específico copia todos os arquivos de um diretório da sua máquina chamado diretorio para um bucket no S3 de nome nomedobucket. Assim, no seu caso você só precisa modificar o diretorio e nomedobucket.

E finalmente, temos o famoso sync. Pelo que eu entendi é como se ele fosse um rsync. Ou seja, é bem mão na roda para realmente manter todas as cacterísticas dos arquivos.

aws s3 cp sync ./diretorio s3://nomedobucket

E caso queira uma saída mais limpa é só rodar o comando deste modo :

aws s3 sync diretorio s3://nomedobucket –delete –only-show-errors

Por sinal, é este comando acima que eu uso no ci/cd de publicação deste blog aqui.