为AWS SDK for Java 2.x 设置 AWS 区域 - AWS SDK for Java 2.x

为AWS SDK for Java 2.x 设置 AWS 区域

SDK 客户端会连接到您在创建客户端时指定的特定 AWS 区域中的 AWS 服务。借助此配置,您的应用程序可以与该地理区域中的 AWS 资源进行交互。当您在未明确设置区域的情况下创建服务客户端时,SDK 将使用外部配置中的默认区域。

显式配置 AWS 区域

要显式设置区域,建议您使用在 Region 类中定义的常量。这是所有公开可用区域的枚举。

要使用此类中的枚举区域创建客户端,请使用客户端生成器的 region 方法。

Ec2Client ec2 = Ec2Client.builder() .region(Region.US_WEST_2) .build();

如果您想要使用的区域不是 Region 类中的枚举之一,则可以使用静态 of 方法创建一个新区域。借助此方法,您可以访问新区域而无需升级 SDK。

Region newRegion = Region.of("us-east-42"); Ec2Client ec2 = Ec2Client.builder() .region(newRegion) .build();
注意

使用生成器所构建的客户端不可改变,而且 AWS 区域不能更改。如果您需要为同一项服务使用多个 AWS 区域,请创建多个客户端,即每个区域一个客户端。

让 SDK 根据环境自动确定默认 AWS 区域

当您的代码在 Amazon EC2 或 AWS Lambda 上运行时,您可能需要将客户端配置为与所运行代码使用同一个 AWS 区域。由此可以将代码从其运行的环境中脱离,更轻松地将应用程序部署到多个 AWS 区域,以减少延迟并保证冗余。

要使用默认的 AWS 区域提供程序链来根据环境确定区域,请使用客户端生成器的 create 方法。

Ec2Client ec2 = Ec2Client.create();

您也可以用其他方式配置客户端,但不能设置区域。SDK 使用默认区域提供程序链来获取 AWS 区域:

Ec2Client ec2Client = Ec2Client.builder() .credentialsProvider(ProfileCredentialsProvider.builder() .profileName("my-profile") .build()) .build();

如果您没有使用 region 方法显式设置 AWS 区域,SDK 将参考默认区域提供程序链来确定要使用的区域。

了解默认 AWS 区域提供程序链

SDK 采用以下步骤来查找 AWS 区域:

  1. 通过生成器本身使用 region 方法明确设置的所有区域优先于任何其他区域。

  2. SDK 会查找 JVM 系统属性 aws.region,如果找到则使用其值。

  3. 系统会检查 AWS_REGION 环境变量。如果已设置该变量,将使用对应区域配置客户端。

    注意

    该环境变量通过 Lambda 容器设置。

  4. SDK 会检查 AWS 共享配置和凭证文件中的活动配置文件。如果 region 属性存在,则 SDK 会使用该属性。

    除非被 AWS_PROFILE 环境变量或 aws.profile JVM 系统属性覆盖,否则 default 配置文件是活动配置文件。如果 SDK 在两个文件中找到同一个配置文件(包括 default 配置文件)的 region 属性,则 SDK 将使用共享凭证文件中的值。

  5. SDK 将尝试使用 Amazon EC2 实例元数据服务(IMDS),为当前运行的 Amazon EC2 实例确定区域。

    • 为了提高安全性,您应该禁止 SDK 尝试使用 IMDS 的版本 1。您可以使用 安全获取 IAM 角色凭证 部分中描述的相同设置来禁用版本 1。

  6. 如果 SDK 此时仍不能确定区域,客户端创建将失败并返回异常。

开发 AWS 应用程序的一个常用方法是,使用共享配置文件在本地开发时设置区域,而在 AWS 基础设施上运行应用程序时依赖默认区域提供程序链来确定区域。这可以明显简化客户端创建,并保证应用程序的便携性。

检查某项服务在某个区域内是否可用

要确认特定的 AWS 服务在某个区域内是否可用,请对服务客户端使用静态 serviceMetadata 方法:

DynamoDbClient.serviceMetadata().regions().forEach(System.out::println);

前面的代码段输出一长串带有 DynamoDB 服务的 AWS 区域代码:

af-south-1 ap-east-1 ap-northeast-1 ap-northeast-2 ap-northeast-3 ap-south-1 ap-south-2 ap-southeast-1 ...

您可以使用代码来查找您希望服务客户端使用的区域的区域类枚举

例如,如果您想在代码为 ap-northeast-2 的区域内使用 DynamoDB,请至少使用以下配置来创建 DynamoDB 客户端:

DynamoDbClient ddb = DynamoDbClient.builder() .region(Region.AP_NORTHEAST_2) .build();

选择特定端点

在某些情况下(例如在服务的预览功能正式发布之前进行测试),您可能需要在区域中指定特定端点。在这些情况下,可以通过调用 endpointOverride 方法配置服务客户端。

例如,要将 Amazon EC2 客户端配置为使用欧洲地区(爱尔兰)区域并指定特定端点,请使用以下代码。

Ec2Client ec2 = Ec2Client.builder() .region(Region.EU_WEST_1) .endpointOverride(URI.create("https://ec2.eu-west-1.amazonaws.com")) .build();

有关所有 AWS 服务的区域及其相应端点的最新列表,请参阅区域和端点