DEV Community

Danilo Machado
Danilo Machado

Posted on

Implementando grandes dependências no AWS Lambda através do AWS Layer

Hoje irei falar um pouco desse serviço da AWS pouco utilizado, pois eu precisava implementar em um lambda algumas libs que somavam mais de 500 MB juntas, e obviamente não conseguia fazer o deploy, devido a limitação de 250 MB da AWS e tive que pesquisar bastante para solucionar o impasse.

Então descobri esse serviço, que você pode provisionar as dependências em layers (camadas) e especificar em qual lambda quer usar, podendo ser utilizado por vários lambdas simultaneamente. O uso de camadas reduz o tamanho dos arquivos de implantação carregados e agiliza a implantação do seu código.

Image description

Imagine que você precise desenvolver um lambda para declarar imposto de rendas e nesse lambda, precisa conter três dependência do node: express, sequelize e mysql.

No meu exemplo utilizo node, mas o AWS Layer funciona em todas as linguagens em que a AWS dão suporte, continuando nosso exemplo, vamos supor que o express tem 100 MB, sequelize 100 MB e mysql 100 MB deszipados após o build da node_modules, logo o lambda não irá fazer deploy, pela limitação de 250 MB.

Image description

Para resolver esse problema, utiliza-se o AWS Layer, a solução seria criar um layer pro express, um layer pro sequelize e um layer pro mysql separadamente, como se fosse uma dependência do npm. Nas configurações do lambda, você declara o layer como dependência, como disse anteriormente, podendo ser utilizado por diversos lambdas, lembrando que cada layer também tem a limitação de 250 MB e pode ser versionado.

Image description

Esses casos de pacotes grandes são bem raros, mas quando precisei, essa foi a solução. A AWS não cobra pelos layers, somente é cobrado o valor dos lambdas por execução. Você pode criar layers usando o console do Lambda, a API do Lambda, o AWS CloudFormation ou o AWS Serverless Application Model (AWS SAM). Para obter mais informações sobre como criar os layers consulte a documentação da AWS.

Referências
Layer - AWS Docs

Top comments (0)