Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Learn why MongoDB was selected as a leader in the 2024 Gartner® Magic Quadrant™
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Idiomaschevron-right
JavaScriptchevron-right

Usando o driver Node.js MongoDB com AWS Lambda

Joel Lord5 min read • Published Feb 09, 2023 • Updated Jan 23, 2024
AWSAtlasJavaScript
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
O JavaScript percorreu um longo caminho desde sua discreta introdução nos 1990s. É a linguagem mais popular, de acordo com a Pesquisa sobre desenvolvedores do Stack Overflow, há 10 anos consecutivos. Portanto, não é surpreendente que ela tenha emergido como a linguagem mais popular para escrever funções sem servidor.
Escrever uma função sem servidor usando JavaScript é simples e semelhante a escrever um manipulador de rotas no Express.js. A principal diferença é como o servidor lidará com o código. Como desenvolvedor, você só precisa se concentrar no próprio manipulador, e o provedor de nuvem manterá toda a infraestrutura necessária para executar essa função. É por isso que o serverless está ganhando cada vez mais força. Quase não há sobrecarga que vem com o gerenciamento do servidor; Basta escrever seu código e implantá-lo no provedor de nuvem de sua escolha.
Este artigo mostrará como escrever uma função sem servidor do AWS Lambda que se conecta ao MongoDB Atlas para consultar alguns dados e como evitar armadilhas comuns que causariam um desempenho ruim.

Pré-requisitos

Para este artigo, você precisará de conhecimento básico de JavaScript. Você também precisará de:

Criando sua primeira função Lambda

Para começar, vamos criar uma função lambda básica. Esta função será usada mais tarde para se conectar à nossa instância MongoDB.
Na Amazon Web Services, Go o serviço Lambda. A partir daí, você pode clicar no botão "Criar função". Preencha o formulário com um nome para sua função e abra as configurações avançadas.
Como você deseja acessar essa função a partir de um navegador, será necessário alterar essas configurações:
  • Marque a opção "Ativar URL de função".
  • Em "Tipo de autenticação", escolha "NONE".
  • Marque a caixa "Configure cross-origin resource sharing (CORS)".
Agora clique em "Criar função" e você está pronto para Go. Em seguida, você será presenteado com uma tela semelhante à seguinte.
Captura de tela do editor de código do Amazon Web Services Lambda
Você pode ver uma janela com algum código. Essa função retornará um código de status 200 (OK) e o corpo da solicitação será "Olá do Lambda!".
Você pode testar essa função acessando "Configuração" acima do editor de código. Em seguida, escolha "URL da função" no menu de navegação esquerdo. Em seguida, você verá um link chamado "Function URL." Ao clicar nesse link, uma nova guia será aberta com a mensagem esperada.
Se você alterar o código para retornar um corpo diferente, clique em "Implantar" na parte superior e atualize a segunda guia, você verá sua nova mensagem.
Você acabou de criar seu primeiro endpoint HTTPS que atenderá à resposta gerada pela sua função.

Armadilhas comuns com o driver Node.js para MongoDB

Embora possa ser trivial escrever funções simples, há algumas considerações que você deve ter em mente ao lidar com AWS Lambda e MongoDB.

Armazenando variáveis de ambiente

Você pode escrever suas funções diretamente no editor de código fornecido pelo AWS Lambda, mas é provável que você queira armazenar seu código em um repositório para compartilhar com sua equipe. Ao enviar seu código, tome cuidado para não fazer upload de algumas de suas chaves secretas. Com seu banco de dados, por exemplo, você não gostaria de enviar sua cadeia de conexão acidentalmente. Você pode usar uma variável de ambiente para isso.
Na tela AWS Lambda, vá para a guia "Configuration" na parte superior e escolha "Variáveis de ambiente" na barra de navegação à esquerda. Clique em "Editar" e você terá a opção de adicionar uma nova variável de ambiente. Preencha o formulário com os seguintes valores:
  • Chave: MONGODB_CONNECTION_STRING
  • Valor: Esta é uma string de conexão
Agora Go ao editor de código e use o process.env para retornar a variável de ambiente recém-criada como o corpo da sua solicitação.
1export const handler = async(event) => {
2    const response = {
3        statusCode: 200,
4        body: process.env.MONGODB_CONNECTION_STRING,
5    };
6    return response;
7};
Se você atualizar a guia que abriu anteriormente, verá o valor dessa variável de ambiente. No exemplo abaixo, você alterará o valor dessa variável de ambiente para se conectar ao seu banco de dados MongoDB Atlas.

Pool de Conexões

Quando você inicializa um MongoClient com o driver Node.js, ele cria um pool de conexões que podem ser usadas pelo seu aplicativo. O MongoClient garante que essas conexões sejam fechadas após algum tempo para que você não atinja o limite.
Um erro comum ao usar o MongoDB Atlas com o AWS Lambda é criar um novo pool de conexões toda vez que sua função recebe uma solicitação. Uma função mal escrita pode levar à criação de novas conexões a cada vez, como exibido no diagrama a seguir da tela de monitoramento do Atlas.
Um gráfico que mostra um pico repentino no número de conexões com o banco de dados
Esse pico repentino de conexões é resultado do acionamento de uma função Lambda a cada segundo por aproximadamente dois minutos.
O segredo para corrigir isso é mover a criação do cliente MongoDB para fora do manipulador. Isso será mostrado no exemplo abaixo. Depois que o código for corrigido, você poderá ver uma melhoria significativa no número de conexões simultâneas.
Um gráfico que mostra um pico no número de conexões, seguido por uma tendência normal
Agora que você conhece as armadilhas a serem evitadas, é hora de criar uma função que se conecte ao MongoDB Atlas.

Usando o driver MongoDB Node.js no Amazon Web Services Lambda

Para este exemplo, você pode usar a mesma função criada anteriormente. Go para as configurações "Variáveis de ambiente" e coloque a cadeia de conexão do seu MongoDB database como o valor para a variável de ambiente "MONGODB_CONNECTION_STRING". Você pode encontrar sua connection string na Atlas.
Como você precisará de pacotes adicionais para executar essa função, não poderá mais usar o editor de código.
Crie uma nova pasta em seu computador, inicialize um novo projeto Node.js usando npm e instale o pacotemongodb.
1npm init -y
2npm install mongodb
Crie um novo arquivoindex.mjsnesse diretório e cole o código a seguir.
1import { MongoClient } from "mongodb";
2const client = new MongoClient(process.env.MONGODB_CONNECTION_STRING);
3export const handler = async(event) => {
4    const db = await client.db("sample_mflix");
5    const collection = await db.collection("movies");
6    const body = await collection.find().limit(10).toArray();
7    const response = {
8        statusCode: 200,
9        body
10    };
11    return response;
12};
Esse código começará com a criação de um novo MongoClient. Observe como o cliente é declarado fora da função do manipulador. É assim que você evitará problemas com seu pool de conexões. Além disso, observe como ele usa a string de conexão fornecida na configuração do Lambda em vez de um valor codificado.
Dentro do manipulador, o código se conecta ao banco de dadossample_mflix e à coleçãomovies. Em seguida, ele encontra os primeiros resultados 10 e os converte em uma array.
Os resultados 10 são então retornados como o corpo da função Lambda.
Sua função agora está pronta para ser implantada. Desta vez, você precisará compactar o conteúdo dessa pasta. Para fazer isso, você pode usar sua GUI favorita ou o seguinte comando se tiver o utilitáriozipinstalado.
1zip -r output.zip .
Go ao editor de código do Lambda e procure o botão "Upload from" no canto superior direito do editor. Escolha o arquivooutput.ziprecém-criado e clique em "Save."
Agora Go para a guia com o resultado da função e clique em atualizar. Você deve ver os primeiros 10 documentos da collectionmovies.

Resumo

Usar o AWS Lambda é uma ótima maneira de escrever pequenas funções que podem ser executadas com eficiência sem se preocupar com a configuração de servidores. É também uma maneira muito econômicas de hospedar seu aplicativo, pois você paga apenas por uso. Você pode encontrar mais detalhes sobre como criar funções do Lambda para se conectar ao MongoDB database na documentação.
Se você quiser uma solução totalmente sem servidor, também pode executar o MongoDB como um serviçosem servidor. Como as funções do Lambda, você pagará apenas por uma instância do banco de dados sem servidor com base no uso.
Se quiser saber mais sobre como usar o MongoDB, consulte os fóruns da comunidade.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Aplicativo agente Sentiment Chef com Google Cloud e MongoDB Atlas


Jun 24, 2024 | 16 min read
exemplo de código

Conecte-se a um MongoDB database usando o Node.js 3.3.2


Oct 01, 2024 | 5 min read
Tutorial

Capturando menções de notícias de hackers com Node.js e MongoDB


Sep 09, 2024 | 8 min read
Início rápido

Integração do Atlas Search com o BuildSship


Oct 15, 2024 | 4 min read
Sumário