Introdução ao Serverless

Raphael Araujo
Cubo Digital
Published in
3 min readSep 25, 2017

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

--

--