Seu primeiro deploy NestJS + Lambda em 10 passos!
Se você está começando a trabalhar com aplicações serverless e quer aprender a implantar sua aplicação usando o framework NestJS e a plataforma de computação em nuvem Lambda da Amazon (AWS), esse guia apresenta um passo a passo para criar, configurar e implantar sua aplicação na nuvem, sem complicações. Seguindo os 10 passos descritos no artigo, você terá sua aplicação rodando na nuvem em pouco tempo e poderá desfrutar dos benefícios da tecnologia serverless. Então, mãos à obra e vamos aprender juntos!
Antes de começarmos...
O que é NestJS?
O NestJS é uma escolha popular para desenvolvedores que preferem uma abordagem mais estruturada e organizada para o desenvolvimento de aplicativos Node.js, com uma sintaxe limpa e fácil de entender
O que é Serverless e pra qual sua vantagem?
Serverless é um modelo de computação em nuvem em que o provedor de nuvem gerencia a infraestrutura do servidor e alocando recursos dinamicamente conforme necessário para executar e escalar o código de um aplicativo. Isso significa que os desenvolvedores não precisam se preocupar em gerenciar a infraestrutura do servidor, como provisionamento, configuração, escalabilidade, atualizações de software e manutenção.
O que é Lambda?
Em resumo, o AWS Lambda é um serviço de computação serverless que permite aos desenvolvedores executar código sem gerenciar a infraestrutura subjacente. Com base em funções, ele pode ser usado para criar aplicativos altamente escaláveis e resilientes que respondem a eventos em tempo real.
Pré-requisitos
- VSCode ou equivalente
- Insomnia ou equivalente
- Node >= 12
Mão na massa!
01. Instalar o NestJS & serverless globalmente e criar o projeto
npm i -g serverless
npm i -g @nestjs/cli
nest new first-serverless
02. Dependências
Em seguida, vamos abrir o projeto para instalar as dependências necessárias
cd first-serverless
npm i @vendia/serverless-express aws-lambda
npm i -D @types/aws-lambda serverless-offline
03. Editando controller
Podemos observar que o projeto foi iniciado com um controller base, chamado app.controller.ts, vamos reaproveita-lo e adicionar um novo endpoint
import { Controller, Get, Param } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
@Get('say/:something')
getTest(@Param('something') word: string): string {
return word;
}
}
04. Primeiro teste
Vamos ao primeiro teste, para isto, vamos iniciar a aplicação localmente da forma padrão
npm run start:dev
Agora é hora de testar a sua aplicação da forma que for mais conveniente para você: pode ser pelo navegador, Insomnia, Postman ou o que você preferir :)
http://localhost:3000/say/hello
Se você recebeu um resultado equivalente, tudo certo até aqui!
05. Configuração AWS
Acesse o console AWS e configure um novo usuário (IAM)
Para isso, após logar, procure por IAM na barra de pesquisa
Ao acessar o recurso, selecione usuário
Ao acessar o recurso, selecione "Adicionar usuarios"
Em sequencia, preenche o nome de usuário de sua preferencia e clique em próximo
Seleciona "Anexar politicas automaticamente", e depois "AdministratorAccess" na aba de Politica de permissões
Clicando em próximo, você chegara na etapa final e deve finalizar o cadastro clicando em "Criar usuário"
06. Configurando as credenciais de acesso
Com o novo usuario criado, selecione-o na lista de usuarios para abrir a lista de recursos
Selecione "Credenciais de Segurança"
Desça a tela até encontrar a aba "Chaves de acesso"
Em sequência clique em "Criar chave de acesso", selecione a opção Command Line Interface (CLI) e depois clique em "Próximo"
Defina (opcional) uma descrição para sua credencial
E clique em "Criar chave de acesso", guarde as informações e clique em concluir.
Com as credenciais em mãos, vamos voltar ao terminal
serverless config credentials --provider aws --key sua_chave_de_acesso --secret sua_chave_de_acesso_secreta
obs: substitua os valores acima pelos dados gerados no passo anterior
07. Criar arquivo lambda
Agora que ja configuramos nossas credenciais, vamos ao passo fundamental, criar o arquivo responsável pela execução do servidor
Para isso, cria na pasta "src" um arquivo chamada lambda.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { configure as serverlessExpress } from '@vendia/serverless-express';
let cachedServer;
export const handler = async (event, context) => {
if (!cachedServer) {
const nestApp = await NestFactory.create(AppModule);
await nestApp.init();
cachedServer = serverlessExpress({
app: nestApp.getHttpAdapter().getInstance(),
});
}
return cachedServer(event, context);
};
Esse arquivo será responsável por gerenciar a instancia da aplicação
08. Criar arquivo serverless.yml
Na raiz do projeto (fora da pasta "src"), crie um arquivo chamado serverless.yml
service: serverless-example
plugins:
- serverless-offline
provider:
name: aws
runtime: nodejs18.x
functions:
main:
handler: dist/lambda.handler
events:
- http:
method: ANY
path: /
- http:
method: ANY
path: '{proxy+}'
O arquivo "serverless.yml" contém as informações sobre a configuração da infraestrutura necessária para executar a aplicação serverless, incluindo a definição de funções, eventos, recursos e políticas de segurança, além de outras configurações, como variáveis de ambiente, configurações de rede e outras dependências.
09. Testando o ambiente serverless localmente
serverless offline
Se tudo correu bem, você deve ser capaz de acessar o mesmo endereço:
http://localhost:3000/dev/say/hello
obs: Note que em ambiente de desenvolvimento foi adicionado automaticamente o prefixo /dev antes da rota
10. Deploy
Agora você está pronto para colocar sua primeira aplicação serverless no ar!
Para isso, execute o comando
serverless deploy
O console retornara a URL de acesso da aplicação, você deve ser capaz de executar as mesmas operações dos testes anteriores
Para remover o serviço, basta executar
serverless remove
Fim!
Espero que esse artigo tenha sido útil para seu primeiro passo com lambda e NestJS!
Fontes:
https://docs.nestjs.com/
Top comments (1)
Que legal, muito bom!