Холодный пуск длится ок. 10 секунд, что для меня неприемлемо. Если лямбда повторно использует соединение, длительность уменьшается до 30 мс. Есть ли способ уменьшить время начального подключения?
Самая трудоемкая часть (6 секунд)
2020-08-04T20: 39: 45.004 + 02: 00 ИНФОРМАЦИЯ: com.mongodb.client.internal.MongoClientDelegate не выбран сервер из описания кластера ClusterDescription {type = REPLICA_SET, connectionMode = MULTIPLE, serverDescriptions = [ServerDescription {, type = UNKNOWN, state = CONNECTING}, ServerDescription {, type = НЕИЗВЕСТНО, состояние = СОЕДИНЕНИЕ}, ServerDescription {, тип = НЕИЗВЕСТНО, состояние = СОЕДИНЕНИЕ}]}. Ожидание 30000 мс перед истечением времени ожидания
2020-08-04T20: 39: 51.302 + 02: 00 4 августа 2020 г. 18:39:51 com.mongodb.diagnostics.logging. Журнал JULLogger
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
public class MongoDBConnectionLambdaHandler implements RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {
// declare MongoClient as an instance variable to ensure connection pooling
private MongoClient mongoClient = null;
@Override
public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent request, Context context) {
MongoDatabase database = getDBConnection(context);
APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent();
Document doc = database.getCollection(System.getenv("MONGO_DB_COLLECTION"))
.find()
.first();
response.setBody(doc == null ? null : doc.toJson());
response.setStatusCode(200);
return response;
}
private MongoDatabase getDBConnection(Context context) {
if (mongoClient == null) {
context.getLogger().log("Initializing new MongoDB connection");
mongoClient = MongoClients.create(System.getenv("MONGO_DB_URI"));
return mongoClient.getDatabase(System.getenv("MONGO_DB_NAME"));
}
context.getLogger().log("Reusing existing MongoDB connection");
return mongoClient.getDatabase(System.getenv("MONGO_DB_NAME"));
}
}