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:

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:

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:

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

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:

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

Créditos

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store