Quando ouvi a palavra serverless pela primeira vez, levei a tradução ao pé da letra e pensei que se tratava de um projeto onde não existiria um servidor. Mas não é bem isso…
E criei esse artigo pra te contar o que entendi sobre o assunto. Dessa forma acredito que pode rolar uma troca legal entre a gente: de um lado, eu vou consolidar meus estudos iniciais da arquitetura serverless e do outro, você fica conhecendo mais um ponto de vista sobre o assunto. Então aqui vou falar sobre:
- O que é serverless
- Quais os benefícios de usar serverless
- Qual a importância de devs aprenderem a criar soluções serverless
- Como criei experiência ao estudar serverless
- Tutorial de “Hello, world!” na arquitetura serverless
O que é serverless?
Serverless é uma arquitetura orientada a eventos e não é que não exista um servidor, na real a gente não precisa se preocupar com a configuração de um servidor, pois o provedor de nuvem que usaremos fará isso pra gente.
Além disso, na arquitetura serverless, as aplicações são iniciadas apenas quando um evento aciona a execução do código da aplicação de forma dinâmica.
Dos modelos de serverless que existem aqui embaixo estão alguns dos mais populares:
- BaaS – Backend as a Service, como o Firebase do Google Cloud Platform
- FaaS – Function as a Service como AWS Lambda e Azure function
Quais os benefícios de usar serverless?
Mas você deve estar se perguntando, quais as vantagens de começar a usar serverless, não é mesmo? Dentre uma lista extensa de benefícios que fazem as empresas decidirem por usar serverless posso destacar estes 3:
- A escalabilidade da aplicação é automática
- A configuração de deploy é super simples
- Só pagamos pelo que usamos
A arquitetura serverless popularizou quando as empresas entenderam que podem crescer sua infraestrutura com redução de custos e de forma automática.
Além disso, é possível usar serverless na linguagem de programação que o time já utiliza, facilitando ainda mais a adesão.
Qual a importância de devs aprenderem a criar soluções serverless?
Soluções serverless garantem facilidade no dia a dia de trabalho, para determinados projetos, onde muitas configurações já existem, como por exemplo de conteinerização, escalonamento e muitas outras.
Dessa forma, podemos nos concentrar em criar regras com qualidade, explorando o ágil e utilizando boas práticas.
Podemos também acessar diversas oportunidades ao sermos capazes de gerar crescimento para os negócios em que colaboramos com economia utilizando serverless.
Tenta uma coisa? Pesquisa no LinkedIn a quantidade de vagas disponíveis para quem tem esse conhecimento. Eu pesquisei aqui com o termo AWS Lambda e encontrei quase 400 vagas para o Brasil. Bastante, não?
Criando experiência enquanto estudo
Meu primeiro projeto serverless usando AWS Lambda do zero ao deploy
Minha primeira experiência com serverless foi realizando um projeto guiado, no curso Ignite da Rocketseat, no módulo de backend com Node.js nas aulas da maravilhosa Dani Leão.
A gente fez uma aplicação que cria e valida um certificado de conclusão de curso gerando uma versão pdf. Se liga no resultado abaixo!
A request de criação do certificado:
O pdf gerado:
Para isso utilizamos as tecnologias abaixo:
- Typescript
- Framework serverless
- AWS Lambda
- DynamoDb
- S3
- puppeteer
- handlebars
Algumas lições aprendidas:
- Como criar uma lambda
- Tipagem da aws-lambda
- Criei minha conta aws e configurei as credenciais na minha máquina
- Como usar o dynamoDb offline
- Como rodar o projeto serverless offline
- Como fazer deploy da solução
- O uso de algumas libs pra transformar data e pra gerar pdf
- Como usar S3
- Como consultar o log na aws
- O principal aprendizado foi entender o arquivo serverless.ts e que ele pode ser no formato yml também
- Como criar e rodar um projeto com o framework serverless usando o esbuild
O código completo você pode conferir aqui no meu repositório: https://github.com/simaraconceicao/serverless
Tutorial: “Hello, Serverless!”
Agora que você já sabe os motivos pelos quais deveria aprender a criar projetos usando a arquitetura serverless, chegou a hora de colocar a mão no código e vamos dar um hello world com serverless.
Aqui a gente vai fazer um tutorial rodando localmente, ou seja não faremos deploy na AWS.
Requisitos: É preciso ter instalado o “node”: “>=14.15.0”.
Passo 1: Instalar o framework serverless
Um boilerplate para gerar projetos aws lambda. Você pode ler mais detalhes aqui na documentação: https://www.serverless.com/
Comando:
npm install -g serverless
Verifique se instalou corretamente usando o comando:
serverless --version
Deverá retornar as versões instaladas.
Passo 2: Criar o projeto usando o template aws-nodejs-typescript
Comando:
serverless create --template aws-nodejs-typescript --path nome-do-projeto
Passo 3: Entrar no projeto, instalar as dependências e abrir no vscode
Comandos:
cd nome-do-projeto
npm i
code .
Passo 4: Excluir arquivos default (pasta de libs e pasta hello)
Antes de excluir estava assim:
Após excluir os arquivos default, sua estrutura de pastas vai ficar assim:
Passo 5: Hello, Serverless!
Criar um arquivo dentro da pasta functions e nomear de hello.ts
Código:
import { APIGatewayProxyHandler } from 'aws-lambda' export const handler: APIGatewayProxyHandler = async (event) => { return { statusCode: 200,
body: JSON.stringify({
message: 'Hello, Serverless!'
})
}
}
Passo 6: entender estruturas de pastas, principalmente arquivo serverless.ts
├── src
│ ├── functions # Lambda configuration and source code folder
│ ├── hello.ts
│
├── package.json
├── serverless.ts # Serverless service file
├── tsconfig.json # Typescript compiler configuration
├── tsconfig.paths.json # Typescript paths
└── webpack.config.js # Webpack configuration
Passo 7: Dentro do arquivo serverless.ts mudar importação do arquivo hello
Importar a funcao via path, excluir importação que vem por default dos arquivos e pastas que excluímos.
Código:
// import the function via paths functions: {
hello: {
handler: "src/functions/hello.handler",
events: [
{
http: {
path: "hello",
method: "get",
cors: true
}
}
]
}
}
Passo 8: Incluir plugin serverless offline
Comando:
npm i serverless-offline -D
Inserir config de plugin no arquivo serverless.ts
Código:
plugins: ['serverless-offline'],
Observação
Como o arquivo serverless.ts estava antes por default:
Como o arquivo serverless.ts ficou após todas as alterações:
Passo 9: rodar projeto localmente
Comando:
serverless offline