DEV Community

Eduardo Rabelo
Eduardo Rabelo

Posted on

2

Serverless Framework: 3 dicas rápidas

Algumas dicas rápidas ao desenvolver aplicações com Serverless Framework:

#1 - Faça o bundle do aws-sdk

O aws-sdk está presente no ambiente de execução do AWS Lambda, mas você não deve confiar na versão presente por lá. Ao invés disso, você deve fazer o bundle do aws-sdk que você estiver utilizando:

  • O ambiente de execução do AWS Lambda não está sempre na última versão, provavelmente faltando patches, atualizações de segurança etc
  • Isso introduz diferenças nos seus testes
  • A AWS pode atualizá-lo sem aviso prévio, até agora não ouvi falar de alguém que tenha problemas no Node.js. Mas, há algum tempo, muitas das funções Python começaram a falhar sem nenhuma ação do usuário porque a AWS atualizou a versão do boto3 no ambiente, e essa versão tinha um bug
  • Não faz diferença para a performance do "cold start", seja importando do ambiente ou do meu bundle, o simples fato de importá-lo já expõe a execução a mais latência
  • o aws-sdk não é tão grande e faz uma diferença superficial ao tempo de deploy

Também é uma recomendação da AWS: Sempre faça o bundle da sua versão do aws-sdk.

#2 - Não importe todo o aws-sdk se você não precisa

A documentação da AWS usa o seguinte exemplo:

// Load the AWS SDK for Node.js
const AWS = require('aws-sdk');

// Create DynamoDB document client
const docClient = new AWS.DynamoDB.DocumentClient();

Isso resulta na importação de todo o SDK, ao invés de apenas o serviço que você precisa, que pode ser feito da seguinte maneira:

const DynamoDB = require('aws-sdk/clients/dynamodb')
const documentClient = new DynamoDB.DocumentClient()

O exemplo acima economiza 141ms no tempo de inicialização, ou uma enorme redução de 33%.

Você pode ver um análise completa nesse outro artigo.

#3 - Use o webpack para bundle

O webpack é descrito como um empacotador de módulo estático para JavaScript. Quando o webpack processa seu aplicativo, ele cria internamente um gráfico de dependência que mapeia todos os módulos de que seu projeto precisa e gera um ou mais pacotes configuráveis. Em teoria, isso significa que você pode reduzir significativamente o tamanho da função, pois ela apenas extrai o código relevante necessário. Podemos usar o serverless-webpack como plugin para o Serverless Framework.

Para começar, instale o seguinte:

$ npm install webpack --save-dev
$ npm install webpack-node-externals --save-dev
$ npm install serverless-webpack --save-dev

A próxima etapa é incluir o plugin e a configuração do plugin no serverless.yml arquivo:

plugins:
  - serverless-webpack
...
custom:
  webpack:
    webpackConfig: 'webpack.config.js'   # Name of webpack configuration file
    includeModules: false   # Node modules configuration for packaging
    packager: 'npm'   # Packager that will be used to package your external modules

Por padrão, o plugin procura por um webpack.config.js no diretório do seu projeto. Eu usei a seguinte configuração básica:

module.exports = {
  entry: {
    'functions/index': './functions/index.js',
    'functions/data/getNextQuestion': './functions/data/get-question.js',
    'functions/constants/constants': './functions/constants/constants.js',
  },
  mode: 'production',
  target: 'node'
}

Isso resulta na redução do tamanho do pacote de 8MB para menos de 1MB.


Créditos

AWS GenAI LIVE image

How is generative AI increasing efficiency?

Join AWS GenAI LIVE! to find out how gen AI is reshaping productivity, streamlining processes, and driving innovation.

Learn more

Top comments (0)

The best way to debug slow web pages cover image

The best way to debug slow web pages

Tools like Page Speed Insights and Google Lighthouse are great for providing advice for front end performance issues. But what these tools can’t do, is evaluate performance across your entire stack of distributed services and applications.

Watch video

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay