|
14 | 14 | import software.amazon.awssdk.core.ResponseBytes; |
15 | 15 | import software.amazon.awssdk.core.sync.RequestBody; |
16 | 16 | import software.amazon.awssdk.core.sync.ResponseTransformer; |
| 17 | +import software.amazon.awssdk.regions.Region; |
17 | 18 | import software.amazon.awssdk.services.s3.S3Client; |
18 | 19 | import software.amazon.awssdk.services.s3.model.*; |
19 | 20 |
|
20 | 21 | import java.io.IOException; |
| 22 | +import java.net.URI; |
21 | 23 | import java.nio.charset.StandardCharsets; |
22 | 24 | import java.util.Map; |
23 | 25 | import java.util.Optional; |
|
26 | 28 | public class AmazonS3InstallationService implements InstallationService { |
27 | 29 |
|
28 | 30 | private final String bucketName; |
29 | | - private AwsCredentialsProvider credentialsProvider; |
| 31 | + |
| 32 | + private final AwsCredentialsProvider credentialsProvider; |
| 33 | + private final Region region; |
| 34 | + private final URI endpointOverride; |
| 35 | + |
30 | 36 | private boolean historicalDataEnabled; |
31 | 37 |
|
32 | 38 | public AmazonS3InstallationService(String bucketName) { |
| 39 | + this(bucketName, DefaultCredentialsProvider.create(), null, null); |
| 40 | + } |
| 41 | + |
| 42 | + public AmazonS3InstallationService(String bucketName, AwsCredentialsProvider credentialsProvider) { |
| 43 | + this(bucketName, credentialsProvider, null, null); |
| 44 | + } |
| 45 | + |
| 46 | + public AmazonS3InstallationService( |
| 47 | + String bucketName, |
| 48 | + AwsCredentialsProvider credentialsProvider, |
| 49 | + Region region, |
| 50 | + String endpointOverride |
| 51 | + ) { |
33 | 52 | this.bucketName = bucketName; |
| 53 | + this.credentialsProvider = credentialsProvider; |
| 54 | + this.region = (region != null || System.getenv("AWS_REGION") == null) ? region : Region.of(System.getenv("AWS_REGION")); |
| 55 | + this.endpointOverride = (endpointOverride != null && !endpointOverride.isEmpty()) ? URI.create(endpointOverride) : null; |
34 | 56 | } |
35 | 57 |
|
36 | 58 | @Override |
37 | 59 | public Initializer initializer() { |
38 | 60 | return (app) -> { |
39 | 61 | // The first access to S3 tends to be slow on AWS Lambda. |
40 | | - this.credentialsProvider = DefaultCredentialsProvider.create(); |
41 | | - AwsCredentials credentials = createCredentials(credentialsProvider); |
| 62 | + AwsCredentials credentials = createCredentials(this.credentialsProvider); |
42 | 63 | if (credentials == null || credentials.accessKeyId() == null) { |
43 | 64 | throw new IllegalStateException("AWS credentials not found"); |
44 | 65 | } |
@@ -304,7 +325,11 @@ protected AwsCredentials createCredentials(AwsCredentialsProvider provider) { |
304 | 325 | } |
305 | 326 |
|
306 | 327 | protected S3Client createS3Client() { |
307 | | - return S3Client.builder().credentialsProvider(this.credentialsProvider).build(); |
| 328 | + return S3Client.builder() |
| 329 | + .credentialsProvider(this.credentialsProvider) |
| 330 | + .region(this.region) |
| 331 | + .endpointOverride(this.endpointOverride) |
| 332 | + .build(); |
308 | 333 | } |
309 | 334 |
|
310 | 335 | private String getInstallerKey(Installer i) { |
|
0 commit comments