为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 区域:
-
通过生成器本身使用
region方法明确设置的所有区域优先于任何其他区域。 -
SDK 会查找 JVM 系统属性
aws.region,如果找到则使用其值。 -
系统会检查
AWS_REGION环境变量。如果已设置该变量,将使用对应区域配置客户端。注意
该环境变量通过 Lambda 容器设置。
-
SDK 会检查 AWS 共享配置和凭证文件中的活动配置文件。如果
region属性存在,则 SDK 会使用该属性。除非被
AWS_PROFILE环境变量或aws.profileJVM 系统属性覆盖,否则default配置文件是活动配置文件。如果 SDK 在两个文件中找到同一个配置文件(包括default配置文件)的region属性,则 SDK 将使用共享凭证文件中的值。 -
SDK 将尝试使用 Amazon EC2 实例元数据服务(IMDS),为当前运行的 Amazon EC2 实例确定区域。
-
为了提高安全性,您应该禁止 SDK 尝试使用 IMDS 的版本 1。您可以使用 安全获取 IAM 角色凭证 部分中描述的相同设置来禁用版本 1。
-
-
如果 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 服务的区域及其相应端点的最新列表,请参阅区域和端点。