2
respostas

[Bug] Erro ao usar sls deploy --stage=prod

Segue meu código abaixo:

org: luizfelipew
app: alura-activities
service: aws-node-http-api-project
frameworkVersion: '3'

params:
  default:
    dbName: alura-serverless
  dev:
    connectionString: mongodb://localhost:27017/${self:params.default.dbName}
  prod:

provider:
  name: aws
  runtime: nodejs18.x
  region: us-east-1
  environment:
    MONGODB_CONNECTIONSTRING: ${param:connectionString}
      : ${param:dbName}



functions:
  sendResponse:
    handler: api/handlers.sendResponse
    events: 
      - httpApi:
          path: /api/results
          method: post
          request:
            schemas: 
              applcation/json: ${file(./schemas/sendResponse.json)}
  getResult:
    handler: api/handlers.getResult
    events:
      - httpApi:
          path: /api/results/{id}
          method: get

plugins:
  - serverless-offline

Erro apresentado no terminal: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Segue a imagem no serverless dashboard com a variável configurada: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas

Olá, Luiz! Tudo bem?

Analisando as configurações do seu arquivo serverless.yml, parece que o problema está na forma como você está tentando acessar a variável de ambiente connectionString para o ambiente de produção. No seu arquivo, você definiu connectionString apenas para o ambiente de desenvolvimento (dev), mas não para produção (prod).

Para resolver esse problema, você precisa definir a connectionString para o ambiente de produção da seguinte forma:

params:
  default:
    dbName: alura-serverless
  dev:
    connectionString: mongodb://localhost:27017/${self:params.default.dbName}
  prod:
    connectionString: sua_connection_string_para_prod

Substitua sua_connection_string_para_prod pela string de conexão real do seu banco de dados de produção. Certifique-se de que a string de conexão esteja correta e que o banco de dados esteja acessível pelo ambiente de produção.

Além disso, há um pequeno erro de sintaxe na seção environment do seu arquivo serverless.yml. Há uma linha com dois pontos (:) após MONGODB_CONNECTIONSTRING que deve ser corrigida. A correção ficaria assim:

provider:
  name: aws
  runtime: nodejs18.x
  region: us-east-1
  environment:
    MONGODB_CONNECTIONSTRING: ${param:connectionString}
    MONGODB_DB_NAME: ${param:dbName}

Após realizar essas alterações, tente executar o comando sls deploy --stage=prod novamente e veja se o problema foi resolvido.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Tinha corrigido o código (tentativas de fazer funcionar acabei colando código errado) mas esqueci de atualizar aqui, muito obrigado.

provider:
  name: aws
  runtime: nodejs18.x
  region: us-east-1
  environment:
    MONGODB_CONNECTIONSTRING: ${param:connectionString}
    MONGODB_DB_NAME: ${param:dbName}

A questão é que no curso ele coloca sem essa string de conexão mesmo da forma do código anterior pois justamente a url de conexão de prod não é para aparecer no código e pegar do serverless dashboard como feito no curso:

params:
  default:
    dbName: alura-serverless
  dev:
    connectionString: mongodb://localhost:27017/${self:params.default.dbName}
  prod:

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeSegue o link da branch que contém esse código e nesse caso quando faz o deploy pega o link remoto -> https://github.com/alura-cursos/nodejs-serverless-framework/blob/aula-2/serverless.yml

Obrigado.