Amazon Web Services 区域 为 Amazon SDK for Java 2.x - Amazon SDK for Java 2.x
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon Web Services 区域 为 Amazon SDK for Java 2.x

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

显式配置 Amazon Web Services 区域

要显式设置区域,建议您使用在 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();
注意

使用构建器构建客户端后,它是不可变的,并且 Amazon Web Services 区域 无法更改。如果您需要 Amazon Web Services 区域 为同一服务使用多个客户端,则应创建多个客户端,每个区域一个。

让 SDK 自动确定环境 Amazon Web Services 区域 中的默认值

当您的代码在 Amazon EC2 或上运行时 Amazon Lambda,您可能需要将客户端配置为使用与代码运行相同的 Amazon Web Services 区域 内容。这样可以将您的代码与其运行的环境分离,并且可以更轻松地将应用程序部署到多个 Amazon Web Services 区域 以降低延迟或冗余。

要使用默认 Amazon Web Services 区域 提供商链从环境中确定区域,请使用客户端生成器的create方法。

Ec2Client ec2 = Ec2Client.create();

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

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

如果您未使用该region方法明确设置,SDK 会咨询默认区域提供商链以确定要使用的区域。 Amazon Web Services 区域

了解默认 Amazon Web Services 区域 提供商链

SDK 采用以下步骤来查找 Amazon Web Services 区域:

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

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

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

    注意

    Lambda 容器设置此环境变量。

  4. SDK 会检查Amazon 共享配置文件和凭据文件中的活动配置文件。如果该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 此时仍不能确定区域,客户端创建将失败并返回异常。

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

查看某个地区是否有可用的服务

要查看某个区域中是否有特定 Amazon Web Services 服务 内容可用,请在服务客户端上使用静态serviceMetadata方法:

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

前面的代码段打印出了一长串带有 DynamoDB 服务的 Amazon Web Services 区域 代码:

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();

有关所有 Amazon 服务的区域及其相应终端节点的当前列表,请参阅区域和终端节点。