

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定 AWS 區域 的 AWS SDK for Java 2.x
<a name="region-selection"></a>

SDK 用戶端會連接到 AWS 區域 您在建立用戶端時指定的特定 AWS 服務 中的 。此組態可讓您的應用程式與該 AWS 地理區域的資源互動。當您在不明確設定區域的情況下建立服務用戶端時，軟體開發套件會使用外部組態的預設區域。

## 明確設定 AWS 區域
<a name="region-selection-choose-region"></a>

若要明確設定區域，建議您使用[區域](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/regions/Region.html)類別中定義的常數。這是所有公開可用區域的列舉。

若要從 類別建立具有列舉區域的用戶端，請使用用戶端建置器的 `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 區域 針對相同的服務使用多個 ，您應該建立多個用戶端，每個區域一個。

## 讓軟體開發套件自動判斷 AWS 區域 環境中的預設值
<a name="automatically-determine-the-aws-region-from-the-environment"></a>

當您的程式碼在 Amazon EC2 或 上執行時 AWS Lambda，建議您將用戶端設定為使用與執行程式碼 AWS 區域 相同的 。這會將您的程式碼與執行環境分離，讓您更輕鬆地將應用程式部署到多個 ， AWS 區域 以降低延遲或備援。

若要使用預設 AWS 區域 提供者鏈從環境判斷區域，請使用用戶端建置器的 `create`方法。

```
Ec2Client ec2 = Ec2Client.create();
```

您也可以以其他方式設定用戶端，但無法設定區域。軟體開發套件 AWS 區域 會使用預設區域提供者鏈結來挑選 ：

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

如果您沒有使用 AWS 區域 `region`方法明確設定 ，軟體開發套件會諮詢預設區域提供者鏈結，以決定要使用的區域。

### 了解預設 AWS 區域 供應商鏈結
<a name="default-region-provider-chain"></a>

 **開發套件會採取下列步驟來尋找 AWS 區域：**

1. 在建置器本身上使用 `region`方法設定的任何明確區域優先於任何其他區域。

1. 開發套件會尋找 JVM 系統屬性，並在找到時使用`aws.region`其值。

1. 檢查 `AWS_REGION` 環境變數。如果已設定，則會使用該區域來設定用戶端。
**注意**  
 Lambda 容器會設定此環境變數。

1. SDK 會檢查[AWS 共用組態和登入資料檔案中](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)的作用中設定檔。如果 `region` 屬性存在，則 SDK 會使用它。

   除非被`AWS_PROFILE`環境變數或 `aws.profile` JVM 系統屬性覆寫，否則`default`設定檔是作用中的設定檔。如果 SDK 在相同描述檔 （包括`default`描述檔） 的兩個檔案中找到 `region` 屬性，則 SDK 會使用共用登入資料檔案中的值。

1. SDK 會嘗試使用 Amazon EC2 執行個體中繼資料服務 (IMDS) 來判斷目前執行 Amazon EC2 中執行個體的區域。
   + 為了提高安全性，您應該停用 SDK 以嘗試使用 IMDS 第 1 版。您可以使用相同的設定來停用第 1 版，如 [安全地取得 IAM 角色登入資料](ec2-iam-roles.md#securely-read-IAM-role_credentials)節所述。

1. 如果 SDK 目前仍未找到區域，則用戶端建立會失敗，但有例外狀況。

開發 AWS 應用程式時，常見的方法是使用*共用組態檔案*來設定區域以進行本機開發，並依賴預設區域提供者鏈來判斷應用程式在 AWS 基礎設施上執行時的區域。這可大幅簡化用戶端建立並讓您的應用程式保持可攜式。

## 檢查 區域中是否有可用的服務
<a name="region-selection-query-service"></a>

若要查看特定 AWS 服務 是否可在區域中使用，請在服務用戶端上使用靜態`serviceMetadata`方法：

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

先前的程式碼片段會列印 AWS 區域 出具有 DynamoDB 服務的長代碼清單：

```
af-south-1
ap-east-1
ap-northeast-1
ap-northeast-2
ap-northeast-3
ap-south-1
ap-south-2
ap-southeast-1
...
```

您可以使用程式碼來查詢您需要服務用戶端使用之[區域的 區域類別列舉](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/regions/Region.html)。

例如，如果您想要在 區域中使用代碼為 的 DynamoDB`ap-northeast-2`，請建立至少具有下列組態的 DynamoDB 用戶端：

```
DynamoDbClient ddb = DynamoDbClient.builder()
    .region(Region.AP_NORTHEAST_2)
    .build();
```

## 選擇特定端點
<a name="choosing-a-specific-endpoint"></a>

在某些情況下，例如在功能正式推出到一般可用性之前測試服務的預覽功能，您可能需要在區域中指定特定端點。在這些情況下，可以透過呼叫 `endpointOverride`方法來設定服務用戶端。

例如，若要將 Amazon EC2 用戶端設定為搭配特定端點使用歐洲 （愛爾蘭） 區域，請使用下列程式碼。

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

如需所有 AWS 服務的目前區域清單及其對應端點，請參閱[區域](https://docs.aws.amazon.com/general/latest/gr/rande.html)和端點。