Skip to content

Commit 3594bbd

Browse files
fix: use default credentials provider for all provided SDK clients (#1303)
--------- Co-authored-by: Scott Gerring <[email protected]>
1 parent 4c42359 commit 3594bbd

File tree

6 files changed

+19
-83
lines changed

6 files changed

+19
-83
lines changed

powertools-core/src/main/java/software/amazon/lambda/powertools/core/internal/LambdaConstants.java

+4
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@
1616
public class LambdaConstants {
1717
public static final String LAMBDA_FUNCTION_NAME_ENV = "AWS_LAMBDA_FUNCTION_NAME";
1818
public static final String AWS_REGION_ENV = "AWS_REGION";
19+
// Also you can use AWS_LAMBDA_INITIALIZATION_TYPE to distinguish between on-demand and SnapStart initialization
20+
// it's not recommended to use this env variable to initialize SDK clients or other resources.
21+
@Deprecated
1922
public static final String AWS_LAMBDA_INITIALIZATION_TYPE = "AWS_LAMBDA_INITIALIZATION_TYPE";
23+
@Deprecated
2024
public static final String ON_DEMAND = "on-demand";
2125
public static final String X_AMZN_TRACE_ID = "_X_AMZN_TRACE_ID";
2226
public static final String AWS_SAM_LOCAL = "AWS_SAM_LOCAL";

powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStore.java

+3-16
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,9 @@
1515

1616
import org.slf4j.Logger;
1717
import org.slf4j.LoggerFactory;
18-
import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider;
1918
import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient;
2019
import software.amazon.awssdk.regions.Region;
2120
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
22-
import software.amazon.awssdk.services.dynamodb.DynamoDbClientBuilder;
2321
import software.amazon.awssdk.services.dynamodb.model.*;
2422
import software.amazon.awssdk.utils.StringUtils;
2523
import software.amazon.lambda.powertools.idempotency.Constants;
@@ -34,10 +32,8 @@
3432
import java.util.stream.Collectors;
3533
import java.util.stream.Stream;
3634

37-
import static software.amazon.lambda.powertools.core.internal.LambdaConstants.AWS_LAMBDA_INITIALIZATION_TYPE;
3835
import static software.amazon.lambda.powertools.core.internal.LambdaConstants.AWS_REGION_ENV;
3936
import static software.amazon.lambda.powertools.core.internal.LambdaConstants.LAMBDA_FUNCTION_NAME_ENV;
40-
import static software.amazon.lambda.powertools.core.internal.LambdaConstants.ON_DEMAND;
4137
import static software.amazon.lambda.powertools.idempotency.persistence.DataRecord.Status.INPROGRESS;
4238

4339
/**
@@ -88,19 +84,10 @@ private DynamoDBPersistenceStore(String tableName,
8884
} else {
8985
String idempotencyDisabledEnv = System.getenv().get(Constants.IDEMPOTENCY_DISABLED_ENV);
9086
if (idempotencyDisabledEnv == null || idempotencyDisabledEnv.equalsIgnoreCase("false")) {
91-
DynamoDbClientBuilder ddbBuilder = DynamoDbClient.builder()
87+
this.dynamoDbClient = DynamoDbClient.builder()
9288
.httpClient(UrlConnectionHttpClient.builder().build())
93-
.region(Region.of(System.getenv(AWS_REGION_ENV)));
94-
95-
// AWS_LAMBDA_INITIALIZATION_TYPE has two values on-demand and snap-start
96-
// when using snap-start mode, the env var creds provider isn't used and causes a fatal error if set
97-
// fall back to the default provider chain if the mode is anything other than on-demand.
98-
String initializationType = System.getenv().get(AWS_LAMBDA_INITIALIZATION_TYPE);
99-
if (initializationType != null && initializationType.equals(ON_DEMAND)) {
100-
ddbBuilder.credentialsProvider(EnvironmentVariableCredentialsProvider.create());
101-
}
102-
103-
this.dynamoDbClient = ddbBuilder.build();
89+
.region(Region.of(System.getenv(AWS_REGION_ENV)))
90+
.build();
10491
} else {
10592
// we do not want to create a DynamoDbClient if idempotency is disabled
10693
// null is ok as idempotency won't be called

powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/AppConfigProvider.java

+3-17
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,18 @@
11
package software.amazon.lambda.powertools.parameters;
22

3-
import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider;
43
import software.amazon.awssdk.core.SdkSystemSetting;
54
import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient;
65
import software.amazon.awssdk.regions.Region;
76
import software.amazon.awssdk.services.appconfigdata.AppConfigDataClient;
8-
import software.amazon.awssdk.services.appconfigdata.AppConfigDataClientBuilder;
97
import software.amazon.awssdk.services.appconfigdata.model.GetLatestConfigurationRequest;
108
import software.amazon.awssdk.services.appconfigdata.model.GetLatestConfigurationResponse;
119
import software.amazon.awssdk.services.appconfigdata.model.StartConfigurationSessionRequest;
12-
import software.amazon.lambda.powertools.core.internal.LambdaConstants;
1310
import software.amazon.lambda.powertools.parameters.cache.CacheManager;
1411
import software.amazon.lambda.powertools.parameters.transform.TransformationManager;
1512

1613
import java.util.HashMap;
1714
import java.util.Map;
1815

19-
import static software.amazon.lambda.powertools.core.internal.LambdaConstants.AWS_LAMBDA_INITIALIZATION_TYPE;
20-
2116
/**
2217
* Implements a {@link ParamProvider} on top of the AppConfig service. AppConfig provides
2318
* a mechanism to retrieve and update configuration of applications over time.
@@ -144,19 +139,10 @@ public AppConfigProvider build() {
144139

145140
// Create a AppConfigDataClient if we haven't been given one
146141
if (client == null) {
147-
AppConfigDataClientBuilder appConfigDataClientBuilder = AppConfigDataClient.builder()
142+
client = AppConfigDataClient.builder()
148143
.httpClientBuilder(UrlConnectionHttpClient.builder())
149-
.region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable())));
150-
151-
// AWS_LAMBDA_INITIALIZATION_TYPE has two values on-demand and snap-start
152-
// when using snap-start mode, the env var creds provider isn't used and causes a fatal error if set
153-
// fall back to the default provider chain if the mode is anything other than on-demand.
154-
String initializationType = System.getenv().get(AWS_LAMBDA_INITIALIZATION_TYPE);
155-
if (initializationType != null && initializationType.equals(LambdaConstants.ON_DEMAND)) {
156-
appConfigDataClientBuilder.credentialsProvider(EnvironmentVariableCredentialsProvider.create());
157-
}
158-
159-
client = appConfigDataClientBuilder.build();
144+
.region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable())))
145+
.build();
160146
}
161147

162148
AppConfigProvider provider = new AppConfigProvider(cacheManager, client, environment, application);

powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/DynamoDbProvider.java

+3-17
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
package software.amazon.lambda.powertools.parameters;
22

3-
import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider;
43
import software.amazon.awssdk.core.SdkSystemSetting;
54
import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient;
65
import software.amazon.awssdk.regions.Region;
76
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
8-
import software.amazon.awssdk.services.dynamodb.DynamoDbClientBuilder;
97
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
108
import software.amazon.awssdk.services.dynamodb.model.GetItemRequest;
119
import software.amazon.awssdk.services.dynamodb.model.GetItemResponse;
1210
import software.amazon.awssdk.services.dynamodb.model.QueryRequest;
1311
import software.amazon.awssdk.services.dynamodb.model.QueryResponse;
14-
import software.amazon.lambda.powertools.core.internal.LambdaConstants;
1512
import software.amazon.lambda.powertools.parameters.cache.CacheManager;
1613
import software.amazon.lambda.powertools.parameters.exception.DynamoDbProviderSchemaException;
1714
import software.amazon.lambda.powertools.parameters.transform.TransformationManager;
@@ -20,8 +17,6 @@
2017
import java.util.Map;
2118
import java.util.stream.Collectors;
2219

23-
import static software.amazon.lambda.powertools.core.internal.LambdaConstants.AWS_LAMBDA_INITIALIZATION_TYPE;
24-
2520
/**
2621
* Implements a {@link ParamProvider} on top of DynamoDB. The schema of the table
2722
* is described in the Powertools for AWS Lambda (Java) documentation.
@@ -190,19 +185,10 @@ public DynamoDbProvider.Builder withTransformationManager(TransformationManager
190185
}
191186

192187
private static DynamoDbClient createClient() {
193-
DynamoDbClientBuilder dynamoDbClientBuilder = DynamoDbClient.builder()
188+
return DynamoDbClient.builder()
194189
.httpClientBuilder(UrlConnectionHttpClient.builder())
195-
.region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable())));
196-
197-
// AWS_LAMBDA_INITIALIZATION_TYPE has two values on-demand and snap-start
198-
// when using snap-start mode, the env var creds provider isn't used and causes a fatal error if set
199-
// fall back to the default provider chain if the mode is anything other than on-demand.
200-
String initializationType = System.getenv().get(AWS_LAMBDA_INITIALIZATION_TYPE);
201-
if (initializationType != null && initializationType.equals(LambdaConstants.ON_DEMAND)) {
202-
dynamoDbClientBuilder.credentialsProvider(EnvironmentVariableCredentialsProvider.create());
203-
}
204-
205-
return dynamoDbClientBuilder.build();
190+
.region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable())))
191+
.build();
206192
}
207193
}
208194
}

powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/SSMProvider.java

+3-17
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,14 @@
1313
*/
1414
package software.amazon.lambda.powertools.parameters;
1515

16-
import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider;
1716
import software.amazon.awssdk.core.SdkSystemSetting;
1817
import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient;
1918
import software.amazon.awssdk.regions.Region;
2019
import software.amazon.awssdk.services.ssm.SsmClient;
21-
import software.amazon.awssdk.services.ssm.SsmClientBuilder;
2220
import software.amazon.awssdk.services.ssm.model.GetParameterRequest;
2321
import software.amazon.awssdk.services.ssm.model.GetParametersByPathRequest;
2422
import software.amazon.awssdk.services.ssm.model.GetParametersByPathResponse;
2523
import software.amazon.awssdk.utils.StringUtils;
26-
import software.amazon.lambda.powertools.core.internal.LambdaConstants;
2724
import software.amazon.lambda.powertools.parameters.cache.CacheManager;
2825
import software.amazon.lambda.powertools.parameters.transform.TransformationManager;
2926
import software.amazon.lambda.powertools.parameters.transform.Transformer;
@@ -32,8 +29,6 @@
3229
import java.util.HashMap;
3330
import java.util.Map;
3431

35-
import static software.amazon.lambda.powertools.core.internal.LambdaConstants.AWS_LAMBDA_INITIALIZATION_TYPE;
36-
3732
/**
3833
* AWS System Manager Parameter Store Provider <br/><br/>
3934
*
@@ -283,19 +278,10 @@ public SSMProvider.Builder withClient(SsmClient client) {
283278
}
284279

285280
private static SsmClient createClient() {
286-
SsmClientBuilder ssmClientBuilder = SsmClient.builder()
281+
return SsmClient.builder()
287282
.httpClientBuilder(UrlConnectionHttpClient.builder())
288-
.region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable())));
289-
290-
// AWS_LAMBDA_INITIALIZATION_TYPE has two values on-demand and snap-start
291-
// when using snap-start mode, the env var creds provider isn't used and causes a fatal error if set
292-
// fall back to the default provider chain if the mode is anything other than on-demand.
293-
String initializationType = System.getenv().get(AWS_LAMBDA_INITIALIZATION_TYPE);
294-
if (initializationType != null && initializationType.equals(LambdaConstants.ON_DEMAND)) {
295-
ssmClientBuilder.credentialsProvider(EnvironmentVariableCredentialsProvider.create());
296-
}
297-
298-
return ssmClientBuilder.build();
283+
.region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable())))
284+
.build();
299285
}
300286

301287
/**

powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/SecretsProvider.java

+3-16
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,11 @@
1313
*/
1414
package software.amazon.lambda.powertools.parameters;
1515

16-
import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider;
1716
import software.amazon.awssdk.core.SdkSystemSetting;
1817
import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient;
1918
import software.amazon.awssdk.regions.Region;
2019
import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;
21-
import software.amazon.awssdk.services.secretsmanager.SecretsManagerClientBuilder;
2220
import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest;
23-
import software.amazon.lambda.powertools.core.internal.LambdaConstants;
2421
import software.amazon.lambda.powertools.parameters.cache.CacheManager;
2522
import software.amazon.lambda.powertools.parameters.transform.TransformationManager;
2623
import software.amazon.lambda.powertools.parameters.transform.Transformer;
@@ -30,7 +27,6 @@
3027
import java.util.Map;
3128

3229
import static java.nio.charset.StandardCharsets.UTF_8;
33-
import static software.amazon.lambda.powertools.core.internal.LambdaConstants.AWS_LAMBDA_INITIALIZATION_TYPE;
3430

3531
/**
3632
* AWS Secrets Manager Parameter Provider<br/><br/>
@@ -191,19 +187,10 @@ public Builder withClient(SecretsManagerClient client) {
191187
}
192188

193189
private static SecretsManagerClient createClient() {
194-
SecretsManagerClientBuilder secretsManagerClientBuilder = SecretsManagerClient.builder()
190+
return SecretsManagerClient.builder()
195191
.httpClientBuilder(UrlConnectionHttpClient.builder())
196-
.region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable())));
197-
198-
// AWS_LAMBDA_INITIALIZATION_TYPE has two values on-demand and snap-start
199-
// when using snap-start mode, the env var creds provider isn't used and causes a fatal error if set
200-
// fall back to the default provider chain if the mode is anything other than on-demand.
201-
String initializationType = System.getenv().get(AWS_LAMBDA_INITIALIZATION_TYPE);
202-
if (initializationType != null && initializationType.equals(LambdaConstants.ON_DEMAND)) {
203-
secretsManagerClientBuilder.credentialsProvider(EnvironmentVariableCredentialsProvider.create());
204-
}
205-
206-
return secretsManagerClientBuilder.build();
192+
.region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable())))
193+
.build();
207194
}
208195

209196
/**

0 commit comments

Comments
 (0)