|
22 | 22 | import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient;
|
23 | 23 | import software.amazon.awssdk.regions.Region;
|
24 | 24 | import software.amazon.awssdk.services.ssm.SsmClient;
|
| 25 | +import software.amazon.awssdk.services.ssm.SsmClientBuilder; |
25 | 26 | import software.amazon.awssdk.services.ssm.model.GetParameterRequest;
|
26 | 27 | import software.amazon.awssdk.services.ssm.model.GetParametersByPathRequest;
|
27 | 28 | import software.amazon.awssdk.services.ssm.model.GetParametersByPathResponse;
|
28 | 29 | import software.amazon.awssdk.utils.StringUtils;
|
| 30 | +import software.amazon.lambda.powertools.core.internal.LambdaConstants; |
29 | 31 | import software.amazon.lambda.powertools.parameters.cache.CacheManager;
|
30 | 32 | import software.amazon.lambda.powertools.parameters.transform.TransformationManager;
|
31 | 33 | import software.amazon.lambda.powertools.parameters.transform.Transformer;
|
32 | 34 |
|
| 35 | +import static software.amazon.lambda.powertools.core.internal.LambdaConstants.AWS_LAMBDA_INITIALIZATION_TYPE; |
| 36 | + |
33 | 37 | /**
|
34 | 38 | * AWS System Manager Parameter Store Provider <br/><br/>
|
35 | 39 | *
|
@@ -75,20 +79,6 @@ public class SSMProvider extends BaseProvider {
|
75 | 79 | private boolean decrypt = false;
|
76 | 80 | private boolean recursive = false;
|
77 | 81 |
|
78 |
| - /** |
79 |
| - * Default constructor with default {@link SsmClient}. <br/> |
80 |
| - * Use when you don't need to customize region or any other attribute of the client.<br/><br/> |
81 |
| - * <p> |
82 |
| - * Use the {@link SSMProvider.Builder} to create an instance of it. |
83 |
| - */ |
84 |
| - SSMProvider(CacheManager cacheManager) { |
85 |
| - this(cacheManager, SsmClient.builder() |
86 |
| - .httpClientBuilder(UrlConnectionHttpClient.builder()) |
87 |
| - .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) |
88 |
| - .region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable()))) |
89 |
| - .build()); |
90 |
| - } |
91 |
| - |
92 | 82 | /**
|
93 | 83 | * Constructor with custom {@link SsmClient}. <br/>
|
94 | 84 | * Use when you need to customize region or any other attribute of the client.<br/><br/>
|
@@ -253,11 +243,24 @@ public SSMProvider build() {
|
253 | 243 | throw new IllegalStateException("No CacheManager provided, please provide one");
|
254 | 244 | }
|
255 | 245 | SSMProvider provider;
|
256 |
| - if (client != null) { |
257 |
| - provider = new SSMProvider(cacheManager, client); |
258 |
| - } else { |
259 |
| - provider = new SSMProvider(cacheManager); |
| 246 | + if (client == null) { |
| 247 | + SsmClientBuilder ssmClientBuilder = SsmClient.builder() |
| 248 | + .httpClientBuilder(UrlConnectionHttpClient.builder()) |
| 249 | + .region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable()))); |
| 250 | + |
| 251 | + // AWS_LAMBDA_INITIALIZATION_TYPE has two values on-demand and snap-start |
| 252 | + // when using snap-start mode, the env var creds provider isn't used and causes a fatal error if set |
| 253 | + // fall back to the default provider chain if the mode is anything other than on-demand. |
| 254 | + String initializationType = System.getenv().get(AWS_LAMBDA_INITIALIZATION_TYPE); |
| 255 | + if (initializationType != null && initializationType.equals(LambdaConstants.ON_DEMAND)) { |
| 256 | + ssmClientBuilder.credentialsProvider(EnvironmentVariableCredentialsProvider.create()); |
| 257 | + } |
| 258 | + |
| 259 | + client = ssmClientBuilder.build(); |
260 | 260 | }
|
| 261 | + |
| 262 | + provider = new SSMProvider(cacheManager, client); |
| 263 | + |
261 | 264 | if (transformationManager != null) {
|
262 | 265 | provider.setTransformationManager(transformationManager);
|
263 | 266 | }
|
|
0 commit comments