

 适用于 Java 的 AWS SDK 1.x于2025年 end-of-support 12月31日达到。我们建议您迁移到 [AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html) 以继续获得新功能、可用性改进和安全更新。

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

# AWS 区域 选择
<a name="java-dg-region-selection"></a>

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

## 查看区域的服务可用性
<a name="region-selection-query-service"></a>

要查看某个地区是否有特定 AWS 服务 内容可用，请在要使用的区域上使用`isServiceSupported`方法。

```
Region.getRegion(Regions.US_WEST_2)
    .isServiceSupported(AmazonDynamoDB.ENDPOINT_PREFIX);
```

请参阅[区域](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/regions/Regions.html)类文档查看可以指定的区域，并使用服务的终端节点前缀进行查询。在服务接口中定义了各服务的终端节点前缀。例如， DynamoDB 终端节点前缀是在[AmazonDynamo数据库](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/AmazonDynamoDB.html)中定义的。

## 选择区域
<a name="region-selection-choose-region"></a>

从 1.4 版本开始 适用于 Java 的 AWS SDK，您可以指定区域名称，SDK 将自动为您选择合适的终端节点。要自行选择终端节点，请参阅[选择特定终端节点](#region-selection-choose-endpoint)。

要显式设置区域时，我们建议您使用 [Regions](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/regions/Regions.html) 枚举。这是所有公开可用区域的枚举。要使用枚举结果中的一个区域创建客户端，请使用以下代码。

```
AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard()
                    .withRegion(Regions.US_WEST_2)
                    .build();
```

如果 `Regions` 枚举结果不包含要使用的某个区域，可使用代表该区域名称的*字符串*。

```
AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard()
                    .withRegion("{region_api_default}")
                    .build();
```

**注意**  
使用生成器所构建的客户端*不可改变*，而且*不能更改*区域。如果您要 AWS 区域 为同一服务使用多个客户端，则应创建多个客户端，每个区域一个。

## 选择特定终端节点
<a name="region-selection-choose-endpoint"></a>

通过在创建 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 服务的[区域及其相应终端节点](https://docs.aws.amazon.com/general/latest/gr/rande.html)的当前列表，请参阅区域和终端节点。

## 根据环境自动确定区域
<a name="automatically-determine-the-aws-region-from-the-environment"></a>

**重要**  
本节仅在使用[客户端生成器](creating-clients.md)访问 AWS 服务时适用。 AWS 使用客户端构造函数创建的客户端不会自动从环境中确定区域，而是使用*默认*的 SDK 区域 (USEast1)。

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

 *必须使用客户端生成器，使开发工具包可自动检测代码的运行区域。*

要使用默认 credential/region 提供程序链从环境中确定区域，请使用客户端生成器的`defaultClient`方法。

```
AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient();
```

这与使用 `standard` 再加上 `build` 相同。

```
AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard()
                    .build();
```

如果您没有使用 `withRegion` 方法明确设置一个区域，开发工具包将参考默认区域提供程序链来尝试并确定要使用的区域。

### 默认区域提供程序链
<a name="default-region-provider-chain"></a>

 **区域查找过程如下：**

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

1. 系统会检查 `AWS_REGION` 环境变量。如果已设置该变量，将使用对应区域配置客户端。
**注意**  
此环境变量由 Lambda 容器设置。

1. SDK 会检查 AWS 共享配置文件（通常位于`~/.aws/config`）。如果 *region* 属性存在，则 SDK 会使用该属性。
   + `AWS_CONFIG_FILE` 环境变量可用于自定义共享配置文件的位置。
   + 可以使用 `AWS_PROFILE` 环境变量或 `aws.profile` 系统属性，自定义 SDK 要加载的配置文件。

1. SDK 尝试使用 Amazon EC2 实例元数据服务来确定当前正在运行的 Amazon EC2 实例的区域。

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

开发 AWS 应用程序时，常见的方法是使用*共享配置文件*（如[使用默认凭证提供程序链](credentials.md#credentials-default)中所述）来设置本地开发的区域，并在 AWS 基础设施上运行时依靠默认区域提供商链来确定区域。这可以明显简化客户端创建，并保证应用程序的便携性。