backend icon indicating copy to clipboard operation
backend copied to clipboard

Deploy em AWS Lambda

Open meyer1994 opened this issue 9 months ago • 2 comments

Sobre

Modificações no projeto que permite o deploy da aplicação em um Lambda da AWS.

Testar

A aplicação já está configurada em um lambda. Para testar, basta executar um curl:

curl -v https://4otgb7u14b.execute-api.us-east-1.amazonaws.com/shelters

Ou usar o frontend:

VITE_API_URL="https://4otgb7u14b.execute-api.us-east-1.amazonaws.com/" npm run dev

Devido a forma como Lambdas funcionam, eles podem estar desligados no momento dos primeiros requests. Contudo, após inicar, os próximos requests serão mais rápidos.

Infra

Eu já configurei uma pequena infraestrutura para a aplicação na conta do AWS:

  • RDS: banco PostgreSQL (dados importados já)
  • Paramemeter Store: credenciais de conexão do RDS
  • CloudWatch: configurado automaticamente pelo Serverless

Serverless irá buscar o valor da conexão do RDS no parameter store e usará o valor na variável de ambiente DATABASE_URL

Todo

O host do RDS está aberto publicamente. O correto seria configurar um proxy para o lambda conseguir conectar no banco (docs). Eu posso fazer isso nos próximos dias se acharem necessário...

Podemos configurar o Github Actions para realizar o deploy. Segue um exemplo de configuração:

  deploy:
    if: github.ref == 'refs/heads/master'
    runs-on: ubuntu-latest
    env:
      AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: current
          cache: npm
      - run: npm ci
        env:
          PRISMA_CLI_BINARY_TARGETS: native,rhel-openssl-1.0.x
      - run: npx prisma generate
      - run: npm run build
      - run: npx serverless deploy --verbose

meyer1994 avatar May 09 '24 02:05 meyer1994

Cara, não sei se faz muito sentido subir essa aplicação numa lambda ao invés de uma instância no EC2

AndersonCRocha avatar May 10 '24 01:05 AndersonCRocha

Cara, não sei se faz muito sentido subir essa aplicação numa lambda ao invés de uma instância no EC2

Eu decidi ir com o lambda por alguns motivos:

  • É extremamente fácil de deployar
  • É extremamente fácil de configurar
  • Scale up e down automático
  • Logs automáticos

Como a nossa aplicação é apenas um CRUD, vi como sendo uma boa escolha. Contudo, não faço ideia dos planos futuros para a aplicação. Certas coisas não funcionam direito no contexto "serverless".

Se quiserem, posso configurar para realizar um deploy num ECS Fargate com um Application Load Balancer (ALB). O deploy seria realizado fazendo upload de uma imagem docker nova para o repositório configurado

PS: Eu só uso EC2 se estritamente necessário, pois temos que configurar bastante coisa para conseguir realizar deploys em EC2s.

meyer1994 avatar May 10 '24 16:05 meyer1994