No post de hoje vamos mostrar como fazer a configuração para o upload e download de arquivos para a nuvem, utilizando o serviço de storage S3 da Amazon junto com o Python. Sobre o Python, comentamos no post Python e MongoDB: porque usar e primeiros passos as vantagens de utilizar esta linguagem.
Já a Amazon Web Services oferece um conjunto completo de serviços de aplicativos e infraestrutura que permitem que você execute praticamente tudo na nuvem: desde aplicativos empresariais e projetos de dados grandes a jogos sociais e aplicativos móveis. Para nosso exemplo deste post, utilizamos o Amazon S3 O Amazon S3 (Amazon Simple Storage Service) fornece uma interface simples de serviços da web que pode ser usada para armazenar e recuperar qualquer quantidade de dados, a qualquer momento, de qualquer lugar na web (Amazon).
Antes de iniciar nosso código, é necessário a criação de uma conta na AWS. Você encontra o passo a passo em http://aws.amazon.com/pt/free/. O legal é que temos 5GB livres de custo (para aprender a usar é suficiente!).
Seguindo para nosso código, temos a importação das bibliotecas necessárias. Se não tiver instalado em sua máquina a bibliteca boto, use o comando easy_install boto no prompt de comando para executar a instalação. Vamos para nosso código:
#Imports
import boto.s3
from boto.s3.connection import S3Connection #para estabelecer a conexão
import sys
# Criando uma conexão com o serviço S3
try:
conn = S3Connection('<aws access key>','<aws secret key>')
print 'Conexao AWS estabelecida'
except:
print 'Erro na conexão AWS'
Em conn inserirmos as chaves de acesso e secreta fornecidas pela Amazon após a abertura da conta. A manipulação de exceções é usada para checar se a conexão foi realizada com sucesso. Após conectarmos, vamos criar um bucket para armazenar nossos arquivos:
# Criando um bucket
try:
nome_do_bucket = 'nome'
bucket = conn.create_bucket(nome_do_bucket)
print 'Bucket criado com sucesso'
except:
print 'Erro ao criar o bucket'
Mais uma vez, o processo é muito simples, bastando utilizar o método create_bucket passando como parâmetro o nome desejado.
Como o tamanho dos arquivos pode variar, vamos inserir uma função para ilustrar o progresso de upload ou download.
# Funcao para esperar o upload e o download
def percent_cb(complete, total):
sys.stdout.write('.')
sys.stdout.flush()
O método stdout.write escreve a string '.', ilustrando o andamento da operação, enquanto o stdout.flush() escreve-a na mesma linha.
Agora, chegamos na etapa de upload. Temos aqui um exemplo de upload de um arquivo chamado certificado.pdf, no diretório 'C:\mongo_files\'. Nos comentários temos a explicação de cada linha do código. Observe que passamos como parâmetro a função de espera do upload ou download no método set_contents_from_filename.
# Criando a chave para armazenamento e armazenando os dados no S3
try:
key = bucket.new_key('certificado') #cria um objeto para o arquivo, mas ainda não há nada armazendo
key.set_contents_from_filename('C:\mongo_files\certificado.pdf',cb = percent_cb, num_cb = 10)
#abre um handle para o arquivo local, realizando a escrita no objeto chave criado na linha anterior
key.set_acl('public-read') #determina o tipo de controle de acesso
print 'Arquivo transferido com sucesso'
except:
print 'Falha na transferencia do arquvio'
Finalizamos o código realizando um download do arquivo que foi armazeno no S3, para o diretório 'C:\mongo_files\download\'. Observe que passamos como parâmetro a função de espera do upload ou download no método get_contents_to_filename.
# Fazendo o download dos dados
try:
key = conn.get_bucket('lwar.invest').get_key('certificado')
key.get_contents_to_filename('C:\mongo_files\download\certificado.pdf',cb = percent_cb, num_cb = 10)
print 'Download concluido'
except:
print 'Falha no download'
Com este código, somos capazes agora de enviar arquivos e realizar downloads direto do serviço de cloud storage S3 da Amazon Web Services. Com toda certeza, este código pode ser otimizado, transformando cada uma das etapas em uma função. Mas, nosso objetivo aqui era mostrar os elementos principais para estabelecer uma conexão e transferir dados para a nuvem utilizando Python.
Abraço e até o próximo post!
0 comentários:
Postar um comentário