From 433a51273bc8e4363bdea5a8952f489981b48998 Mon Sep 17 00:00:00 2001 From: DmitryLukyanov Date: Mon, 25 Apr 2022 20:22:34 +0400 Subject: [PATCH 1/4] CSHARP-4127: Language specific examples for AWS Lambda. --- .../AwsLambda/AwsLambdaExamples.cs | 86 +++++++++++++++++++ .../MongoDB.Driver.Examples.csproj | 5 ++ 2 files changed, 91 insertions(+) create mode 100644 tests/MongoDB.Driver.Examples/AwsLambda/AwsLambdaExamples.cs diff --git a/tests/MongoDB.Driver.Examples/AwsLambda/AwsLambdaExamples.cs b/tests/MongoDB.Driver.Examples/AwsLambda/AwsLambdaExamples.cs new file mode 100644 index 00000000000..514ebb7e160 --- /dev/null +++ b/tests/MongoDB.Driver.Examples/AwsLambda/AwsLambdaExamples.cs @@ -0,0 +1,86 @@ +/* Copyright 2010-present MongoDB Inc. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#if NETCOREAPP3_1_OR_GREATER +using Amazon.Lambda.Core; +using MongoDB.Driver; +using System; + +// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. +[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))] + +namespace LambdaTest +{ + public class ShareMongoClientLambdaHandler + { + // Start AWS Lambda Example 1 + private static MongoClient MongoClient { get; set; } + private static MongoClient CreateMongoClient() + { + var mongoClientSettings = MongoClientSettings.FromConnectionString($""); + mongoClientSettings.ServerApi = new ServerApi(ServerApiVersion.V1, strict: true); + return new MongoClient(mongoClientSettings); + } + + public ShareMongoClientLambdaHandler() + { + MongoClient = CreateMongoClient(); + } + + public string HandleRequest(ILambdaContext context) + { + var databases = MongoClient.ListDatabaseNames(); + return string.Join(",", databases); + } + // End AWS Lambda Example 1 + } + + public class ConnectUsingAwsIamAuthenticatorLambdaHandler + { + private static MongoClient MongoClient { get; set; } + private static MongoClient CreateMongoClient() + { + // Start AWS Lambda Example 2 + string username = Environment.GetEnvironmentVariable("AWS_ACCESS_KEY_ID"); + string password = Environment.GetEnvironmentVariable("AWS_SECRET_ACCESS_KEY"); + string awsSessionToken = Environment.GetEnvironmentVariable("AWS_SESSION_TOKEN"); + + var awsCredentials = + new MongoCredential("MONGODB-AWS", new MongoExternalIdentity(username), new PasswordEvidence(password)) + .WithMechanismProperty("AWS_SESSION_TOKEN", awsSessionToken); + + var mongoUrl = MongoUrl.Create($""); + + var mongoClientSettings = MongoClientSettings.FromUrl(mongoUrl); + mongoClientSettings.Credential = awsCredentials; + mongoClientSettings.ServerApi = new ServerApi(ServerApiVersion.V1, strict: true); + + return new MongoClient(mongoClientSettings); + // End AWS Lambda Example 2 + } + + public ConnectUsingAwsIamAuthenticatorLambdaHandler() + { + MongoClient = CreateMongoClient(); + } + + public string HandleRequest(ILambdaContext context) + { + var databases = MongoClient.ListDatabaseNames(); + return string.Join(",", databases); + } + } +} +#endif diff --git a/tests/MongoDB.Driver.Examples/MongoDB.Driver.Examples.csproj b/tests/MongoDB.Driver.Examples/MongoDB.Driver.Examples.csproj index 9739e79d355..45538596f57 100644 --- a/tests/MongoDB.Driver.Examples/MongoDB.Driver.Examples.csproj +++ b/tests/MongoDB.Driver.Examples/MongoDB.Driver.Examples.csproj @@ -42,6 +42,11 @@ + + + + + From 097a9a8a0f8eaa5729388bb82c9c1a802517253a Mon Sep 17 00:00:00 2001 From: DmitryLukyanov Date: Tue, 26 Apr 2022 18:30:19 +0400 Subject: [PATCH 2/4] CSHARP-4127: Use find instead ListDatabases. --- .../AwsLambda/AwsLambdaExamples.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tests/MongoDB.Driver.Examples/AwsLambda/AwsLambdaExamples.cs b/tests/MongoDB.Driver.Examples/AwsLambda/AwsLambdaExamples.cs index 514ebb7e160..b104797e823 100644 --- a/tests/MongoDB.Driver.Examples/AwsLambda/AwsLambdaExamples.cs +++ b/tests/MongoDB.Driver.Examples/AwsLambda/AwsLambdaExamples.cs @@ -15,6 +15,7 @@ #if NETCOREAPP3_1_OR_GREATER using Amazon.Lambda.Core; +using MongoDB.Bson; using MongoDB.Driver; using System; @@ -41,8 +42,10 @@ public ShareMongoClientLambdaHandler() public string HandleRequest(ILambdaContext context) { - var databases = MongoClient.ListDatabaseNames(); - return string.Join(",", databases); + var database = MongoClient.GetDatabase("db"); + var collection = database.GetCollection("coll"); + var result = collection.Find(FilterDefinition.Empty).First(); + return result.ToString(); } // End AWS Lambda Example 1 } @@ -78,8 +81,10 @@ public ConnectUsingAwsIamAuthenticatorLambdaHandler() public string HandleRequest(ILambdaContext context) { - var databases = MongoClient.ListDatabaseNames(); - return string.Join(",", databases); + var database = MongoClient.GetDatabase("db"); + var collection = database.GetCollection("coll"); + var result = collection.Find(FilterDefinition.Empty).First(); + return result.ToString(); } } } From 5fa4b01ca7b15fc26f64d58aa0f147fc457407d6 Mon Sep 17 00:00:00 2001 From: DmitryLukyanov Date: Tue, 17 May 2022 18:34:50 +0400 Subject: [PATCH 3/4] CSHARP-4127: Remove static modifiers for mongoClient --- .../AwsLambda/AwsLambdaExamples.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/MongoDB.Driver.Examples/AwsLambda/AwsLambdaExamples.cs b/tests/MongoDB.Driver.Examples/AwsLambda/AwsLambdaExamples.cs index b104797e823..e71a8490c81 100644 --- a/tests/MongoDB.Driver.Examples/AwsLambda/AwsLambdaExamples.cs +++ b/tests/MongoDB.Driver.Examples/AwsLambda/AwsLambdaExamples.cs @@ -27,8 +27,8 @@ namespace LambdaTest public class ShareMongoClientLambdaHandler { // Start AWS Lambda Example 1 - private static MongoClient MongoClient { get; set; } - private static MongoClient CreateMongoClient() + private MongoClient MongoClient { get; set; } + private MongoClient CreateMongoClient() { var mongoClientSettings = MongoClientSettings.FromConnectionString($""); mongoClientSettings.ServerApi = new ServerApi(ServerApiVersion.V1, strict: true); @@ -52,8 +52,8 @@ public string HandleRequest(ILambdaContext context) public class ConnectUsingAwsIamAuthenticatorLambdaHandler { - private static MongoClient MongoClient { get; set; } - private static MongoClient CreateMongoClient() + private MongoClient MongoClient { get; set; } + private MongoClient CreateMongoClient() { // Start AWS Lambda Example 2 string username = Environment.GetEnvironmentVariable("AWS_ACCESS_KEY_ID"); From f4205829fed286316c1bd1ddb7aaecc54bb301d6 Mon Sep 17 00:00:00 2001 From: DmitryLukyanov Date: Thu, 16 Jun 2022 19:28:36 +0400 Subject: [PATCH 4/4] CSHARP-4127: Make mongoClient static. --- .../AwsLambda/AwsLambdaExamples.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/MongoDB.Driver.Examples/AwsLambda/AwsLambdaExamples.cs b/tests/MongoDB.Driver.Examples/AwsLambda/AwsLambdaExamples.cs index e71a8490c81..364235db27a 100644 --- a/tests/MongoDB.Driver.Examples/AwsLambda/AwsLambdaExamples.cs +++ b/tests/MongoDB.Driver.Examples/AwsLambda/AwsLambdaExamples.cs @@ -27,15 +27,15 @@ namespace LambdaTest public class ShareMongoClientLambdaHandler { // Start AWS Lambda Example 1 - private MongoClient MongoClient { get; set; } - private MongoClient CreateMongoClient() + private static MongoClient MongoClient { get; set; } + private static MongoClient CreateMongoClient() { var mongoClientSettings = MongoClientSettings.FromConnectionString($""); mongoClientSettings.ServerApi = new ServerApi(ServerApiVersion.V1, strict: true); return new MongoClient(mongoClientSettings); } - public ShareMongoClientLambdaHandler() + static ShareMongoClientLambdaHandler() { MongoClient = CreateMongoClient(); } @@ -52,8 +52,8 @@ public string HandleRequest(ILambdaContext context) public class ConnectUsingAwsIamAuthenticatorLambdaHandler { - private MongoClient MongoClient { get; set; } - private MongoClient CreateMongoClient() + private static MongoClient MongoClient { get; set; } + private static MongoClient CreateMongoClient() { // Start AWS Lambda Example 2 string username = Environment.GetEnvironmentVariable("AWS_ACCESS_KEY_ID"); @@ -74,7 +74,7 @@ private MongoClient CreateMongoClient() // End AWS Lambda Example 2 } - public ConnectUsingAwsIamAuthenticatorLambdaHandler() + static ConnectUsingAwsIamAuthenticatorLambdaHandler() { MongoClient = CreateMongoClient(); }