DEV Community

Cover image for Passo a passo: Como fazer deploy de NestJS com Lambda na AWS
Fernando Sparapani
Fernando Sparapani

Posted on

Passo a passo: Como fazer deploy de NestJS com Lambda na AWS

Image description

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

Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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;
  }
}

Enter fullscreen mode Exit fullscreen mode

04. Primeiro teste

Vamos ao primeiro teste, para isto, vamos iniciar a aplicação localmente da forma padrão

npm run start:dev
Enter fullscreen mode Exit fullscreen mode

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!

Image description

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

Image description

Ao acessar o recurso, selecione usuário

Image description

Ao acessar o recurso, selecione "Adicionar usuarios"

Image description

Em sequencia, preenche o nome de usuário de sua preferencia e clique em próximo

Image description

Seleciona "Anexar politicas automaticamente", e depois "AdministratorAccess" na aba de Politica de permissões

Image description

Clicando em próximo, você chegara na etapa final e deve finalizar o cadastro clicando em "Criar usuário"

Image description

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"

Image description

Desça a tela até encontrar a aba "Chaves de acesso"

Image description

Em sequência clique em "Criar chave de acesso", selecione a opção Command Line Interface (CLI) e depois clique em "Próximo"

Image description

Defina (opcional) uma descrição para sua credencial

Image description

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
Enter fullscreen mode Exit fullscreen mode

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);
};
Enter fullscreen mode Exit fullscreen mode

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+}'
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Fim!

Espero que esse artigo tenha sido útil para seu primeiro passo com lambda e NestJS!


Fontes:
https://docs.nestjs.com/

Top comments (1)

Collapse
 
robsongrangeiro profile image
Robson Grangeiro

Que legal, muito bom!