Como usar o PyMongo para conectar o MongoDB Atlas ao AWS Lambda
Anaiya Raisinghani6 min read • Published Apr 02, 2024 • Updated Apr 02, 2024
Avalie esse Tutorial
Visualize o Paraíso do desenvolvedor: um mundo onde, em vez de nos preocuparmos com complexidades de hardware, estamos livres para focar inteiramente na execução de nossos aplicativos. Com a combinação de AWS Lambda e MongoDB Atlas, esta visão se torna uma Realidade.
Armados com a estrutura de pagamento por execução do AWS Lambda e a escalabilidade incomparável do MongoDB Atlas, os desenvolvedores entenderão realmente o que significa para seus aplicativos crescerem sem as limitações de hardware às quais estão familiarizados.
Este tutorial mostrará como configurar corretamente um Atlas cluster, conectá-lo ao AWS Lambda usando o Python Driver do MongoDB, escrever um pipeline de agregação em nossos dados e retornar as informações desejadas. Vamos começar.
- Conta AWS; O acesso lambda é necessário
- Repositório GitHub
- Python 3.8+
Nosso primeiro passo é criar um Atlas cluster. Faça login na UI do Atlas e siga as etapas para configurá-la. Para este tutorial, a camada grátis é recomendada, mas qualquer camada funcionará!
Certifique-se de que o provedor de nuvem escolhido seja AWS. Também é necessário escolher um nome de usuário e senha seguros para que tenhamos a autorização adequada mais tarde neste tutorial, junto com o acesso adequado ao endereço IP.
Quando seu cluster estiver instalado e funcionando, clique nas reticências ao lado do botão Procurar Coleções e baixe o
sample dataset
. Seu cluster finalizado ficará assim: Depois que nosso cluster for provisionado, vamos configurar nossa função do AWS Lambda.
Faça login em sua conta da AWS e procure "Lambda " na barra de pesquisa. Aperte o botão laranja "Create function" no canto superior direito da tela e você será direcionado para a imagem abaixo. Aqui, certifique-se de primeiro selecionar a opção "Author from scratch ". Em seguida, queremos selecionar um nome para nossa função (AWSLambdaDemo), o tempo de execução (3.8) e nossa arquitetura (x86_64).
Pressione o botão laranja "Create function " no canto inferior direito para continuar. Depois que sua função for criada, você verá uma página com a visão geral da função acima e sua fonte de código logo abaixo.
Agora, estamos prontos para configurar nossa conexão do Amazon Web Services Lambda para nosso cluster MongoDB .
Para facilitar as coisas para nós, porque vamos usar o Pymongo, uma dependência, em vez de editar diretamente na fonte do código, usaremos o Visual Studio Code. O AWS Lambda tem uma quantidade limitada de bibliotecas e dependências pré-instaladas, portanto, para contornar isso e incorporar o Pymongo, precisaremos empacotar nosso código de uma maneira especial. Devido a esse "workaround, ", este não será um tutorial típico com testes em cada etapa. Primeiro, teremos que baixar nossas dependências e enviar nosso código para o Lambda antes de garantir que nosso código funcione em vez de usar um arquivo
requirements.txt
típico. Mais sobre isso abaixo.Agora estamos prontos para estabelecer uma conexão entre o AWS Lambda e nosso cluster MongoDB!
Crie um novo diretório em sua máquina local e nomeie-o
awslambda-demo
.Vamos instalar o
pymongo
. Como disse acima, o Lambda não tem todas as bibliotecas disponíveis. Então, precisamos baixar pymongo
na raiz do nosso projeto. Podemos fazer isso trabalhando com arquivos .zip: No terminal, insira nosso diretórioawslambda-demo
:1 cd awslambda-demo
Crie um novo diretório onde suas dependências ficarão:
1 mkdir dependencies
Instale
pymongo
diretamente em seu pacotedependencies
:1 pip install --target ./dependencies pymongo
Abra o código do Visual Studio, abra o diretório
awslambda-demo
e crie um novo arquivo Python chamado lambda_function.py
. É aqui que estará o centro da nossa conexão.Insira o código abaixo em nosso
lambda_function.py
. Aqui, estamos configurando nosso console para verificar se podemos nos conectar ao nosso cluster Atlas. Lembre-se de que, como estamos incorporando nossas variáveis de ambiente em uma etapa posterior, você não poderá se conectar ainda. Copiamos a definiçãolambda_handler
de nossa fonte de código Lambda e a editamos para inserir um documento declarando meu nome completo em um novo “test” collection e “test” collection. É uma prática recomendada incorporar nosso MongoClient fora do nosso lambda_handler
, pois estabelecer uma conexão e executar a autenticação é reativamente caro, e o Lambda reutilizará essa instância.1 import os 2 from pymongo import MongoClient 3 4 5 client = MongoClient(host=os.environ.get("ATLAS_URI")) 6 7 8 def lambda_handler(event, context): 9 # Name of database 10 db = client.test 11 12 # Name of collection 13 collection = db.test 14 15 # Document to add inside 16 document = {"first name": "Anaiya", "last name": "Raisinghani"} 17 18 19 # Insert document 20 result = collection.insert_one(document) 21 22 23 if result.inserted_id: 24 return "Document inserted successfully" 25 else: 26 return "Failed to insert document"
Se isso for inserido corretamente no AWS Lambda, verá "Document inserted successfully " e no MongoDB Atlas, verá a criação de nosso banco de dados e coleção "test " junto com o único documento com o nome "Anaiya Raisinghani. " Lembre-se de que não vamos ver isso ainda, pois não configuramos nossas variáveis de ambiente e vamos fazer isso algumas etapas abaixo.
Agora, precisamos criar um arquivo .zip arquivo, para que possamos carregá-lo em nossa função Lambda e executar nosso código. Crie um arquivo .zip arquivo na raiz:
1 cd dependencies 2 zip -r ../deployment.zip *
Isso cria um arquivo
deployment.zip
no diretório do projeto.Agora, precisamos adicionar nosso arquivo
lambda_function.py
à raiz do nosso arquivo .zip:1 cd .. 2 zip deployment.zip lambda_function.py
Depois de ter seu arquivo .zip , acesse a tela de função do AWS Lambda, clique no botão "Upload from " e selecione ".zip file " no lado direito da página:
Carregue seu arquivo .zip e você deverá ver o código do seu
lambda_function.py
em seu "Code Source ": Vamos configurar nossas variáveis de ambiente. Selecione a aba "Configuration " e, em seguida, selecione a aba "Environment Variables. Aqui, coloque sua string "ATLAS_URI ". Para acessar sua string de conexão, siga as instruções em nossos Docs.
Depois de ter suas variáveis de ambiente no lugar, estamos prontos para executar nosso código e ver se nossa conexão funciona. Clique no botão “Test”. Se for a primeira vez que você está fazendo isso, precisará dar um nome ao seu evento. Mantenha tudo o mais nas configurações padrão. Você deve ver esta página com nosso “Execution results.” Nosso documento foi inserido!
Quando verificamos novamente o Atlas, podemos ver que nosso novo banco de dados "test " e a collection "test " foram criados, junto com nosso documento com "Anaiya Raisinghani. "
Isso significa que nossa conexão funciona e somos capazes de inserir documentos do AWS Lambda em nosso cluster MongoDB. Agora, podemos dar um passo adiante e inserir um pipeline de agregaçãosimples!
Para o nosso pipeline, vamos alterar nosso código para nos conectarmos ao banco de dados
sample_restaurants
e à coleçãorestaurants
. Vamos incorporar nosso pipeline de agregação para encontrar um tamanho de amostra de cinco restaurantes de culinária americana localizados no Brooklyn, em Nova York. Vamos mergulhar de cabeça!Como baixamos nossa dependência
pymongo
, podemos incorporar diretamente nosso pipeline de agregação em nossa fonte de código. Altere seu lambda_function.py
para ficar assim:1 import os 2 from pymongo import MongoClient 3 4 connect = MongoClient(host=os.environ.get("ATLAS_URI")) 5 6 def lambda_handler(event, context): 7 # Choose our "sample_restaurants" database and our "restaurants" collection 8 database = connect.sample_restaurants 9 collection = database.restaurants 10 11 # This is our aggregation pipeline 12 pipeline = [ 13 14 # We are finding American restaurants in Brooklyn 15 {"$match": {"borough": "Brooklyn", "cuisine": "American"}}, 16 17 # We only want 5 out of our over 20k+ documents 18 {"$limit": 5}, 19 20 # We don't want all the details, project what you need 21 {"$project": {"_id": 0, "name": 1, "borough": 1, "cuisine": 1}} 22 23 ] 24 25 # This will show our pipeline 26 result = list(collection.aggregate(pipeline)) 27 28 # Print the result 29 for restaurant in result: 30 print(restaurant)
Aqui, estamos usando
$match
para encontrar todos os restaurantes de cozinha norte-EUA localizados no Brooklyn. Estamos então usando $limit
para apenas cinco documentos de nosso banco de dados. Em seguida, estamos usando $project
para mostrar apenas os campos que queremos. Vamos incluir "borough ", "cuisine " e o "name " do restaurante. Em seguida, executamos nosso pipeline e imprimimos nossos resultados.Clique em "Deploy " para garantir que nossas alterações tenham sido implantadas no ambiente de código. Depois que as alterações forem implantadas, clique em "Test." Obteremos um tamanho de amostra de cinco restaurantes americanos do Brooklyn como resultado em nosso console:
Nosso pipeline de agregação foi bem-sucedido!
Este tutorial forneceu experiência prática para conectar um banco de dados MongoDB Atlas ao AWS Lambda. Também demos uma visão interna de como escrever em um cluster a partir do Lambda, como ler informações de um pipeline de agregação e como configurar corretamente nossas dependências ao usar o Lambda. Esperemos que agora você esteja pronto para aproveitar o AWS Lambda e o MongoDB para criar os melhores aplicativos sem se preocupar com infraestrutura externa.
Se você leu este tutorial e gostaria de saber mais, confira nosso centro de programadores do MongoDB e nossocanal no YouTube.