Como fazer upload para o S3 da Amazon
Jonas Abreu em 18/04/2012Uma das coisas que precisei fazer para colocar o Performance Java foi aprender a fazer upload para o S3.
Primeiro, baixei este script muito bom que cuida da parte chata do processo. É bem simples de configurar o acesso à sua conta do AWS.
Depois, como o S3 não suporta pastas, você precisa gerar a chave sendo o path completo até o arquivo que você vai subir.
Para isso fiz um pequeno script que está no Github.
A parte desse script que faz efetivamente o deploy é a seguinte:
for X in `find . -type f | sed -E "s/\.\///"`; do
echo "Deploying $X";
typeFor $X
~/bin/aws/aws put "x-amz-acl: public-read" \
"Content-Type: $CONTENT_TYPE" \
www.javaperformance.com.br $X;
done;
Explicando rapidamente:
find . -type f
devolve todos os arquivos que estão abaixo do diretório atual no formato ./pasta/arquivo
sed -E "s/\.\///"
remove o ./
do começo do nome (senão os arquivos estariam acessiveis no path /./pasta/arquivo).
aws put HEADERS NOME_DO_BUCKET NOME_DO_ARQUIVO
envia o arquivo para ser armazenado no seu bucket com o nome que você passou e o conteúdo do arquivo.
Duas coisas importantes são os headers especificados.
O primeiro é para deixar o arquivo acessível ao público. O segundo serve para especificar qual o Content-Type que o S3 colocará no header de resposta quando alguém pedir o arquivo. Isso é importante, porque o Content-Type padrão é o de arquivo binário e o browser não renderizará o seu arquivo.
Como eu não conheço nenhuma ferramenta que me dê o content-type de acordo com a extensão do arquivo, eu criei uma função (typeFor) que preenche na variável $CONTENT_TYPE o valor correto (ela está no mesmo arquivo do Github).