Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent;
import com.networknt.body.BodyHandler;
import com.networknt.config.Config;
import com.networknt.config.JsonMapper;
import com.networknt.handler.Handler;
Expand All @@ -25,11 +24,7 @@
import software.amazon.awssdk.http.nio.netty.NettyNioAsyncHttpClient;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.lambda.LambdaAsyncClient;
import software.amazon.awssdk.services.lambda.LambdaClient;
import software.amazon.awssdk.services.lambda.LambdaClientBuilder;
import software.amazon.awssdk.services.lambda.model.InvokeRequest;
import software.amazon.awssdk.services.lambda.model.InvokeResponse;
import software.amazon.awssdk.services.lambda.model.LambdaException;

import java.net.URI;
import java.time.Duration;
Expand All @@ -54,6 +49,9 @@ public LambdaFunctionHandler() {
.readTimeout(Duration.ofMillis(config.getApiCallAttemptTimeout()))
.writeTimeout(Duration.ofMillis(config.getApiCallAttemptTimeout()))
.connectionTimeout(Duration.ofMillis(config.getApiCallAttemptTimeout()))
.maxConcurrency(config.getMaxConcurrency())
.maxPendingConnectionAcquires(config.getMaxPendingConnectionAcquires())
.connectionAcquisitionTimeout(Duration.ofSeconds(config.getConnectionAcquisitionTimeout()))
.build();
ClientOverrideConfiguration overrideConfig = ClientOverrideConfiguration.builder()
.apiCallTimeout(Duration.ofMillis(config.getApiCallTimeout()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ public class LambdaInvokerConfig {
private static final String FUNCTIONS = "functions";
private static final String METRICS_INJECTION = "metricsInjection";
private static final String METRICS_NAME = "metricsName";
private static final String MAX_CONCURRENCY = "maxConcurrency";
private static final String MAX_PENDING_CONNECTION_ACQUIRES = "maxPendingConnectionAcquires";
private static final String CONNECTION_ACQUISITION_TIMEOUT = "connectionAcquisitionTimeout";

private String region;
private String endpointOverride;
Expand All @@ -31,6 +34,9 @@ public class LambdaInvokerConfig {
private Map<String, String> functions;
private boolean metricsInjection;
private String metricsName;
private int maxConcurrency;
private int maxPendingConnectionAcquires;
private int connectionAcquisitionTimeout;

public String getRegion() {
return region;
Expand Down Expand Up @@ -96,6 +102,30 @@ public void setMetricsName(String metricsName) {
this.metricsName = metricsName;
}

public int getMaxConcurrency() {
return maxConcurrency;
}

public void setMaxConcurrency(int maxConcurrency) {
this.maxConcurrency = maxConcurrency;
}

public int getMaxPendingConnectionAcquires() {
return maxPendingConnectionAcquires;
}

public void setMaxPendingConnectionAcquires(int maxPendingConnectionAcquires) {
this.maxPendingConnectionAcquires = maxPendingConnectionAcquires;
}

public int getConnectionAcquisitionTimeout() {
return connectionAcquisitionTimeout;
}

public void setConnectionAcquisitionTimeout(int connectionAcquisitionTimeout) {
this.connectionAcquisitionTimeout = connectionAcquisitionTimeout;
}

private final Config config;
private Map<String, Object> mappedConfig;

Expand All @@ -114,6 +144,7 @@ private LambdaInvokerConfig(String configName) {
setConfigData();
setConfigMap();
}

public static LambdaInvokerConfig load() {
return new LambdaInvokerConfig();
}
Expand All @@ -127,6 +158,7 @@ void reload() {
setConfigData();
setConfigMap();
}

public Map<String, Object> getMappedConfig() {
return mappedConfig;
}
Expand Down Expand Up @@ -160,6 +192,18 @@ private void setConfigData() {
if(object != null ) {
metricsName = (String)object;
}
object = mappedConfig.get(MAX_CONCURRENCY);
if (object != null) {
maxConcurrency = Config.loadIntegerValue(MAX_CONCURRENCY, object);
}
object = mappedConfig.get(MAX_PENDING_CONNECTION_ACQUIRES);
if (object != null) {
maxPendingConnectionAcquires = Config.loadIntegerValue(MAX_PENDING_CONNECTION_ACQUIRES, object);
}
object = mappedConfig.get(CONNECTION_ACQUISITION_TIMEOUT);
if (object != null) {
connectionAcquisitionTimeout = Config.loadIntegerValue(CONNECTION_ACQUISITION_TIMEOUT, object);
}
}

private void setConfigMap() {
Expand Down
6 changes: 6 additions & 0 deletions lambda-invoker/src/main/resources/config/lambda-invoker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ endpointOverride: ${lambda-invoker.endpointOverride:}
apiCallTimeout: ${lambda-invoker.apiCallTimeout:60000}
# Api call attempt timeout in milliseconds. This sets the amount of time for each individual attempt.
apiCallAttemptTimeout: ${lambda-invoker.apiCallAttemptTimeout:20000}
# The maximum number of concurrent requests that can be made to Lambda. Default is 50.
maxConcurrency: ${lambda-invoker.maxConcurrency:50}
# The maximum number of pending acquires allowed. Default is 10000.
maxPendingConnectionAcquires: ${lambda-invoker.maxPendingConnectionAcquires:10000}
# The amount of time to wait when acquiring a connection from the pool before timing out in seconds. Default is 10 seconds.
connectionAcquisitionTimeout: ${lambda-invoker.connectionAcquisitionTimeout:10}
# The LogType of the execution log of Lambda. Set Tail to include and None to not include.
logType: ${lambda-invoker.logType:Tail}
# mapping of the endpoints to Lambda functions. Define a list of functions in values.yml file.
Expand Down