diff --git a/plugins/repository-s3/src/main/java/org/opensearch/repositories/s3/S3AsyncService.java b/plugins/repository-s3/src/main/java/org/opensearch/repositories/s3/S3AsyncService.java index 08215ebdd45e0..d22508b7de57a 100644 --- a/plugins/repository-s3/src/main/java/org/opensearch/repositories/s3/S3AsyncService.java +++ b/plugins/repository-s3/src/main/java/org/opensearch/repositories/s3/S3AsyncService.java @@ -60,7 +60,7 @@ class S3AsyncService implements Closeable { private static final String STS_ENDPOINT_OVERRIDE_SYSTEM_PROPERTY = "aws.stsEndpointOverride"; - private static final String DEFAULT_S3_ENDPOINT = "s3.amazonaws.com"; + private static final String GLOBAL_S3_ENDPOINT = "s3.amazonaws.com"; private volatile Map clientsCache = emptyMap(); @@ -174,7 +174,11 @@ synchronized AmazonAsyncS3WithCredentials buildClient( final AwsCredentialsProvider credentials = buildCredentials(logger, clientSettings); builder.credentialsProvider(credentials); - String endpoint = Strings.hasLength(clientSettings.endpoint) ? clientSettings.endpoint : DEFAULT_S3_ENDPOINT; + String s3Endpoint = Strings.hasText(clientSettings.region) + ? "s3." + Region.of(clientSettings.region).toString() + ".amazonaws.com" + : GLOBAL_S3_ENDPOINT; + + String endpoint = Strings.hasLength(clientSettings.endpoint) ? clientSettings.endpoint : s3Endpoint; if ((endpoint.startsWith("http://") || endpoint.startsWith("https://")) == false) { // Manually add the schema to the endpoint to work around https://github.com/aws/aws-sdk-java/issues/2274 endpoint = clientSettings.protocol.toString() + "://" + endpoint; diff --git a/plugins/repository-s3/src/main/java/org/opensearch/repositories/s3/S3Service.java b/plugins/repository-s3/src/main/java/org/opensearch/repositories/s3/S3Service.java index b13672b4179f8..688d42e3637fc 100644 --- a/plugins/repository-s3/src/main/java/org/opensearch/repositories/s3/S3Service.java +++ b/plugins/repository-s3/src/main/java/org/opensearch/repositories/s3/S3Service.java @@ -98,7 +98,7 @@ class S3Service implements Closeable { private static final String STS_ENDPOINT_OVERRIDE_SYSTEM_PROPERTY = "aws.stsEndpointOverride"; - private static final String DEFAULT_S3_ENDPOINT = "s3.amazonaws.com"; + private static final String GLOBAL_S3_ENDPOINT = "s3.amazonaws.com"; private volatile Map clientsCache = emptyMap(); @@ -204,7 +204,11 @@ AmazonS3WithCredentials buildClient(final S3ClientSettings clientSettings) { builder.httpClientBuilder(buildHttpClient(clientSettings)); builder.overrideConfiguration(buildOverrideConfiguration(clientSettings)); - String endpoint = Strings.hasLength(clientSettings.endpoint) ? clientSettings.endpoint : DEFAULT_S3_ENDPOINT; + String s3Endpoint = Strings.hasText(clientSettings.region) + ? "s3." + Region.of(clientSettings.region).toString() + ".amazonaws.com" + : GLOBAL_S3_ENDPOINT; + + String endpoint = Strings.hasLength(clientSettings.endpoint) ? clientSettings.endpoint : s3Endpoint; if ((endpoint.startsWith("http://") || endpoint.startsWith("https://")) == false) { // Manually add the schema to the endpoint to work around https://github.com/aws/aws-sdk-java/issues/2274 // TODO: Remove this once fixed in the AWS SDK