Introdução ao Serverless
Ao iniciar um projeto, uma das maiores preocupações é como estruturar e criar os servidores. Um dos principais assuntos do momento em cloud computing é Function as a Service (FaaS). A AWS é uma das grandes percursoras nesse assunto com o seu serviço AWS Lambda que disponibiliza a criação das famosas funções, onde se responsabiliza pelo posicionamento dos servidores para executá- las, abstraindo assim totalmente a necessidade de gerenciar os recursos na cloud.
“Funções” são pequenas aplicações, que não guarda nenhum estado e são executadas através de um trigger. Ex: A função é responsável por fazer um crop de uma imagem e salvar em algum lugar, toda vez que for salvo uma nova imagem no bucket da S3 irá acionar essa função.
Caso você tenha necessidade de uma alta demanda dessas funções, a AWS irá provisionar novos servidores para processar toda a sua demanda. Caso essa demanda caia, a AWS tem uma inteligência de congelar ou matar os recursos, ficando invisível para nós desenvolvedores.
Vantagens em utilizar esse serviço na AWS:
- Integração fácil com outros serviços como Amazon API Gateway e DynamoDB, podendo consumir dados ou mesmo ser executadas por esses serviços.
- Utilização dos recursos On Demand.
- SDK em várias linguagens de programação, principalmente em Node.
- Versionamento das funções.
Este tipo de arquitetura é conhecida como serverless. O ecossistema em volta desse assunto está engatinhando comparado à arquiteturas mais antigas.
Ferramentas de deploying
Existem diversas ferramentas para auxiliar o provisionamento e deploy das suas funções, cada uma com seu perfil. Não é o intuito desse artigo descrever os prós e contras de cada ferramenta, mas vou falar um pouco mais sobre o serverless framework pois foi a que tive mais contato.
Neste framework existe uma ótima integração com os serviço da AWS, disponibilizando diversas funcionalidades para montar toda a sua stack, possibilitando criar as funções e versionar de uma forma inteligente e fácil.
Todas suas configurações são feitas através de um yml, possibilitando criar recursos no DynamoDB ou API Gateway. Todo trabalho pesado de integração e inteligência de versionamento fica por conta do framework, que pega as configurações descrita do yml, transforma em um template para o CloudFormation e envia para a AWS, que por sua vez se responsabiliza em criar/atualizar toda a sua stack.
Além de toda essa mágica, ainda é possivel integrar diversos plugins para melhorar ainda mais a criação e manipulação de toda a sua stack. Veja aqui a lista com todos os plugins.
Em futuros artigos iremos descrever mais sobre os plugins e exemplos sobre como utilizar o serveless.
Algumas dificuldades
Conforme o desenvolvimento da aplicação, alguns dificuldades podem aparecer. Alguns cuidados podem ser tomados para não enfrentar alguns desses problemas:
- Sua stack pode crescer muito, com isso o arquivo de configuração irá aumentar muito rápido e ficar cada vez mais difícil de ler. Assim, a preocupação em organizar e separar essas configurações são muito válidas.
- Na mesma linha do crescimento da sua aplicação utilizando a AWS, existe um limite de recursos que podem ser criados na mesma stack pelo CloudFormation. É considerado como um novo recurso, cada function, role, streams, routes, etc… Fique ligado, pois esse limite é de 200 recursos e rapidamente você pode chegar nele. Existem plugins para o serveless que auxiliam nesse problema como o Serverless Nested Stack.
- Como esse ecossistema é muito novo, existe pouca documentação sobre CI/CD. Vale dar uma estudada mais a fundo e se preocupar com a qualidade do código.
- Cuidado em fazer alguma alteração no console da AWS, como toda sua stack é feita através do CloudFormation, qualquer alteração pode trazer problema no diff da stack feita pelo CloudFormation em futuros deploys. Assim não finalizando todo o procedimento e fazendo o rollback automático.
Conclusão
Já existem muitas ferramentas que foram desenvolvidas pela comunidade, mas ainda existem diversos problemas a serem resolvidos para que possamos ter um ambiente mais rico para nós, programadores. Hoje trabalho em uma aplicação que está rodando em produção e está suprindo muito bem as nossas necessidades. Muito ainda está por vir, vale a pena ficarmos de olho.
Espero ter levado um pouco da minha experiência nesse mundo fascinante. Adoraria escutar a sua experiência também.
That’s all folks