自2024年7月31日起, AWS SDK for Java 1.x已进入维护模式,并将于2025年12月31日end-of-support
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS 区域 选择
区域使您能够访问实际位于特定地理区域的 AWS 服务。它可以用于保证冗余,并保证您的数据和应用程序接近您和用户访问它们的位置。
查看区域的服务可用性
要查看某个地区是否有特定 AWS 服务 内容可用,请在要使用的区域上使用isServiceSupported
方法。
Region.getRegion(Regions.US_WEST_2) .isServiceSupported(AmazonDynamoDB.ENDPOINT_PREFIX);
请参阅区域类文档查看可以指定的区域,并使用服务的终端节点前缀进行查询。在服务接口中定义了各服务的终端节点前缀。例如, DynamoDB 终端节点前缀是在AmazonDynamo数据库中定义的。
选择区域
从 1.4 版开始 AWS SDK for Java,您可以指定区域名称,SDK 将自动为您选择合适的终端节点。要自行选择终端节点,请参阅选择特定终端节点。
要显式设置区域时,我们建议您使用 Regions 枚举。这是所有公开可用区域的枚举。要使用枚举结果中的一个区域创建客户端,请使用以下代码。
AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard() .withRegion(Regions.US_WEST_2) .build();
如果 Regions
枚举结果不包含要使用的某个区域,可使用代表该区域名称的字符串。
AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard() .withRegion("{region_api_default}") .build();
注意
使用生成器所构建的客户端不可改变,而且不能更改区域。如果您要 AWS 区域 为同一服务使用多个客户端,则应创建多个客户端,每个区域一个。
选择特定终端节点
通过在创建 AWS 客户端时调用withEndpointConfiguration
方法,可以将每个客户端配置为使用区域内的特定终端节点。
例如,要将 Amazon S3 客户端配置为使用欧洲(爱尔兰)区域,请使用以下代码。
AmazonS3 s3 = AmazonS3ClientBuilder.standard() .withEndpointConfiguration(new EndpointConfiguration( "https://s3.eu-west-1.amazonaws.com", "eu-west-1")) .withCredentials(CREDENTIALS_PROVIDER) .build();
有关所有 AWS 服务的区域及其相应终端节点的当前列表,请参阅区域和终端节点。
根据环境自动确定区域
重要
本节仅在使用客户端生成器访问 AWS 服务时适用。 AWS 使用客户端构造函数创建的客户端不会自动从环境中确定区域,而是使用默认的 SDK 区域 (USEast1)。
在 Amazon EC2 或 Lambda 上运行时,您可能需要将客户端配置为使用与代码运行相同的区域。由此可以将代码从其运行的环境中脱离,更轻松地将应用程序部署到多个区域以减少延迟并保证冗余。
必须使用客户端生成器,使开发工具包可自动检测代码的运行区域。
要使用默认的凭证/区域提供程序链来根据环境确定区域,请使用客户端生成器的 defaultClient
方法:
AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient();
这与使用 standard
再加上 build
相同。
AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard() .build();
如果您没有使用 withRegion
方法明确设置一个区域,开发工具包将参考默认区域提供程序链来尝试并确定要使用的区域。
默认区域提供程序链
区域查找过程如下:
-
通过生成器本身使用
withRegion
或setRegion
明确设置的所有区域优先于其他所有区域。 -
系统会检查
AWS_REGION
环境变量。如果已设置该变量,将使用对应区域配置客户端。注意
此环境变量由 Lambda 容器设置。
-
SDK 会检查 AWS 共享的配置文件(通常位于
~/.aws/config
)。如果 region 属性存在,则开发工具包会使用它。-
AWS_CONFIG_FILE
环境变量可用于自定义共享配置文件的位置。 -
可以使用
AWS_PROFILE
环境变量或aws.profile
系统属性,自定义 SDK 要加载的配置文件。
-
-
SDK 尝试使用 Amazon EC2 实例元数据服务来确定当前正在运行的 Amazon EC2 实例的区域。
-
如果开发工具包此时仍不能确定区域,则客户端创建将失败并返回异常。
开发 AWS 应用程序时,常见的方法是使用共享配置文件(如使用默认凭证提供程序链中所述)来设置本地开发的区域,并在 AWS 基础设施上运行时依靠默认区域提供商链来确定区域。这可以明显简化客户端创建,并保证应用程序的便携性。