Introdução a Serverless com Azure Functions

Rafael Augusto
Rafael Augusto, Engenheiro de Software Rafael Augusto
2 de Setembro de 2019
  • #serverless
Introdução a Serverless com Azure Functions
Introdução a Serverless com Azure Functions

Serverless Computing é uma das mais novas e promissoras áreas da computação, mais modular, requere menos espaço físico, sendo consequentemente mais barata.


Evolução

Cloud Computing já é realidade em diversos lugares, introduzindo conceitos como a alta escalabilidade, elasticidade, flexibilidade, plataformas como serviço e baixo custo.

Esse modelo é muito mais simples do que lidar com servidores físicos porém ainda temos que nos preocupar em orquestrar todos esses servidores.

Serverless

Pouco depois do Cloud Computing, surgiram formatos como Back-end as a Service(Serviços como Autenticação, Armazenamento de Arquivos, Banco de Dados, Mensagens Real-time e etc) que dispensava o gerenciamento de servidores, tendo que nos preocupar apenas com os serviços que lidavam com processamento de requisições, regras de negocio, execução de jobs e outros. Esse foi o primeiro passo para o que seria considerado Serverless Computing.

Serverless Computing faz parte de um movimento que está buscando diminuir toda essa bagagem de servidores e infra estrutura, dando lugar a uma arquitetura totalmente Stateless com foco na execução da lógica de negócio, deixando o gerenciamento de recursos computacionais na responsabilidade de terceiros.

Azure Functions

A Azure Functions é um serviço da Azure que permite a execução de pequenas lógicas sem a necessidade de se preocupar com provisionamento de recursos para a sua execução.

Logo Azure Functions
Logo Azure Functions

As functions vão ser executadas de maneira reativas, através de algum gatilho configurável(Timer, HTTP, Queue), e a Azure vai ficar responsável por escalar os recursos necessários para a execução da lógica contida no corpo da função. O nosso trabalho agora será apenas escrever a parte lógica que será executada.

A Azure Functions não é o único serviço desse tipo disponível, existem outros como Lambda da AWS ou Google Cloud Functions do Google Cloud.


Exemplo Prático

Para entendermos um pouco mais do funcionamento de uma arquitetura serverless, vamos criar um pequeno exemplo utilizando o framework Serverless e publica-lo no Azure Functions.

Serverless Framework

O Serverless Framework fornece uma maneira simples de organizar e desenvolver nossas funções serverless, além de ajudar na realização do deploy dessa função em locais como Azure, AWS e Google Cloud.

Serverless Framework
Serverless Framework

O serverless pode ser acessado através de um CLI(Command Line Interface) que pode ser instalado pelo seu gerenciador de pacotes favorito:

npm install serverless -g

Você pode executar o comando seguinte comando no seu terminal para ter um pouco mais de como o serverless funciona:

serverless -h

Vamos começar criando nossa primeira serverless function baseado em um template simples(Outros templates e exemplos podem ser encontrados na documentação oficial):

serverless create --template azure-nodejs --name labor-reminder

O resultado será um projeto de estrutura simples com os seguintes arquivos:

  • handler.js: Arquivo principal que será executado quando a função for chamada
  • serverless.yml: Arquivo de configuração do Serverless que será lido pelo Azure para configuração inicial e gatilhos de ativação;

Existem outros arquivos que são comuns para projetos NodeJS como .gitignore, package.json e README.md

O arquivo principal que vai sofrer alterações será o handler.js:

#oieeeeeeeeeee

https://gist.github.com/rafaelvicio/4eb37ea316b30b089eeddf8407a4ba42

Resolvendo um problema de organização

Aqui na Novatics nós utilizamos o Labor para gerenciar e organizar nossas atividades, como ainda não estou muito bem acostumado com esse processo, vamos construir um lembrete para essa atividade.

Vamos construir uma função no Azure Functions que envie um e-mail para alguns colaboradores da Novatics, solicitando que confiram as atividades no Labor.

Para realizar o envio de e-mail vamos utilizar a API do SendGrid para realizar o envio de e-mail.

yarn add @sendgrid/mail

https://gist.github.com/rafaelvicio/5d27aa29fafe4c0772440de410c7a8bb

Agora vamos fazer o deploy dessa função no Azure:

serverless deploy

Siga as simples instruções de conexão do CLI com a Azure para configuração da sua conta, isso será feito apenas uma vez.

Após a função ser criada, entre no seu Portal Azure. Na página de serviços, procure a Azure Function que estará com o nome que você deu na sua criação utilizando o serverless framework.

No Portal da Azure você vai ter acesso á função, podendo executar e alterar o seu comportamento. Clique no botão “Run” para ver a sua função ser executada pela primeira vez.

Portal Azure Functions
Portal Azure Functions

As variáveis de ambiente, ou Functions Keys podem ser configuradas no menu “Manager” de cada Azure Functions.

Gatilho de execução

As Serverless Functions podem ser chamadas de diversas formas, como requisições HTTP ou rotinas de Timer por exemplo. Este recurso, chamado de Triggers, é muito presente na Azure Functions, podendo ser integrado com sistemas de mensageria como Kafka ou banco de dados.

No Portal do Azure esses gatilhos podem ser configurações no menu “Integrate” de cada função.

Triggers nas Azure Functions
Triggers nas Azure Functions
Triggers nas Azure Functions

Vamos configurar nossa function para ser executada todos os dias úteis ás 09:30 da manhã.

0 30 9 * * 1–5

Agora nossa função será chamada todos os dias úteis ás 09:30 enviando um e-mail para os colaboradores cadastrados.


O código desse projeto utilizado no artigo está disponível no GitHub da Novatics no seguinte repositório.

#serverless #azure #functions #aws #faas #baas

  • #serverless
Rafael Augusto
Rafael Augusto, Engenheiro de Software Rafael Augusto

qual é o seu desafio para a gente?

hello@novatics.com.br
Voltar ao topo