|
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