|
22 | 22 | import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient;
|
23 | 23 | import software.amazon.awssdk.regions.Region;
|
24 | 24 | import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;
|
| 25 | +import software.amazon.awssdk.services.secretsmanager.SecretsManagerClientBuilder; |
25 | 26 | import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest;
|
26 | 27 | import software.amazon.lambda.powertools.parameters.cache.CacheManager;
|
27 | 28 | import software.amazon.lambda.powertools.parameters.transform.TransformationManager;
|
28 | 29 | import software.amazon.lambda.powertools.parameters.transform.Transformer;
|
29 | 30 |
|
30 | 31 | import static java.nio.charset.StandardCharsets.UTF_8;
|
| 32 | +import static software.amazon.lambda.powertools.core.internal.LambdaConstants.AWS_LAMBDA_INITIALIZATION_TYPE; |
31 | 33 |
|
32 | 34 | /**
|
33 | 35 | * AWS Secrets Manager Parameter Provider<br/><br/>
|
@@ -57,20 +59,6 @@ public class SecretsProvider extends BaseProvider {
|
57 | 59 |
|
58 | 60 | private final SecretsManagerClient client;
|
59 | 61 |
|
60 |
| - /** |
61 |
| - * Default constructor with default {@link SecretsManagerClient}. <br/> |
62 |
| - * Use when you don't need to customize region or any other attribute of the client.<br/><br/> |
63 |
| - * |
64 |
| - * Use the {@link Builder} to create an instance of it. |
65 |
| - */ |
66 |
| - SecretsProvider(CacheManager cacheManager) { |
67 |
| - this(cacheManager, SecretsManagerClient.builder() |
68 |
| - .httpClientBuilder(UrlConnectionHttpClient.builder()) |
69 |
| - .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) |
70 |
| - .region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable()))) |
71 |
| - .build()); |
72 |
| - } |
73 |
| - |
74 | 62 | /**
|
75 | 63 | * Constructor with custom {@link SecretsManagerClient}. <br/>
|
76 | 64 | * Use when you need to customize region or any other attribute of the client.<br/><br/>
|
@@ -162,11 +150,24 @@ public SecretsProvider build() {
|
162 | 150 | throw new IllegalStateException("No CacheManager provided, please provide one");
|
163 | 151 | }
|
164 | 152 | SecretsProvider provider;
|
165 |
| - if (client != null) { |
166 |
| - provider = new SecretsProvider(cacheManager, client); |
167 |
| - } else { |
168 |
| - provider = new SecretsProvider(cacheManager); |
| 153 | + if (client == null) { |
| 154 | + SecretsManagerClientBuilder secretsManagerClientBuilder = SecretsManagerClient.builder() |
| 155 | + .httpClientBuilder(UrlConnectionHttpClient.builder()) |
| 156 | + .region(Region.of(System.getenv(SdkSystemSetting.AWS_REGION.environmentVariable()))); |
| 157 | + |
| 158 | + // AWS_LAMBDA_INITIALIZATION_TYPE has two values on-demand and snap-start |
| 159 | + // when using snap-start mode, the env var creds provider isn't used and causes a fatal error if set |
| 160 | + // fall back to the default provider chain if the mode is anything other than on-demand. |
| 161 | + String initializationType = System.getenv().get(AWS_LAMBDA_INITIALIZATION_TYPE); |
| 162 | + if (initializationType != null && initializationType.equals("on-demand")) { |
| 163 | + secretsManagerClientBuilder.credentialsProvider(EnvironmentVariableCredentialsProvider.create()); |
| 164 | + } |
| 165 | + |
| 166 | + client = secretsManagerClientBuilder.build(); |
169 | 167 | }
|
| 168 | + |
| 169 | + provider = new SecretsProvider(cacheManager, client); |
| 170 | + |
170 | 171 | if (transformationManager != null) {
|
171 | 172 | provider.setTransformationManager(transformationManager);
|
172 | 173 | }
|
|
0 commit comments