sexta-feira, 16 de agosto de 2013

     Um dos benefícios essenciais da computação em nuvem é a oportunidade de substituir diretamente gastos com a infraestrutura principal por preços variáveis baixos, que se ajustam de acordo com o que você usa (Amazon). Os custos são muito mais reduzidos e, no caso de uma empresa, são alocados em budget como sendo OPEX e não CAPEX.

     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

     Em seguida, temos:

# 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
print 'Bucket criado com sucesso'
except:
print
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
print 'Arquivo transferido com sucesso'
except:
print
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 
print 'Download concluido'
print
print

except:
print
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