Descompatando zip automaticamente no AWS S3 com Python

Filipe Ceccon de Alencar
filipececcon

--

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.

--

--

Filipe Ceccon de Alencar
filipececcon

Metaleiro, pai de família, programador e entusiasta do empreendedorismo