Unzip com AWS Lambda
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).
- Abra teu Amazon AWS Console;
- Vá até S3 Services;
- Ache e entre no seu bucket;
- Clique em > Properties > Events;
- 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