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 .

Junte-se a nós no Amazon Web Services re:Invent 2024! Saiba como usar o MongoDB para casos de uso de AI .
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Idiomaschevron-right
C#chevron-right

Interaja com o MongoDB Atlas em uma função do AWS Lambda usando C#

Hubert Nguyen5 min read • Published Mar 01, 2023 • Updated Jan 23, 2024
.NETAWSMongoDBC#
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty

Interaja com o MongoDB Atlas em uma função do AWS Lambda usando C#

O AWS Lambda é uma ótima opção para desenvolvedores C# que procuram uma solução sólida sem servidor com muitas opções de integração com o restante do ecossistema da AWS. Quando um banco de dados é necessário, a leitura e a gravação no MongoDB Atlas na velocidade da luz é fácil, pois os bancos de dados do Atlas podem ser instanciados no mesmo centro de dados que a função do AWS Lambda.
Neste tutorial, aprenderemos como criar uma função sem servidor C# que gerencia eficientemente o número de conexões do MongoDB Atlas para tornar sua função Lambda o mais escalável possível.

Os pré-requisitos

  • Conhecimento da linguagem de programação C#.
  • MongoDB Atlas cluster com dados de amostra, acesso à rede (firewall) e funções de usuário já configuradas.
  • Uma conta da Amazon Web Services (AWS) com um entendimento básico do AWS Lambda.
  • Visual Studio com o AWS Toolkit e os Lamda Templates instalados (tutorial oficial).

Criar e configurar seu banco de dados Atlas

Este tutorial passo a passo do MongoDB Atlas o orientará na criação de um banco de dados do Atlas (camada gratuita disponível) e no carregamento dos dados de amostra.
Já tem uma conta na AWS? O Atlas oferece suporte ao pagamento por uso por meio do AWS Marketplace (AWS MP) sem qualquer compromisso inicial — basta
Inscreva-se no MongoDB Atlas por meio do AWS Marketplace.
Abriremos o acesso à rede a qualquer IP recebido para manter este tutorial simples e fazer com que ele funcione com a camada gratuita do Atlas cluster. Veja como adicionar um IP ao seu projeto Atlas. Adicionando 0.0.0.0 significa que qualquer IP externo pode acessar seu cluster.
Em um ambiente de produção, você deve restringir o acesso e seguir as melhores práticas de segurança do MongoDB, incluindo o uso de emparelhamento de rede entre o AWS Lambda e o MongoDB Atlas. A camada do cluster gratuito não suporta emparelhamento.

Construa uma função AWS Lambda com C#

No Visual Studio, crie um projeto básico do AWS lambda usando o modelo de projeto "AWS Lambda Project (.NET Core - C#)" com o esquema da "Função vazia". Usaremos isso como base deste tutorial. Aqui está o tutorial oficial da AWS para criar esse projeto, mas essencialmente:
  1. Abra o Visual Studio e, no menu Arquivo, escolha Novo, Projeto.
  2. Crie um novo projeto "AWS Lambda Project (.NET Core - C#)".
  3. Chamaremos o projeto de "AWSLambda1."
Siga o tutorial oficial da AWS acima para garantir que você possa carregar o projeto no Lambda e que ele seja executado. Se sim, estamos prontos para fazer alterações para nos conectar ao MongoDB a partir do AWS Lambda!
Em nosso projeto, a classe principal é chamada Function. Ele será instanciado toda vez que a função Lambda for acionada. Dentro, temos um método chamado FunctionHandler, (Function:: FunctionHandler), que designaremos a Lambda como ponto de entrada.

Conectando-se ao MongoDB Atlas de uma função C# AWS Lambda

Para se conectar ao MongoDB, é necessário adicionar o pacote MongoDB.Driver (da MongoDB Inc) aos pacotes do seu projeto. Alt
Em seguida, adicione os seguintes namespaces na parte superior do seu arquivo de origem:
1using MongoDB.Bson;
2using MongoDB.Driver;
Na classe Function, declararemos um membro MongoClient estático. É fundamentaltê-lo como um membrostaticporque queremos compartilhá-lo em várias instâncias que o AWS Lambda poderia gerar.
Embora não tenhamos controle total ou visibilidade do ambiente sem servidor do Lambda, esta é a prática recomendada para manter o número de conexões de volta ao Atlas cluster no mínimo.
Se não declararmos MongoClient como static, cada instância de classe criará seu próprio conjunto de recursos. Em vez disso, o MongoClient estático é compartilhado entre várias instâncias de classe depois que uma primeira instância foi criada (início a quente). Você pode ler mais detalhes técnicos sobre o gerenciamento de conexões do MongoDB Atlas com o AWS Lambda.
Também adicionaremos um métodoCreateMongoClient() que inicializa o cliente MongoDB quando a classe é instanciada. Agora, as coisas devem ficar assim:
1public class Function
2{
3    private static MongoClient? Client;
4    private static MongoClient CreateMongoClient()
5    {
6            var mongoClientSettings = MongoClientSettings.FromConnectionString(Environment.GetEnvironmentVariable("MONGODB_URI"));
7            return new MongoClient(mongoClientSettings);
8    }
9
10    static Function()
11    {
12        Client = CreateMongoClient();
13    }
14...
15}
Para manter suas credenciais do MongoDB seguras, sua connection string pode ser armazenada em uma variável de ambiente Amazon Web Services Lambda . A connection string tem a seguinte aparência abaixo, e aqui está como obtê-la no Atlas.
mongodb+srv://USER:PASSWORD@INSTANCENAME.owdak.mongodb.net/?retryWrites=true&w=majority
Observação: o Visual Studio pode armazenar a cadeia de conexão com suas credenciais em um arquivo aws-lambda-tools-defaults.json em algum momento, portanto, não inclua isso em um repositório de código.
Se você quiser usar variáveis de ambiente na Ferramenta de Teste Mock Lambda, deverá criar um perfil específico da "Ferramenta de Teste Mock Lambda" com seu próprio conjunto de variáveis de ambiente no aws-lambda-tools-defaults.json (aqui está um exemplo).
Você pode saber mais sobre variáveis de ambiente do AWS Lambda. No entanto, esteja ciente de que essas variáveis podem ser definidas de dentro do seu Visual Studio ao publicar no AWS Lambda ou diretamente no console de gerenciamento da AWS em sua página de função do AWS Lambda.
Para fins de teste, e se você não quiser se dar ao trabalho, algumas pessoas codificam a connection string da seguinte forma:
1var mongoClientSettings = FromConnectionString("mongodb+srv://USER:PASSWORD@instancename.owdak.mongodb.net/?retryWrites=true&w=majority");
Por fim, podemos modificar a função FunctionHandler() para ler o primeiro documento de sample_airbnb.listingsAndReviews banco de dados e collection que pré-carregamos nos pré-requisitos.
As declarações try/catch não são obrigatórias, mas podem ajudar a detectar pequenos problemas, como o firewall que não está sendo configurado ou outros erros de configuração.
1public string FunctionHandler(string input, ILambdaContext context)
2{
3 if (Client != null)
4 {
5 try
6 {
7 var database = Client.GetDatabase("sample_airbnb");
8 var collection = database.GetCollection<BsonDocument>("listingsAndReviews");
9 var result = collection.Find(FilterDefinition<BsonDocument>.Empty).First();
10 return result.ToString();
11 }
12 catch
13 {
14 return "Handling failed";
15 }
16 } else
17 {
18 return "DB not initialized";
19 }
20}
Usando a collection "listingsAndReviews" (uma "tabela" no gíria SQL) no banco de dados "sample_airbnb", o código obtém o primeiro documento da collection.
collection.Find() normalmente usa uma query do MongoDB construída como um BsonDocument, mas, neste caso, precisamos apenas de uma query vazia.

Publicar na AWS e testar

É hora de carregá-lo no AWS Lambda. No Solution Explorer, clique com o botão direito do mouse no projeto e selecione "Publicar no AWS Lambda." Anteriormente, você pode ter feito isso ao configurar o projeto usando o tutorial oficial do AWS Lambda C#.
Alt
Se for a primeira vez que você publica essa função, reserve um tempo para dar um nome a ela (usamos " mongdb-csharp-function-001"). Ele será utilizado durante a criação inicial da função Lambda.
Na captura de tela abaixo, as informações do manipulador defunção do AWS Lambda ("Handler") são essenciais, pois informam ao Lambda qual método chamar quando um evento é acionado. O formato geral é Conjunto::Namespace.ClassName::MethodName
No nosso caso, o manipulador é AWSLambda1::AWSLambda1.Function::FunctionHandler.
Alt
Se a opção estiver marcada, esta caixa de diálogo salvará essas opções no arquivoaws-lambda-tools-defaults.json .
Clique em "Avançar" para ver a segunda tela de upload. O aspecto mais importante disso são as variáveis de ambiente, como a cadeia de conexão.
Quando estiver pronto, clique em "Upload". O Visual Studio criará/atualizará sua função do Lambda para a AWS e iniciará uma janela de teste na qual você poderá definir sua entrada de exemplo e executar o método para ver sua resposta.
Nossa função Lambda espera uma string de entrada, então usaremos a string "hello" em nossa Sample Input e, em seguida, clicaremos no botão "Invoke". A resposta da execução será enviada para o campo "Resposta" à direita. Como esperado, o primeiro registro do banco de dados é convertido em uma string, como mostrado abaixo.
Alt

Conclusão

Acabamos de aprender como criar uma função sem servidor C# AWS Lambda de forma eficiente criando e compartilhando um cliente MongoDB e conectando várias instâncias de classe. Se você está considerando construir com uma arquitetura sem servidor e AWS Lambda, o MongoDB Atlas é uma ótima opção.
A flexibilidade do nosso document model facilita o início rápido e a evolução da sua estrutura de dados ao longo do tempo. Crie um Atlas cluster gratuito agora para testá-lo.
Se você quiser saber mais sobre nosso driver C# do MongoDB, consulte a documentação atualizada continuamente. Você pode fazer muito mais com o MongoDB Atlas, e nosso Início Rápido em C# é um ótimo primeiro passo em sua viagem para o MongoDB.

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

Unindo coleções no MongoDB com .NET Core e um pipeline de agregação


Feb 03, 2023 | 7 min read
Tutorial

Tutorial do provedor MongoDB para o EF Core: criação de um aplicativo com CRUD e controle de alterações


Jan 24, 2024 | 18 min read
Artigo

Como configurar mapas de classes do MongoDB para C# para otimizar o desempenho de query e o tamanho de armazenamento


Aug 05, 2024 | 8 min read
Tutorial

Projetando e desenvolvendo níveis de jogos 2D com Unity e C#


Feb 03, 2023 | 7 min read
Sumário
  • Interaja com o MongoDB Atlas em uma função do AWS Lambda usando C#