Gerenciamento de Dependências com Bibliotecas Python em Camadas AWS Lambda

Aws Lambda? Serverless

Antes de tudo, vamos entrar em uma breve explicação sobre o que é serverless e o que é AWS Lambda.
Serverless é uma arquitetura de execução sem servidor. Basicamente, a AWS criou esse modelo para que projetos e aplicações sejam desenvolvidos sem a necessidade de se preocupar com infraestrutura. Serverless é simples de usar, reduz os custos de uso e oferece escalabilidade automática.

AWS Lambda é um serviço de computação serverless fornecido pela AWS. Ele permite que você execute seu código em resposta a eventos sem a necessidade de provisionar ou gerenciar servidores. Com o AWS Lambda, você pode criar funções, automações, APIs, aplicações web e móveis, chatbots, integrações e muito mais. As funções Lambda são altamente escaláveis e cobram apenas pelo tempo de execução e pela quantidade de solicitações, tornando-as uma solução econômica e eficiente. A AWS oferece uso que inclui 1 milhão de solicitações gratuitas por mês)

Problema nas Libs

Ao criar uma script em Python que possua libs e implantá-la no AWS Lambda, é importante lembrar que as bibliotecas que você utilizou durante o desenvolvimento não são automaticamente incluídas quando você faz o deploy da função. Isso significa que, sem essas bibliotecas, sua função Lambda pode apresentar erros durante a execução:

Exemplo de erro de execução de função sem camadas

Uma forma simples de resolver essa questão é utilizando uma camada (também chamada de layer) do AWS Lambda. Essa camada permite que você adicione as bibliotecas necessárias separadamente do seu código principal. Assim, você pode criar um arquivo ZIP contendo as bibliotecas e enviá-lo ao Lambda, associando-o ao seu script. Isso facilita o gerenciamento das dependências e garante que elas estejam disponíveis sempre que sua função for executada.

Mão no código…

Vamos empacotar as libs e enviar para a aws, de começo, crie um projeto serverless no terminal:

sls create --template aws-python3 --name my-layers --path my-layers
cd my-layers

Vamos importar uma lib, assim fica a estrutura de pastas do projeto:

Antes de prosseguir, lembre-se de executar o seguinte comando para salvar suas bibliotecas no arquivo – pontos importantes a considerar:

  • Se você estiver utilizando variáveis de ambiente, ative-as antes de prosseguir.
  • Caso contrário, todas as bibliotecas instaladas no seu computador serão incluídas. Se não desejar empacotar todas elas, basta remover as que não precisa do arquivo e, em seguida, salvar.
pip freeze > aws_requirements.txt

O arquivo serverless.yml vai conter:

service: layers-test #nome do serviço
provider:
  name: aws
  runtime: python3.11
layers:
  python-libs: #nome da camada
    path: layers/tools # arqivo das camadas
    compatibleRuntimes:
      - python3.11
    description: "teste-libs"

e assim ficara a estrutura de arquivos do seu projeto:

my-layers
├── layers
│   └── tools
│       └── aws_requirements.txt
└── serverless.yml

Antes de implantar devemos executar o seguinte comando dentro da pasta “layers/tools”:

cd layers/tools
pip install -t python/lib/python3.10/site-packages -r aws_requirements.txt

O comando acima irá baixar as dependências que estão no “aws_requirements.txt” criado anteriormente, dentro do seguinte caminho “python/lib/python3.10/site-packages”, que é o caminho padrão para camadas relacionadas ao python.
Hora do deploy:

sls deploy
#ou
serverless deploy

No terminal voce vai conseguir verificar o sucesso do deploy, agora no painel da aws va em lambda > Rercursos adicionais > Camadas e la vai ter a camada adicionada.

Agora vamos ate o painel lambda da aws para finalizar o processo de implementação das camadas.

Verifique na imagem que voce possui “versões” a cada deploy, atualizando libs, ele adiciona uma nova versão da camada, o que no painel de escolhe de camadas, pode ser escolhida a versão desejada. Verifique no final do ARN “:1” é a versão.

Voce vai precisar copiar o ARN:

Acessar a sua função: (no seu caso estará Layers (0))

Clicar em Layers, ele te jogara pra baixo, clique em “Adicionar uma camada”

Cole seu ARN copiado e verifique se esta correto com o que acabou de criar:

Ele te mostrara sua camadas com as libs do projeto, basta adicionar, e executar um teste para finalizar.

Conclusões

O uso de camadas é um passo crucial em Python para garantir o funcionamento adequado da sua aplicação, simplificando as atualizações e permitindo o compartilhamento de camadas entre várias funções. Além de adicionar bibliotecas padrão, como requests, BeautifulSoup e outras, as camadas também permitem incluir arquivos .py comuns, possibilitando a importação dessas bibliotecas diretamente no código das funções Lambda. Com isso, você torna o desenvolvimento mais eficiente e a manutenção mais fácil, aproveitando ao máximo o poder e a flexibilidade das funções Lambda na AWS.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima