适用于 Java 的 AWS 开发工具包
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS 区域选择

使用区域可以访问实际位于特定地理区域的 AWS 服务。它可以用于保证冗余,并保证您的数据和应用程序接近您和用户访问它们的位置。

在 AWS SDK for Java 2.0 中,已将版本 1.x 中的所有其他区域相关的类折叠到一个 Region 类中。您可以将此类用于所有区域相关的操作,例如,检索有关区域的元数据或检查服务在区域中是否可用。

选择区域

您可以指定区域名称,开发工具包将自动为您选择适当的终端节点。

要显式设置区域,建议您使用在 Region 类中定义的常量。这是所有公开可用区域的枚举。要使用该类中的区域创建客户端,请使用以下代码。

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

如果您尝试使用的区域不是 Region 类中的常量之一,则可使用 of 方法创建一个新区域。可使用此功能访问新区域而无需升级开发工具包。

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

注意

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

选择特定终端节点

只需调用 endpointOverride 方法,即可将各个 AWS 客户端配置为使用一个区域内的特定终端节点

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

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

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

根据环境自动确定 AWS 区域

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

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

Ec2Client ec2 = Ec2Client.create();

如果您没有使用 region 方法显式设置区域,开发工具包将参考默认区域提供程序链来尝试并确定要使用的区域。

默认区域提供程序链

区域查找过程如下:

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

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

    注意

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

  3. 开发工具包将检查 AWS 共享配置文件 (通常位于 ~/.aws/config)。如果 region 属性存在,则开发工具包会使用它。

    • AWS_CONFIG_FILE 环境变量可用于自定义共享配置文件的位置。

    • 可以使用 AWS_PROFILE 环境变量或 aws.profile 系统属性来自定义开发工具包加载的配置文件。

  4. 开发工具包将尝试使用 Amazon EC2 实例元数据服务,为当前运行的 Amazon EC2 实例确定区域。

  5. 如果开发工具包此时仍不能确定区域,则客户端创建将失败并返回异常。

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

查看 AWS 区域的服务可用性

要确认特定的 AWS 服务在某个区域内是否可用,请对要检查的服务使用 serviceMetadataregion 方法。

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

请参阅 Region 类文档以了解可指定的区域,并使用服务的终端节点前缀进行查询。