Core foundational library for AWS SDK for Java 1.x providing authentication, HTTP transport, regions, protocols, and shared utilities for all AWS service clients
—
The AWS Java SDK Core provides comprehensive region and endpoint management capabilities, including region enumeration, automatic region detection, and service endpoint resolution.
// AWS region representation
class Region {
public static Region getRegion(Regions region);
public String getName();
public String getDomain();
public String getPartition();
public boolean isServiceSupported(String serviceName);
public String getServiceEndpoint(String serviceName);
public boolean hasHttpsEndpoint(String serviceName);
public boolean hasHttpEndpoint(String serviceName);
public Collection<String> getAvailableEndpoints();
}
// Region enumeration with all AWS regions
enum Regions {
// US regions
US_EAST_1("us-east-1", "US East (N. Virginia)"),
US_EAST_2("us-east-2", "US East (Ohio)"),
US_WEST_1("us-west-1", "US West (N. California)"),
US_WEST_2("us-west-2", "US West (Oregon)"),
// Europe regions
EU_WEST_1("eu-west-1", "Europe (Ireland)"),
EU_WEST_2("eu-west-2", "Europe (London)"),
EU_WEST_3("eu-west-3", "Europe (Paris)"),
EU_CENTRAL_1("eu-central-1", "Europe (Frankfurt)"),
EU_NORTH_1("eu-north-1", "Europe (Stockholm)"),
EU_SOUTH_1("eu-south-1", "Europe (Milan)"),
// Asia Pacific regions
AP_NORTHEAST_1("ap-northeast-1", "Asia Pacific (Tokyo)"),
AP_NORTHEAST_2("ap-northeast-2", "Asia Pacific (Seoul)"),
AP_NORTHEAST_3("ap-northeast-3", "Asia Pacific (Osaka)"),
AP_SOUTHEAST_1("ap-southeast-1", "Asia Pacific (Singapore)"),
AP_SOUTHEAST_2("ap-southeast-2", "Asia Pacific (Sydney)"),
AP_SOUTH_1("ap-south-1", "Asia Pacific (Mumbai)"),
// Other regions
CA_CENTRAL_1("ca-central-1", "Canada (Central)"),
SA_EAST_1("sa-east-1", "South America (São Paulo)"),
AF_SOUTH_1("af-south-1", "Africa (Cape Town)"),
ME_SOUTH_1("me-south-1", "Middle East (Bahrain)"),
// China regions
CN_NORTH_1("cn-north-1", "China (Beijing)"),
CN_NORTHWEST_1("cn-northwest-1", "China (Ningxia)"),
// GovCloud regions
US_GOV_EAST_1("us-gov-east-1", "AWS GovCloud (US-East)"),
US_GOV_WEST_1("us-gov-west-1", "AWS GovCloud (US-West)");
public String getName();
public String getDescription();
public static Regions fromName(String regionName);
public static Regions getCurrentRegion();
}
// Region implementation interface
interface RegionImpl {
String getName();
String getDomain();
String getPartition();
boolean isServiceSupported(String serviceName);
String getServiceEndpoint(String serviceName);
boolean hasHttpsEndpoint(String serviceName);
boolean hasHttpEndpoint(String serviceName);
Collection<String> getAvailableEndpoints();
}
// In-memory region implementation
class InMemoryRegionImpl implements RegionImpl {
public InMemoryRegionImpl(String name, String domain);
public String getName();
public String getDomain();
public String getPartition();
public boolean isServiceSupported(String serviceName);
public String getServiceEndpoint(String serviceName);
public boolean hasHttpsEndpoint(String serviceName);
public boolean hasHttpEndpoint(String serviceName);
public Collection<String> getAvailableEndpoints();
}// Region utility methods
class RegionUtils {
// Get region by enum
public static Region getRegion(Regions region);
// Get region by name string
public static Region getRegion(String regionName);
// Get region from endpoint
public static Region getRegionByEndpoint(String endpoint);
// Get all available regions
public static List<Region> getRegions();
// Get regions for specific service
public static List<Region> getRegionsForService(String serviceName);
// Initialize regions from metadata
public static void initializeFromRegionProvider(RegionMetadataProvider regionMetadataProvider);
// Enable/disable region caching
public static void enableInMemoryCaching();
}// Region metadata container
class RegionMetadata {
public RegionMetadata(RegionMetadataProvider regionMetadataProvider);
public Region getRegion(String regionName);
public List<Region> getRegions();
public List<Region> getRegionsForService(String serviceName);
public String getPartitionForRegion(String regionName);
}
// Region metadata provider interface
interface RegionMetadataProvider {
Collection<Region> getRegions();
Region getRegion(String regionName);
List<Region> getRegionsForService(String serviceName);
}
// Abstract region metadata provider
abstract class AbstractRegionMetadataProvider implements RegionMetadataProvider {
public abstract Collection<Region> getRegions();
public Region getRegion(String regionName);
public List<Region> getRegionsForService(String serviceName);
}
// In-memory regions provider
class InMemoryRegionsProvider extends AbstractRegionMetadataProvider {
public InMemoryRegionsProvider(Collection<Region> regions);
public Collection<Region> getRegions();
}
// Region metadata factory
class RegionMetadataFactory {
public static RegionMetadata create();
public static RegionMetadata create(RegionMetadataProvider provider);
}
// Region metadata parser
class RegionMetadataParser {
public static RegionMetadata parse(String json);
public static RegionMetadata parse(InputStream inputStream);
public static RegionMetadata parse(File file);
}// Legacy region XML metadata builder
class LegacyRegionXmlMetadataBuilder {
public static void registerLegacyRegions();
public static RegionMetadata build();
}
// Legacy region XML loading utilities
class LegacyRegionXmlLoadUtils {
public static void load();
public static void load(String resourcePath);
public static void load(InputStream inputStream);
}// Base class for region providers
abstract class AwsRegionProvider {
public abstract String getRegion() throws SdkClientException;
}
// Region provider chain
class AwsRegionProviderChain extends AwsRegionProvider {
public AwsRegionProviderChain(AwsRegionProvider... providers);
public String getRegion() throws SdkClientException;
}
// Default region provider chain
class DefaultAwsRegionProviderChain extends AwsRegionProviderChain {
public static DefaultAwsRegionProviderChain getInstance();
public String getRegion() throws SdkClientException;
}// Environment variable region provider
class AwsEnvVarOverrideRegionProvider extends AwsRegionProvider {
public String getRegion() throws SdkClientException;
public String toString();
}
// System property region provider
class AwsSystemPropertyRegionProvider extends AwsRegionProvider {
public String getRegion() throws SdkClientException;
public String toString();
}
// AWS profile region provider
class AwsProfileRegionProvider extends AwsRegionProvider {
public AwsProfileRegionProvider();
public AwsProfileRegionProvider(String profileName);
public AwsProfileRegionProvider(String profilesConfigFilePath, String profileName);
public String getRegion() throws SdkClientException;
public String toString();
}
// EC2 instance metadata region provider
class InstanceMetadataRegionProvider extends AwsRegionProvider {
public static InstanceMetadataRegionProvider getInstance();
public InstanceMetadataRegionProvider();
public String getRegion() throws SdkClientException;
public String toString();
}// Maps endpoints to regions
class EndpointToRegion {
public static String guessRegionNameForEndpoint(String endpoint);
public static String guessRegionNameForEndpoint(String endpoint, String serviceName);
}
// Region from endpoint metadata provider
class MetadataSupportedRegionFromEndpointProvider extends AwsRegionProvider {
public MetadataSupportedRegionFromEndpointProvider();
public String getRegion() throws SdkClientException;
}import com.amazonaws.regions.*;
// Get region by enumeration
Region region = Region.getRegion(Regions.US_EAST_1);
// Get region by string name
Region regionByName = Region.getRegion("us-west-2");
// Get all available regions
List<Region> allRegions = RegionUtils.getRegions();
// Check if service is supported in region
boolean isSupported = region.isServiceSupported("s3");
// Get service endpoint for region
String s3Endpoint = region.getServiceEndpoint("s3");import com.amazonaws.regions.*;
// Use default region provider chain
DefaultAwsRegionProviderChain regionProvider =
DefaultAwsRegionProviderChain.getInstance();
try {
String regionName = regionProvider.getRegion();
Region region = Region.getRegion(regionName);
System.out.println("Detected region: " + regionName);
} catch (SdkClientException e) {
System.err.println("Could not determine region: " + e.getMessage());
// Fall back to default region
Region region = Region.getRegion(Regions.US_EAST_1);
}import com.amazonaws.regions.*;
// Create custom region provider chain
AwsRegionProviderChain customChain = new AwsRegionProviderChain(
new AwsEnvVarOverrideRegionProvider(), // Check AWS_REGION env var
new AwsSystemPropertyRegionProvider(), // Check aws.region system property
new AwsProfileRegionProvider("my-profile"), // Check specific profile
new InstanceMetadataRegionProvider() // Check EC2 metadata
);
try {
String regionName = customChain.getRegion();
Region region = Region.getRegion(regionName);
} catch (SdkClientException e) {
// Handle no region found
}import com.amazonaws.regions.*;
// Guess region from service endpoint
String endpoint = "s3.us-west-2.amazonaws.com";
String regionName = EndpointToRegion.guessRegionNameForEndpoint(endpoint, "s3");
Region region = Region.getRegion(regionName);
System.out.println("Detected region: " + regionName); // us-west-2import com.amazonaws.regions.*;
Region region = Region.getRegion(Regions.EU_WEST_1);
// Check service support
if (region.isServiceSupported("dynamodb")) {
String endpoint = region.getServiceEndpoint("dynamodb");
boolean hasHttps = region.hasHttpsEndpoint("dynamodb");
boolean hasHttp = region.hasHttpEndpoint("dynamodb");
System.out.println("DynamoDB endpoint: " + endpoint);
System.out.println("HTTPS supported: " + hasHttps);
System.out.println("HTTP supported: " + hasHttp);
}
// Get all available service endpoints in region
Collection<String> availableServices = region.getAvailableEndpoints();
for (String serviceName : availableServices) {
String endpoint = region.getServiceEndpoint(serviceName);
System.out.println(serviceName + ": " + endpoint);
}import com.amazonaws.regions.*;
import java.util.*;
// Create custom regions
Collection<Region> customRegions = new ArrayList<>();
customRegions.add(new InMemoryRegionImpl("custom-region-1", "custom.amazonaws.com"));
customRegions.add(new InMemoryRegionImpl("custom-region-2", "custom.amazonaws.com"));
// Create custom metadata provider
RegionMetadataProvider customProvider = new InMemoryRegionsProvider(customRegions);
// Initialize regions with custom provider
RegionUtils.initializeFromRegionProvider(customProvider);
// Use custom regions
Region customRegion = RegionUtils.getRegion("custom-region-1");AWS_REGION - The AWS region nameAWS_DEFAULT_REGION - Default region name (fallback)aws.region - The AWS region nameIn ~/.aws/config:
[default]
region = us-west-2
[profile production]
region = eu-west-1
[profile development]
region = us-east-1The DefaultAwsRegionProviderChain checks providers in this order:
AWS_REGION, AWS_DEFAULT_REGIONaws.regionAWS has multiple partitions with different domain structures:
amazonaws.com (most regions)amazonaws.com.cn (China regions)amazonaws.com (GovCloud regions)import com.amazonaws.regions.*;
Region region = Region.getRegion(Regions.CN_NORTH_1);
String partition = region.getPartition(); // "aws-cn"
String domain = region.getDomain(); // "amazonaws.com.cn"Use Default Region Provider Chain: Start with DefaultAwsRegionProviderChain.getInstance() for automatic region detection.
Environment-Based Configuration: Use environment variables or profiles for different deployment environments.
Region Validation: Always check if a service is supported in your target region using isServiceSupported().
Fallback Strategy: Have a fallback region in case automatic detection fails.
Service Endpoints: Use getServiceEndpoint() to get the correct endpoint for services in specific regions.
Cross-Region Considerations: Be aware of data transfer costs and latency when working across regions.
Government and China Regions: Special handling may be required for AWS GovCloud and China regions due to different partitions.
The region and endpoint resolution system provides flexible and automatic region detection, enabling applications to work seamlessly across different AWS regions and deployment environments.
Install with Tessl CLI
npx tessl i tessl/maven-com-amazonaws--aws-java-sdk-core