Utilização de Lambda functions para otimização de grandes aplicações.

Introdução: Vantagens: Caso de uso: Nesse exemplo iremos mostrar como construir a aplicação com uma unica função, gerar PDF de produtos, faremos deploy na AWS e usaremos na pratica essa ferramenta. 1 – É necessária criar uma conta na AWS, precisa preencher o cadastro, e a AWS vai te pedir…

Introdução:

  • Já pensou em ter a facilidade de produzir pequenas aplicações com funções especificas, com a facilidade de deploy, que cobra somente por chamada da aplicação e não pelo tempo de hospedagem daquele servidor? Essa solução foi lançada primeiramente pela AWS mas com a popularização, suas concorrentes estão lançandos alternativas equivalentes. Neste artigo iremos abordar sobre o Lambda especificadamente da AWS.
  • Essa ferramenta nada mais é uma plataforma de computação sem servidor que oferece escalabilidade automática, baixo custo, e suporte para uma variedade de linguagens de programação. É uma ferramenta poderosa para construir aplicativos escaláveis, altamente disponíveis, onde você pode criar pequenos projetos responsaveis indepentes por somente uma unica função na sua aplicação como todo.

Vantagens:

  • Escalabilidade automática: Com AWS Lambda, você não precisa se preocupar com a capacidade de servidores, dimensionamento automático, ou balanceamento de carga. A AWS gerencia automaticamente a execução de suas funções em resposta ao tráfego de entrada.
  • Modelo de pagamento por uso: Ao contrário de hospedar seu próprio servidor onde você paga por tempo de atividade, com o AWS Lambda você paga apenas pelo tempo de computação que suas funções consomem. Isso pode resultar em economia significativa, especialmente para cargas de trabalho intermitentes ou com picos de tráfego.
  • Tempo de execução flexível: O AWS Lambda suporta uma variedade de linguagens de programação, incluindo Python, JavaScript, Java, C#, Go e outros. Isso oferece flexibilidade para desenvolvedores escolherem a linguagem mais adequada para suas necessidades.
  • Desenvolvimento sem servidor (serverless): Com o AWS Lambda, você se concentra apenas no código da aplicação, sem se preocupar com a infraestrutura. Isso reduz a sobrecarga operacional e permite que os desenvolvedores se concentrem mais na lógica de negócios e na entrega de valor para os clientes.
  • Rápida inicialização: As funções Lambda são inicializadas rapidamente, o que permite uma resposta rápida a eventos e uma alta taxa de transferência. Isso é especialmente útil para cargas de trabalho com demandas imprevisíveis ou picos de tráfego repentinos.
  • Documentação Unica: Como é feito um repositório separado podemos ter um Read-Me focado diretamente na função e no contexto daquela aplicação.
  • Sem dependencia de bibilhotecas externas: Com uma aplicação separada para uma unica função só precisamos exportar somente bibilhotecas necessárias para uso, muitas vezes nem precisamos da utlização de frameworks por exemplo.

Caso de uso:

Nesse exemplo iremos mostrar como construir a aplicação com uma unica função, gerar PDF de produtos, faremos deploy na AWS e usaremos na pratica essa ferramenta.

1 – É necessária criar uma conta na AWS, precisa preencher o cadastro, e a AWS vai te pedir para colocar um cartão de credito, não tenha receio por isso, a AWS no plano gratuito te oferece 1 milhão de solicitações por mês isso é mais que o suficiente para utlizamos no nosso artigo e que você pode utilizar para seus projetos pessoais. Além disso como desenvolvedor é importante você ter sua conta na AWS para utilizar outros serviços nos seus projetos como S3, EC2, API gateway e outros. Para registro da sua conta segue o link: https://portal.aws.amazon.com/billing/signup?refid=em_127222&redirect_url=https%3A%2F%2Faws.amazon.com%2Fregistration-confirmation&language=pt_br#/account

2 – Depois de fazer a conta precisamos criar um Access Key para acesso aos serviços da AWS. Para isso é bem simples, temos que ir no Dashboard do usuário Master ( IAM ), pode colocar IAM na busca que é a primeira resposta:

Logo depois clicar em My security credentials, no meio terá o bloco de access key só clicar em Create access key, pode ignorar o aviso de segurança, não precisamos nos preocupar com ele por agora.

Com a chave criada você tera o Access key ID e o Secret Access Key, não esqueça de copiar e anotar eles, tem a opção de baixar o csv:

3 – Bom, feito a chave da AWS, agora podemos utilizar o AWS CLI, para isso é necessário instalar essa aplicação é bem simples, segue um link da propria documentação da AWS com o passo a passo para Ubuntu / Mac / Windows: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

4 – Agora precisamos criar o lambda na AWS, é bem simples digite novamente na busca Lambda, clique no primeiro link, e clique no botão: Create function, não se atente as configurações avançadas, não vamos precisar utiliza-las, você só precisa escolher a tecnologia a ser utilizada na aplicação, ficou assim o meu:

Criando o lambda, ele aparecerá na lista na pagina principal dos lambdas, isso será o suficiente para subirmos a aplicação.

5 – Agora podemos configurar o AWS, para isso utilize o comando aws_configure, coloque o Access key ID, Secret Access Key, e a região, que por padrão vamos utilizar o us-east-1.

6 – Com o CLI configurado, agora precisamos baixar o repositório com o codigo, eu deixei pronto o repositorio, você pode baixa-lo nesse link abaixo, não se atente ao codigo implementado, ele gera PDF simples e não é a implementação que iremos abordar nesse artigo, utilizei o ruby nesse projeto mas poderia ser em qualquer outra linguagem.

Link: https://github.com/DavidSchnee/gerador_pdfs.git

7 – Já na pasta do repositorio precisamos subir ele para a AWS, isso é bem simples, primeiro precisamos instalar os pacotes:

bundle install
bundle config set --local deployment 'true'
bundle install --without development test

Depois gerar um arquivo zip a ser enviado:

zip -r ../gerador_pdfs.zip lambda_function.rb lib vendor config

E assim utilizar o comando update-function para atualizar o lambda:

aws lambda update-function-code \
--function-name gerador_pdfs \
--zip-file fileb://../gerador_pdfs.zip

Feito isso sua aplicação já está na AWS e podemos utiliza-la a a vontade.

8 – Por ultimo vamos utilizar a aplicação, nesse exemplo utilizaremos o mesmo AWS CLI com o comando invoke, no proprio repositorio tem um payload com os produtos de exemplo:

aws lambda invoke \                                                                                       
--function-name gerador_pdfs \
--payload fileb://./payload.json \
./gerador_pdf.txt

O retorno será imprimido no arquivo gerador_pdf.txt no projeto e nele vamos ver o base64 do PDF gerado, para baixar esse PDF podemos usar essa ferramenta: https://base64.guru/converter/decode/file

Com isso você tem uma aplicação com uma função especifica em produção que pode ser chamada sempre quando precisar.

Extras:

1- Comandos mais utilizados com AWS CLI para Lambda:

create-function -> Cria um novo lambda.
update-function-code -> Atualiza um lambda já criado.
invoke -> Faz a chamada de utilização do lambda.
list-functions -> Lista todos os lambdas criados.
delete-function -> Exclui um lambda criado.

2 – Pode ser feito mais de um profile, para ter mais chaves da AWS de contas diferentes para serem utilizadas, para isso só precisa na hora do configure setar o profile, assim:

aws configure --profile nome_do_profile

3 -Para mais informações segue o abaixo o link para documentação do AWS CLI, recomendo dar uma lida, pois é uma ferramenta muito versatil que agrega muito valor ao dia a dia.
link: https://docs.aws.amazon.com/pt_br/cli/latest/userguide/cli-chap-using.html

4 – O lambda também tem a opção de ter ENVs somente para aquela aplicação, para isso só precisa adicionar a ENV na Aba Configuration > Environment variables

Conclusão

Com esses poucos passos, conseguimos subir uma aplicação com uma unica função já em produção e podemos utilizar de qualquer forma. Isso mostra a versatilidade dessa ferramenta, em termos aplicações pequenas e com funções unicas para aquele contexto, e isso sem precisar utilizar ferramentas pesadas como frameworks ou bibilhotecas desnecessárias, além do fato de ter todas as vantagens citadas acima. Essa ferramenta está sendo bastante utilizada em ambientes de micro-servicos, principalmente pela facilidade de termos projetos especificos para aquele uso, facilidade no deploy e na sua manuntenção. Mais exemplos que posso citar de aplicações é integrações, calculadora, geração de tipos de arquivos, upload de arquivo no S3 e muito mais.

0 Comentário