Descompatando zip automaticamente no AWS S3 com Python
Olá Coders! Tive um desafio recente que gostaria de compartilhar com vocês.
Não conhecia praticamente nada sobre AWS e há pouco no projeto em que estou sustentando, recebi uma nova demanda onde tive de aprender sobre o mesmo.
Existem muitos serviços disponíveis na suíte de aplicações do AWS, porém os chamo a atenção para os que vamos utilizar nesse tutorial que são: Lambda, IAM e S3. Vamos falar sobre cada um separadamente.
Simple Storage Service (S3)
O S3 tem como funcionalidade armazenar arquivos em nuvem os separando em buckets (baldes). Esses baldes podem ser controlados e gerenciados bem como acesso, tamanho e etc.
Mas por que não usar FTP? Segurança! O S3 é muito mais seguro que um FTP. Segue abaixo alguns pontos importantes:
- Para acessá-lo é preciso das credenciais da Amazon pública e privada.
- Por padrão todos os dados trafegam na porta 443 (https) e são criptografados (SSL).
- O S3 tem um sistema de versionamento de arquivo caso alguma exclusão/alteração ocorra acidentalmente.
- O FTP é um protocolo, o S3 não.
Para saber mais clique aqui
Lambda
É um serviço sem servidor que executa blocos de código disparados por eventos configurados em triggers. Esses blocos de código podem ser escritos em C#, Java, Python e Node. Não é um serviço barato, mas nesse post nos traz uma grande facilidade.
Para saber mais clique aqui
Identity and Access Management (IAM)
O IAM tem a responsabilidade de controlar gerenciar toda a parte de acessos, grupos, usuários e permissões dos serviços contratados do AWS.
Para saber mais clique aqui
Escopo
Iremos elaborar um script em Python no Lambda que extraia automaticamente arquivos .zip para dentro do bucket.
1. Crie uma policy
Ao acessar seu painel do AWS procure pelo IAM na barra de busca e é nele que vamos começar criando uma policy para que nosso código rode com as permissões da mesma.
Acesse IAM > Policies > Create Policy > Create Your Own Policy.
Na próxima tela o campo nome e descrição, preencher como quiser. Vamos nos atentar no campo policy document, preencha, valide e salve conforme abaixo:
2. Criar uma Role
Ainda no IAM vamos criar uma role e anexar nossa policy a ela.
Acesse IAM > Roles > Create Role e informe o nome que preferir.
Na próxima tela escolha a opção AWS Lambda em AWS Services Roles
Filtre apelo nome e selecione para anexar a policy na role que criamos:
Siga e salve a role.
#3. Criar um bucket
Na home page busque pelo serviço do S3 e vá no botão Create Bucket
Informe o nome do bucket e escolha a região US East (N. Virginia)
Na tela 2 (Set Properties) nós pulamos e vamos direto para a tela 3.
Nessa tela para não haver dúvidas marque todas as opções Read e Write, vá para próxima e salve o bucket.
#4. Criar a função no Lambda
Agora buscamos o lambda da barra de pesquisa na home page e acessamos Lambda > Functions > Create Function
Selecione Blank Function como o template que iremos usar para a nossa function e vamos para a próxima tela.
Vamos configurar uma trigger para a nossa function, assim quando o evento ocorrer o nosso código é executado.
- Escolha o serviço S3 como o que irá disparar nossa trigger.
- No campo bucket, selecione o que acabamos de criar.
- No campo Event Type selecione Object Created (All)
- O campo Prefix pode deixar em branco ( se quiser preencher, saiba que é o prefixo do nome do arquivo ).
- No campo Suffix preencher com “zip” (sem aspas).
- Marque a opção Enable trigger e vamos para a próxima tela.
- Informe o nome da function
- A descrição é opcional
- No campo Runtime escolha Python 2.7
- No campo Code entry type selecione Edit code inline
No bloco de código segue o script Python abaixo:
Deslize a tela e nas opções abaixo preencha:
- No campo Handler preencha com lambda_function.lambda_handler (se isso não estiver escrito corretamente sua function não será chamada)
- No campo Role selecione Choose an existing role
- No campo Existing role selecione a role que criamos anteriormente.
- Em Advanced settings deixe o tempo de timeout para 1 minuto.
Dependendo do tamanho dos arquivos que pretende esperar quanto maior o arquivo é recomendado mais tempo. Porém esses serviços da Amazon são bem parrudos, deixaremos como 1 minuto.
Vá para a próxima tela e salve a function.
Pronto!!...Baixe o Bucket Explorer ou o S3 Browser acesse seu bucket com suas credenciais e faça o upload de um arquivo zip.