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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS 区域 为 AWS SDK for Java 2.x

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方法明确设置,SDK 会咨询默认区域提供商链以确定要使用的区域。 AWS 区域

了解默认 AWS 区域 提供商链

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

  1. 通过在构建器本身上使用该region方法设置的任何显式 Region 都优先于其他任何区域。

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

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

    注意

    Lambda 容器设置此环境变量。

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

    除非被AWS_PROFILE环境变量或 aws.profile JVM 系统属性覆盖,否则该配置文件是活动配置文件。default如果 SDK 在两个文件中找到了相同配置文件(包括配置文件)的regiondefault属性,则 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 ...

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

例如,如果您想使用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 服务的区域及其相应终端节点的当前列表,请参阅区域和终端节点。