From c1210ea6ff8b79f80d3b52104c712513c82fc6b5 Mon Sep 17 00:00:00 2001 From: Alexander Sparkowsky Date: Thu, 20 Jul 2023 22:45:59 +0200 Subject: [PATCH 1/7] fix: use default credentials provider for all provided SDK clients --- .../core/internal/LambdaConstants.java | 2 - .../persistence/DynamoDBPersistenceStore.java | 27 ++++------- .../parameters/AppConfigProvider.java | 46 +++++++------------ .../parameters/DynamoDbProvider.java | 20 ++------ .../powertools/parameters/SSMProvider.java | 20 ++------ .../parameters/SecretsProvider.java | 19 ++------ 6 files changed, 35 insertions(+), 99 deletions(-) diff --git a/powertools-core/src/main/java/software/amazon/lambda/powertools/core/internal/LambdaConstants.java b/powertools-core/src/main/java/software/amazon/lambda/powertools/core/internal/LambdaConstants.java index bb5fc4666..b9a163227 100644 --- a/powertools-core/src/main/java/software/amazon/lambda/powertools/core/internal/LambdaConstants.java +++ b/powertools-core/src/main/java/software/amazon/lambda/powertools/core/internal/LambdaConstants.java @@ -16,8 +16,6 @@ public class LambdaConstants { public static final String LAMBDA_FUNCTION_NAME_ENV = "AWS_LAMBDA_FUNCTION_NAME"; public static final String AWS_REGION_ENV = "AWS_REGION"; - public static final String AWS_LAMBDA_INITIALIZATION_TYPE = "AWS_LAMBDA_INITIALIZATION_TYPE"; - public static final String ON_DEMAND = "on-demand"; public static final String X_AMZN_TRACE_ID = "_X_AMZN_TRACE_ID"; public static final String AWS_SAM_LOCAL = "AWS_SAM_LOCAL"; public static final String ROOT_EQUALS = "Root="; diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStore.java b/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStore.java index 6b5d0fcb2..63abbe4ce 100644 --- a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStore.java +++ b/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStore.java @@ -15,12 +15,16 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider; import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; -import software.amazon.awssdk.services.dynamodb.DynamoDbClientBuilder; -import software.amazon.awssdk.services.dynamodb.model.*; +import software.amazon.awssdk.services.dynamodb.model.AttributeValue; +import software.amazon.awssdk.services.dynamodb.model.ConditionalCheckFailedException; +import software.amazon.awssdk.services.dynamodb.model.DeleteItemRequest; +import software.amazon.awssdk.services.dynamodb.model.GetItemRequest; +import software.amazon.awssdk.services.dynamodb.model.GetItemResponse; +import software.amazon.awssdk.services.dynamodb.model.PutItemRequest; +import software.amazon.awssdk.services.dynamodb.model.UpdateItemRequest; import software.amazon.awssdk.utils.StringUtils; import software.amazon.lambda.powertools.idempotency.Constants; import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyItemAlreadyExistsException; @@ -34,10 +38,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import static software.amazon.lambda.powertools.core.internal.LambdaConstants.AWS_LAMBDA_INITIALIZATION_TYPE; import static software.amazon.lambda.powertools.core.internal.LambdaConstants.AWS_REGION_ENV; import static software.amazon.lambda.powertools.core.internal.LambdaConstants.LAMBDA_FUNCTION_NAME_ENV; -import static software.amazon.lambda.powertools.core.internal.LambdaConstants.ON_DEMAND; import static software.amazon.lambda.powertools.idempotency.persistence.DataRecord.Status.INPROGRESS; /** @@ -88,19 +90,10 @@ private DynamoDBPersistenceStore(String tableName, } else { String idempotencyDisabledEnv = System.getenv().get(Constants.IDEMPOTENCY_DISABLED_ENV); if (idempotencyDisabledEnv == null || idempotencyDisabledEnv.equalsIgnoreCase("false")) { - DynamoDbClientBuilder ddbBuilder = DynamoDbClient.builder() + this.dynamoDbClient = DynamoDbClient.builder() .httpClient(UrlConnectionHttpClient.builder().build()) - .region(Region.of(System.getenv(AWS_REGION_ENV))); - - // AWS_LAMBDA_INITIALIZATION_TYPE has two values on-demand and snap-start - // when using snap-start mode, the env var creds provider isn't used and causes a fatal error if set - // fall back to the default provider chain if the mode is anything other than on-demand. - String initializationType = System.getenv().get(AWS_LAMBDA_INITIALIZATION_TYPE); - if (initializationType != null && initializationType.equals(ON_DEMAND)) { - ddbBuilder.credentialsProvider(EnvironmentVariableCredentialsProvider.create()); - } - - this.dynamoDbClient = ddbBuilder.build(); + .region(Region.of(System.getenv(AWS_REGION_ENV))) + .build(); } else { // we do not want to create a DynamoDbClient if idempotency is disabled // null is ok as idempotency won't be called diff --git a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/AppConfigProvider.java b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/AppConfigProvider.java index e0255125d..a3b43054f 100644 --- a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/AppConfigProvider.java +++ b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/AppConfigProvider.java @@ -1,29 +1,24 @@ package software.amazon.lambda.powertools.parameters; -import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider; import software.amazon.awssdk.core.SdkSystemSetting; import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.appconfigdata.AppConfigDataClient; -import software.amazon.awssdk.services.appconfigdata.AppConfigDataClientBuilder; import software.amazon.awssdk.services.appconfigdata.model.GetLatestConfigurationRequest; import software.amazon.awssdk.services.appconfigdata.model.GetLatestConfigurationResponse; import software.amazon.awssdk.services.appconfigdata.model.StartConfigurationSessionRequest; -import software.amazon.lambda.powertools.core.internal.LambdaConstants; import software.amazon.lambda.powertools.parameters.cache.CacheManager; import software.amazon.lambda.powertools.parameters.transform.TransformationManager; import java.util.HashMap; import java.util.Map; -import static software.amazon.lambda.powertools.core.internal.LambdaConstants.AWS_LAMBDA_INITIALIZATION_TYPE; - /** * Implements a {@link ParamProvider} on top of the AppConfig service. AppConfig provides * a mechanism to retrieve and update configuration of applications over time. * AppConfig requires the user to create an application, environment, and configuration profile. * The configuration profile's value can then be retrieved, by key name, through this provider. - * + *

* Because AppConfig is designed to handle rollouts of configuration over time, we must first * establish a session for each key we wish to retrieve, and then poll the session for the latest * value when the user re-requests it. This means we must hold a keyed set of session tokens @@ -32,7 +27,7 @@ * @see Parameters provider documentation * @see AppConfig documentation */ -public class AppConfigProvider extends BaseProvider{ +public class AppConfigProvider extends BaseProvider { private static class EstablishedSession { private final String nextSessionToken; @@ -72,18 +67,18 @@ protected String getValue(String key) { // so that we can the initial token. If we already have a session, we can take // the next request token from there. EstablishedSession establishedSession = establishedSessions.getOrDefault(key, null); - String sessionToken = establishedSession != null? + String sessionToken = establishedSession != null ? establishedSession.nextSessionToken : client.startConfigurationSession(StartConfigurationSessionRequest.builder() - .applicationIdentifier(this.application) - .environmentIdentifier(this.environment) - .configurationProfileIdentifier(key) - .build()) - .initialConfigurationToken(); + .applicationIdentifier(this.application) + .environmentIdentifier(this.environment) + .configurationProfileIdentifier(key) + .build()) + .initialConfigurationToken(); // Get the configuration using the token GetLatestConfigurationResponse response = client.getLatestConfiguration(GetLatestConfigurationRequest.builder() - .configurationToken(sessionToken) + .configurationToken(sessionToken) .build()); // Get the next session token we'll use next time we are asked for this key @@ -92,11 +87,11 @@ protected String getValue(String key) { // Get the value of the key. Note that AppConfig will return null if the value // has not changed since we last asked for it in this session - in this case // we return the value we stashed at last request. - String value = response.configuration() != null? + String value = response.configuration() != null ? response.configuration().asUtf8String() : // if we have a new value, use it - establishedSession != null? - establishedSession.lastConfigurationValue : // if we don't but we have a previous value, use that - null; // otherwise we've got no value + establishedSession != null ? + establishedSession.lastConfigurationValue : // if we don't but we have a previous value, use that + null; // otherwise we've got no value // Update the cache so we can get the next value later establishedSessions.put(key, new EstablishedSession(nextSessionToken, value)); @@ -144,19 +139,10 @@ public AppConfigProvider build() { // Create a AppConfigDataClient if we haven't been given one if (client == null) { - AppConfigDataClientBuilder appConfigDataClientBuilder = AppConfigDataClient.builder() + client = AppConfigDataClient.builder() .httpClientBuilder(UrlConnectionHttpClient.builder()) - .region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable()))); - - // AWS_LAMBDA_INITIALIZATION_TYPE has two values on-demand and snap-start - // when using snap-start mode, the env var creds provider isn't used and causes a fatal error if set - // fall back to the default provider chain if the mode is anything other than on-demand. - String initializationType = System.getenv().get(AWS_LAMBDA_INITIALIZATION_TYPE); - if (initializationType != null && initializationType.equals(LambdaConstants.ON_DEMAND)) { - appConfigDataClientBuilder.credentialsProvider(EnvironmentVariableCredentialsProvider.create()); - } - - client = appConfigDataClientBuilder.build(); + .region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable()))) + .build(); } AppConfigProvider provider = new AppConfigProvider(cacheManager, client, environment, application); diff --git a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/DynamoDbProvider.java b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/DynamoDbProvider.java index 1b77aed88..e09f23348 100644 --- a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/DynamoDbProvider.java +++ b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/DynamoDbProvider.java @@ -1,17 +1,14 @@ package software.amazon.lambda.powertools.parameters; -import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider; import software.amazon.awssdk.core.SdkSystemSetting; import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; -import software.amazon.awssdk.services.dynamodb.DynamoDbClientBuilder; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.GetItemRequest; import software.amazon.awssdk.services.dynamodb.model.GetItemResponse; import software.amazon.awssdk.services.dynamodb.model.QueryRequest; import software.amazon.awssdk.services.dynamodb.model.QueryResponse; -import software.amazon.lambda.powertools.core.internal.LambdaConstants; import software.amazon.lambda.powertools.parameters.cache.CacheManager; import software.amazon.lambda.powertools.parameters.exception.DynamoDbProviderSchemaException; import software.amazon.lambda.powertools.parameters.transform.TransformationManager; @@ -20,8 +17,6 @@ import java.util.Map; import java.util.stream.Collectors; -import static software.amazon.lambda.powertools.core.internal.LambdaConstants.AWS_LAMBDA_INITIALIZATION_TYPE; - /** * Implements a {@link ParamProvider} on top of DynamoDB. The schema of the table * is described in the Powertools for AWS Lambda (Java) documentation. @@ -190,19 +185,10 @@ public DynamoDbProvider.Builder withTransformationManager(TransformationManager } private static DynamoDbClient createClient() { - DynamoDbClientBuilder dynamoDbClientBuilder = DynamoDbClient.builder() + return DynamoDbClient.builder() .httpClientBuilder(UrlConnectionHttpClient.builder()) - .region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable()))); - - // AWS_LAMBDA_INITIALIZATION_TYPE has two values on-demand and snap-start - // when using snap-start mode, the env var creds provider isn't used and causes a fatal error if set - // fall back to the default provider chain if the mode is anything other than on-demand. - String initializationType = System.getenv().get(AWS_LAMBDA_INITIALIZATION_TYPE); - if (initializationType != null && initializationType.equals(LambdaConstants.ON_DEMAND)) { - dynamoDbClientBuilder.credentialsProvider(EnvironmentVariableCredentialsProvider.create()); - } - - return dynamoDbClientBuilder.build(); + .region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable()))) + .build(); } } } diff --git a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/SSMProvider.java b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/SSMProvider.java index 2eb2d4199..1fa4dbaab 100644 --- a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/SSMProvider.java +++ b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/SSMProvider.java @@ -13,17 +13,14 @@ */ package software.amazon.lambda.powertools.parameters; -import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider; import software.amazon.awssdk.core.SdkSystemSetting; import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.ssm.SsmClient; -import software.amazon.awssdk.services.ssm.SsmClientBuilder; import software.amazon.awssdk.services.ssm.model.GetParameterRequest; import software.amazon.awssdk.services.ssm.model.GetParametersByPathRequest; import software.amazon.awssdk.services.ssm.model.GetParametersByPathResponse; import software.amazon.awssdk.utils.StringUtils; -import software.amazon.lambda.powertools.core.internal.LambdaConstants; import software.amazon.lambda.powertools.parameters.cache.CacheManager; import software.amazon.lambda.powertools.parameters.transform.TransformationManager; import software.amazon.lambda.powertools.parameters.transform.Transformer; @@ -32,8 +29,6 @@ import java.util.HashMap; import java.util.Map; -import static software.amazon.lambda.powertools.core.internal.LambdaConstants.AWS_LAMBDA_INITIALIZATION_TYPE; - /** * AWS System Manager Parameter Store Provider

* @@ -283,19 +278,10 @@ public SSMProvider.Builder withClient(SsmClient client) { } private static SsmClient createClient() { - SsmClientBuilder ssmClientBuilder = SsmClient.builder() + return SsmClient.builder() .httpClientBuilder(UrlConnectionHttpClient.builder()) - .region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable()))); - - // AWS_LAMBDA_INITIALIZATION_TYPE has two values on-demand and snap-start - // when using snap-start mode, the env var creds provider isn't used and causes a fatal error if set - // fall back to the default provider chain if the mode is anything other than on-demand. - String initializationType = System.getenv().get(AWS_LAMBDA_INITIALIZATION_TYPE); - if (initializationType != null && initializationType.equals(LambdaConstants.ON_DEMAND)) { - ssmClientBuilder.credentialsProvider(EnvironmentVariableCredentialsProvider.create()); - } - - return ssmClientBuilder.build(); + .region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable()))) + .build(); } /** diff --git a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/SecretsProvider.java b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/SecretsProvider.java index ea8b5a9d0..fd45da881 100644 --- a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/SecretsProvider.java +++ b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/SecretsProvider.java @@ -13,14 +13,11 @@ */ package software.amazon.lambda.powertools.parameters; -import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider; import software.amazon.awssdk.core.SdkSystemSetting; import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient; -import software.amazon.awssdk.services.secretsmanager.SecretsManagerClientBuilder; import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest; -import software.amazon.lambda.powertools.core.internal.LambdaConstants; import software.amazon.lambda.powertools.parameters.cache.CacheManager; import software.amazon.lambda.powertools.parameters.transform.TransformationManager; import software.amazon.lambda.powertools.parameters.transform.Transformer; @@ -30,7 +27,6 @@ import java.util.Map; import static java.nio.charset.StandardCharsets.UTF_8; -import static software.amazon.lambda.powertools.core.internal.LambdaConstants.AWS_LAMBDA_INITIALIZATION_TYPE; /** * AWS Secrets Manager Parameter Provider

@@ -191,19 +187,10 @@ public Builder withClient(SecretsManagerClient client) { } private static SecretsManagerClient createClient() { - SecretsManagerClientBuilder secretsManagerClientBuilder = SecretsManagerClient.builder() + return SecretsManagerClient.builder() .httpClientBuilder(UrlConnectionHttpClient.builder()) - .region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable()))); - - // AWS_LAMBDA_INITIALIZATION_TYPE has two values on-demand and snap-start - // when using snap-start mode, the env var creds provider isn't used and causes a fatal error if set - // fall back to the default provider chain if the mode is anything other than on-demand. - String initializationType = System.getenv().get(AWS_LAMBDA_INITIALIZATION_TYPE); - if (initializationType != null && initializationType.equals(LambdaConstants.ON_DEMAND)) { - secretsManagerClientBuilder.credentialsProvider(EnvironmentVariableCredentialsProvider.create()); - } - - return secretsManagerClientBuilder.build(); + .region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable()))) + .build(); } /** From ec2efab269f51f96e166ea82f0c494499004722b Mon Sep 17 00:00:00 2001 From: Alexander Sparkowsky Date: Fri, 21 Jul 2023 07:15:45 +0200 Subject: [PATCH 2/7] docs: revert accidential change --- .../amazon/lambda/powertools/parameters/AppConfigProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/AppConfigProvider.java b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/AppConfigProvider.java index a3b43054f..7054adff1 100644 --- a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/AppConfigProvider.java +++ b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/AppConfigProvider.java @@ -18,7 +18,7 @@ * a mechanism to retrieve and update configuration of applications over time. * AppConfig requires the user to create an application, environment, and configuration profile. * The configuration profile's value can then be retrieved, by key name, through this provider. - *

+ * * Because AppConfig is designed to handle rollouts of configuration over time, we must first * establish a session for each key we wish to retrieve, and then poll the session for the latest * value when the user re-requests it. This means we must hold a keyed set of session tokens From 2d027622eddcded166bce3d90daec8d13c348ced Mon Sep 17 00:00:00 2001 From: Alexander Sparkowsky Date: Fri, 21 Jul 2023 07:19:32 +0200 Subject: [PATCH 3/7] chore: revert accidential change --- .../parameters/AppConfigProvider.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/AppConfigProvider.java b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/AppConfigProvider.java index 7054adff1..bc66bb1e7 100644 --- a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/AppConfigProvider.java +++ b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/AppConfigProvider.java @@ -27,7 +27,7 @@ * @see Parameters provider documentation * @see AppConfig documentation */ -public class AppConfigProvider extends BaseProvider { +public class AppConfigProvider extends BaseProvider{ private static class EstablishedSession { private final String nextSessionToken; @@ -70,15 +70,15 @@ protected String getValue(String key) { String sessionToken = establishedSession != null ? establishedSession.nextSessionToken : client.startConfigurationSession(StartConfigurationSessionRequest.builder() - .applicationIdentifier(this.application) - .environmentIdentifier(this.environment) - .configurationProfileIdentifier(key) - .build()) - .initialConfigurationToken(); + .applicationIdentifier(this.application) + .environmentIdentifier(this.environment) + .configurationProfileIdentifier(key) + .build()) + .initialConfigurationToken(); // Get the configuration using the token GetLatestConfigurationResponse response = client.getLatestConfiguration(GetLatestConfigurationRequest.builder() - .configurationToken(sessionToken) + .configurationToken(sessionToken) .build()); // Get the next session token we'll use next time we are asked for this key @@ -89,9 +89,9 @@ protected String getValue(String key) { // we return the value we stashed at last request. String value = response.configuration() != null ? response.configuration().asUtf8String() : // if we have a new value, use it - establishedSession != null ? - establishedSession.lastConfigurationValue : // if we don't but we have a previous value, use that - null; // otherwise we've got no value + establishedSession != null ? + establishedSession.lastConfigurationValue : // if we don't but we have a previous value, use that + null; // otherwise we've got no value // Update the cache so we can get the next value later establishedSessions.put(key, new EstablishedSession(nextSessionToken, value)); From 8cf7f1295da29cbbc57881c29055f77ffc2d75d2 Mon Sep 17 00:00:00 2001 From: Alexander Sparkowsky Date: Fri, 21 Jul 2023 07:22:40 +0200 Subject: [PATCH 4/7] chore: revert accidential change --- .../lambda/powertools/parameters/AppConfigProvider.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/AppConfigProvider.java b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/AppConfigProvider.java index bc66bb1e7..c62d7a2e5 100644 --- a/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/AppConfigProvider.java +++ b/powertools-parameters/src/main/java/software/amazon/lambda/powertools/parameters/AppConfigProvider.java @@ -67,7 +67,7 @@ protected String getValue(String key) { // so that we can the initial token. If we already have a session, we can take // the next request token from there. EstablishedSession establishedSession = establishedSessions.getOrDefault(key, null); - String sessionToken = establishedSession != null ? + String sessionToken = establishedSession != null? establishedSession.nextSessionToken : client.startConfigurationSession(StartConfigurationSessionRequest.builder() .applicationIdentifier(this.application) @@ -87,9 +87,9 @@ protected String getValue(String key) { // Get the value of the key. Note that AppConfig will return null if the value // has not changed since we last asked for it in this session - in this case // we return the value we stashed at last request. - String value = response.configuration() != null ? + String value = response.configuration() != null? response.configuration().asUtf8String() : // if we have a new value, use it - establishedSession != null ? + establishedSession != null? establishedSession.lastConfigurationValue : // if we don't but we have a previous value, use that null; // otherwise we've got no value From f195206ae8d807789ac1a4edb25fc04cd093635b Mon Sep 17 00:00:00 2001 From: Alexander Sparkowsky Date: Fri, 21 Jul 2023 07:24:08 +0200 Subject: [PATCH 5/7] chore: revert accidential change --- .../idempotency/persistence/DynamoDBPersistenceStore.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStore.java b/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStore.java index 63abbe4ce..783b029bb 100644 --- a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStore.java +++ b/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStore.java @@ -18,13 +18,7 @@ import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; -import software.amazon.awssdk.services.dynamodb.model.AttributeValue; -import software.amazon.awssdk.services.dynamodb.model.ConditionalCheckFailedException; -import software.amazon.awssdk.services.dynamodb.model.DeleteItemRequest; -import software.amazon.awssdk.services.dynamodb.model.GetItemRequest; -import software.amazon.awssdk.services.dynamodb.model.GetItemResponse; -import software.amazon.awssdk.services.dynamodb.model.PutItemRequest; -import software.amazon.awssdk.services.dynamodb.model.UpdateItemRequest; +import software.amazon.awssdk.services.dynamodb.model.*; import software.amazon.awssdk.utils.StringUtils; import software.amazon.lambda.powertools.idempotency.Constants; import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyItemAlreadyExistsException; From 5851589ba9463494152eb7785493ba7f544e367b Mon Sep 17 00:00:00 2001 From: Alexander Sparkowsky Date: Fri, 21 Jul 2023 19:45:07 +0200 Subject: [PATCH 6/7] fix: revert public constants --- .../amazon/lambda/powertools/core/internal/LambdaConstants.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/powertools-core/src/main/java/software/amazon/lambda/powertools/core/internal/LambdaConstants.java b/powertools-core/src/main/java/software/amazon/lambda/powertools/core/internal/LambdaConstants.java index b9a163227..bb5fc4666 100644 --- a/powertools-core/src/main/java/software/amazon/lambda/powertools/core/internal/LambdaConstants.java +++ b/powertools-core/src/main/java/software/amazon/lambda/powertools/core/internal/LambdaConstants.java @@ -16,6 +16,8 @@ public class LambdaConstants { public static final String LAMBDA_FUNCTION_NAME_ENV = "AWS_LAMBDA_FUNCTION_NAME"; public static final String AWS_REGION_ENV = "AWS_REGION"; + public static final String AWS_LAMBDA_INITIALIZATION_TYPE = "AWS_LAMBDA_INITIALIZATION_TYPE"; + public static final String ON_DEMAND = "on-demand"; public static final String X_AMZN_TRACE_ID = "_X_AMZN_TRACE_ID"; public static final String AWS_SAM_LOCAL = "AWS_SAM_LOCAL"; public static final String ROOT_EQUALS = "Root="; From b6591f82b0e8f4008265bbf9c6c194046a1c9c20 Mon Sep 17 00:00:00 2001 From: Alexander Sparkowsky Date: Mon, 24 Jul 2023 08:00:50 +0200 Subject: [PATCH 7/7] docs: mark constants for initialization type as deprecated --- .../lambda/powertools/core/internal/LambdaConstants.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/powertools-core/src/main/java/software/amazon/lambda/powertools/core/internal/LambdaConstants.java b/powertools-core/src/main/java/software/amazon/lambda/powertools/core/internal/LambdaConstants.java index bb5fc4666..ea6a6ff44 100644 --- a/powertools-core/src/main/java/software/amazon/lambda/powertools/core/internal/LambdaConstants.java +++ b/powertools-core/src/main/java/software/amazon/lambda/powertools/core/internal/LambdaConstants.java @@ -16,7 +16,11 @@ public class LambdaConstants { public static final String LAMBDA_FUNCTION_NAME_ENV = "AWS_LAMBDA_FUNCTION_NAME"; public static final String AWS_REGION_ENV = "AWS_REGION"; + // Also you can use AWS_LAMBDA_INITIALIZATION_TYPE to distinguish between on-demand and SnapStart initialization + // it's not recommended to use this env variable to initialize SDK clients or other resources. + @Deprecated public static final String AWS_LAMBDA_INITIALIZATION_TYPE = "AWS_LAMBDA_INITIALIZATION_TYPE"; + @Deprecated public static final String ON_DEMAND = "on-demand"; public static final String X_AMZN_TRACE_ID = "_X_AMZN_TRACE_ID"; public static final String AWS_SAM_LOCAL = "AWS_SAM_LOCAL";