software.amazon.awssdk.regions.Region Maven / Gradle / Ivy
/*
* Copyright 2019-2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
* the License. A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
* and limitations under the License.
*/
package software.amazon.awssdk.regions;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import software.amazon.awssdk.annotations.Generated;
import software.amazon.awssdk.annotations.SdkPublicApi;
import software.amazon.awssdk.utils.Validate;
import software.amazon.awssdk.utils.http.SdkHttpUtils;
/**
* An Amazon Web Services region that hosts a set of Amazon services.
*
* An instance of this class can be retrieved by referencing one of the static constants defined in this class (eg.
* {@link Region#US_EAST_1}) or by using the {@link Region#of(String)} method if the region you want is not included in
* this release of the SDK.
*
*
* Each AWS region corresponds to a separate geographical location where a set of Amazon services is deployed. These
* regions (except for the special {@link #AWS_GLOBAL} and {@link #AWS_CN_GLOBAL} regions) are separate from each other,
* with their own set of resources. This means a resource created in one region (eg. an SQS queue) is not available in
* another region.
*
*
* To programmatically determine whether a particular service is deployed to a region, you can use the
* {@code serviceMetadata} method on the service's client interface. Additional metadata about a region can be
* discovered using {@link RegionMetadata#of(Region)}.
*
*
* The {@link Region#id()} will be used as the signing region for all requests to AWS services unless an explicit region
* override is available in {@link RegionMetadata}. This id will also be used to construct the endpoint for accessing a
* service unless an explicit endpoint is available for that region in {@link RegionMetadata}.
*
*/
@SdkPublicApi
@Generated("software.amazon.awssdk:codegen")
public final class Region {
public static final Region AP_SOUTH_2 = Region.of("ap-south-2");
public static final Region AP_SOUTH_1 = Region.of("ap-south-1");
public static final Region EU_SOUTH_1 = Region.of("eu-south-1");
public static final Region EU_SOUTH_2 = Region.of("eu-south-2");
public static final Region US_GOV_EAST_1 = Region.of("us-gov-east-1");
public static final Region ME_CENTRAL_1 = Region.of("me-central-1");
public static final Region IL_CENTRAL_1 = Region.of("il-central-1");
public static final Region CA_CENTRAL_1 = Region.of("ca-central-1");
public static final Region EU_CENTRAL_1 = Region.of("eu-central-1");
public static final Region US_ISO_WEST_1 = Region.of("us-iso-west-1");
public static final Region EU_CENTRAL_2 = Region.of("eu-central-2");
public static final Region EU_ISOE_WEST_1 = Region.of("eu-isoe-west-1");
public static final Region US_WEST_1 = Region.of("us-west-1");
public static final Region US_WEST_2 = Region.of("us-west-2");
public static final Region AF_SOUTH_1 = Region.of("af-south-1");
public static final Region EU_NORTH_1 = Region.of("eu-north-1");
public static final Region EU_WEST_3 = Region.of("eu-west-3");
public static final Region EU_WEST_2 = Region.of("eu-west-2");
public static final Region EU_WEST_1 = Region.of("eu-west-1");
public static final Region AP_NORTHEAST_3 = Region.of("ap-northeast-3");
public static final Region AP_NORTHEAST_2 = Region.of("ap-northeast-2");
public static final Region AP_NORTHEAST_1 = Region.of("ap-northeast-1");
public static final Region ME_SOUTH_1 = Region.of("me-south-1");
public static final Region SA_EAST_1 = Region.of("sa-east-1");
public static final Region AP_EAST_1 = Region.of("ap-east-1");
public static final Region CN_NORTH_1 = Region.of("cn-north-1");
public static final Region CA_WEST_1 = Region.of("ca-west-1");
public static final Region US_GOV_WEST_1 = Region.of("us-gov-west-1");
public static final Region AP_SOUTHEAST_1 = Region.of("ap-southeast-1");
public static final Region AP_SOUTHEAST_2 = Region.of("ap-southeast-2");
public static final Region US_ISO_EAST_1 = Region.of("us-iso-east-1");
public static final Region AP_SOUTHEAST_3 = Region.of("ap-southeast-3");
public static final Region AP_SOUTHEAST_4 = Region.of("ap-southeast-4");
public static final Region AP_SOUTHEAST_5 = Region.of("ap-southeast-5");
public static final Region US_EAST_1 = Region.of("us-east-1");
public static final Region US_EAST_2 = Region.of("us-east-2");
public static final Region CN_NORTHWEST_1 = Region.of("cn-northwest-1");
public static final Region US_ISOB_EAST_1 = Region.of("us-isob-east-1");
public static final Region AWS_GLOBAL = Region.of("aws-global", true);
public static final Region AWS_CN_GLOBAL = Region.of("aws-cn-global", true);
public static final Region AWS_US_GOV_GLOBAL = Region.of("aws-us-gov-global", true);
public static final Region AWS_ISO_GLOBAL = Region.of("aws-iso-global", true);
public static final Region AWS_ISO_B_GLOBAL = Region.of("aws-iso-b-global", true);
private static final List REGIONS = Collections.unmodifiableList(Arrays.asList(AP_SOUTH_2, AP_SOUTH_1, EU_SOUTH_1,
EU_SOUTH_2, US_GOV_EAST_1, ME_CENTRAL_1, IL_CENTRAL_1, CA_CENTRAL_1, EU_CENTRAL_1, US_ISO_WEST_1, EU_CENTRAL_2,
EU_ISOE_WEST_1, US_WEST_1, US_WEST_2, AF_SOUTH_1, EU_NORTH_1, EU_WEST_3, EU_WEST_2, EU_WEST_1, AP_NORTHEAST_3,
AP_NORTHEAST_2, AP_NORTHEAST_1, ME_SOUTH_1, SA_EAST_1, AP_EAST_1, CN_NORTH_1, CA_WEST_1, US_GOV_WEST_1,
AP_SOUTHEAST_1, AP_SOUTHEAST_2, US_ISO_EAST_1, AP_SOUTHEAST_3, AP_SOUTHEAST_4, AP_SOUTHEAST_5, US_EAST_1, US_EAST_2,
CN_NORTHWEST_1, US_ISOB_EAST_1, AWS_GLOBAL, AWS_CN_GLOBAL, AWS_US_GOV_GLOBAL, AWS_ISO_GLOBAL, AWS_ISO_B_GLOBAL));
private final boolean isGlobalRegion;
private final String id;
private Region(String id, boolean isGlobalRegion) {
this.id = id;
this.isGlobalRegion = isGlobalRegion;
}
public static Region of(String value) {
return of(value, false);
}
private static Region of(String value, boolean isGlobalRegion) {
Validate.paramNotBlank(value, "region");
String urlEncodedValue = SdkHttpUtils.urlEncode(value);
return RegionCache.put(urlEncodedValue, isGlobalRegion);
}
public static List regions() {
return REGIONS;
}
public String id() {
return this.id;
}
public RegionMetadata metadata() {
return RegionMetadata.of(this);
}
public boolean isGlobalRegion() {
return isGlobalRegion;
}
@Override
public String toString() {
return id;
}
private static class RegionCache {
private static final ConcurrentHashMap VALUES = new ConcurrentHashMap<>();
private RegionCache() {
}
private static Region put(String value, boolean isGlobalRegion) {
return VALUES.computeIfAbsent(value, v -> new Region(value, isGlobalRegion));
}
}
}