Unzip com AWS Lambda

Carlos Massucato
How Kovi Work
Published in
3 min readJul 13, 2020

Um dos motivos principais para eu ter aceito o desafio de trabalhar na Kovi foi a constante utilização de tecnologias de ponta e as melhores práticas de desenvolvimento no time de engenharia.

E recentemente nossa equipe encontrou um desafio de produto no qual precisaríamos descompactar arquivos .zip diretamente de nosso bucket S3 da AWS.

Veja bem, existem inúmeras maneiras de se efetuar o unzip de arquivos. Aqui, em nosso escopo, essa solução foi a melhor encontrada. Pode ser criada de uma forma ou de outra, de acordo com a stack de cada empresa ou produto…

O Desafio

Quando um .zip chegar a uma determinada pasta em nosso bucket, precisamos de uma solução que efetue a descompactação automática do mesmo diretamente do nosso bucket S3.

A solução

Partindo do ponto do qual fazemos uso de AWS Lambda, ServerLess e NodeJS, a solução foi em criar uma função lambda para fazer o unzip diretamente com JavaScript.

Nota: Levando em consideração que você está em um ambiente já preparado com node e serverless, aqui vou mostrar partes essenciais do código.

Mãos a obra!

A Função

Primeiro, precisamos criar a função lambda pelo ServerLess:

  • functions.yml

O Handler (unzip-files.js)

Estamos utilizando aqui a library “Yet Another Unzip Library”, mais conhecida como yauzl.

  • Imports
  • Declarações
  • Handler

O Bucket S3

Assim que efetuar o deploy da função, precisamos configurar o bucket S3 para a mesma ser executada. Vamos criar o evento (trigger).

  1. Abra teu Amazon AWS Console;
  2. Vá até S3 Services;
  3. Ache e entre no seu bucket;
  4. Clique em > Properties > Events;
  5. Crie um novo EVENT:
  • Name: unzip-files-trigger
  • Events: All Object Created Events
  • Prefix: O caminho para a sua pasta de uploads
  • Suffix: *.zip
  • Send to: Lambda Function
  • Lambda: Add Lambda Function ARN
  • Function ARN: seu-ARN-da-função

E é isso ae!!

Com a função lambda publicada e os eventos criados no bucket, tudo o que você precisa é upar algum arquivo .zip e ver a mágica acontecer. Se lembre de depurar a aplicação através do CloudWatch.

E como eu disse anteriormente: Existem várias maneiras de se fazer o unzip. Com nossa stack, essa foi a melhor e mais performática solução que encontramos, até o momento.

Abraço!

Github Source

https://github.com/camassucato/unzip-from-s3

Time Backend para essa solução

Carlos Massucato & Lucas Badico

Referências

AWS Notification HowTo
YetAnotherUnzipLibrary

--

--