

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

# 在 中使用 AWS 共用組態設定檔 AWS SDK for Java 2.x
<a name="credentials-profiles"></a>

您可以使用共用 `config`和 `credentials` 檔案來設定多個設定檔。這可讓您的應用程式使用多組登入資料組態。先前提到了`[default]`設定檔。SDK 使用 [ProfileCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/ProfileCredentialsProvider.html) 類別，從共用`credentials`檔案中定義的設定檔載入設定。

下列程式碼片段示範如何建置服務用戶端，使用在名為 的設定檔中定義的設定`my_profile`。

```
Region region = Region.US_WEST_2;
DynamoDbClient ddb = DynamoDbClient.builder()
      .region(region)
      .credentialsProvider(ProfileCredentialsProvider.create("my_profile"))
      .build();
```

## 將不同的設定檔設定為預設值
<a name="set-a-custom-profile-as-the-default"></a>

若要將設定檔以外的`[default]`設定檔設定為應用程式的預設值，請將`AWS_PROFILE`環境變數設定為自訂設定檔的名稱。

若要在 Linux、macOS 或 Unix 上設定此變數，請使用 `export`：

```
export AWS_PROFILE="other_profile"
```

若要在 Windows 上設定這些變數，請使用 `set`：

```
set AWS_PROFILE="other_profile"
```

或者，將 `aws.profile` Java 系統屬性設定為設定檔的名稱。

## 重新載入設定檔登入資料
<a name="profile-reloading"></a>

您可以設定在其建置器上具有 `profileFile()`方法的任何登入資料提供者，以重新載入設定檔登入資料。這些登入資料設定檔類別包括：`ProfileCredentialsProvider`、`InstanceProfileCredentialsProvider`、 `DefaultCredentialsProvider`和 `ProfileTokenProvider.`

**注意**  
設定檔登入資料重新載入僅適用於設定檔檔案中的下列設定：`aws_access_key_id`、 `aws_secret_access_key`和 `aws_session_token`。  
`source_profile` 會忽略 `region`、`sso_account_id`、 `sso_session`和 等設定。

若要設定支援的登入資料提供者重新載入設定檔設定，[https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/profiles/ProfileFileSupplier.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/profiles/ProfileFileSupplier.html)請將 執行個體提供給`profileFile()`建置器方法。下列程式碼範例示範從 `[default]` 設定檔`ProfileCredentialsProvider`重新載入登入資料設定的 。

```
ProfileCredentialsProvider provider = ProfileCredentialsProvider
    .builder()
    .profileFile(ProfileFileSupplier.defaultSupplier())
    .build();

// Set up a service client with the provider instance.
DynamoDbClient dynamoDbClient = DynamoDbClient.builder()
                    .region(Region.US_EAST_1)
                    .credentialsProvider(provider)
                    .build();

/*
    Before dynamoDbClient makes a request, it reloads the credentials settings 
    by calling provider.resolveCredentials().
*/
```

`ProfileCredentialsProvider.resolveCredentials()` 呼叫 時，適用於 Java 的 開發套件會重新載入設定。 `ProfileFileSupplier.defaultSupplier()`是 SDK [提供的數種便利實作](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/profiles/ProfileFileSupplier.html)之一。 `ProfileFileSupplier`如果您的使用案例需要，您可以提供自己的實作。

下列範例顯示使用 `ProfileFileSupplier.reloadWhenModified()` 便利方法。 `reloadWhenModified()`採用 `Path` 參數，可讓您靈活地指定組態的來源檔案，而非標準 `~/.aws/credentials`（或 `config`) 位置。

只有在 SDK 判斷檔案的內容已修改時，才會在`resolveCredentials()`呼叫 時重新載入設定。

```
Path credentialsFilePath = ...

ProfileCredentialsProvider provider = ProfileCredentialsProvider
    .builder()
    .profileFile(ProfileFileSupplier.reloadWhenModified(credentialsFilePath, ProfileFile.Type.CREDENTIALS))
    .profileName("my-profile")
    .build();
/*
    A service client configured with the provider instance calls provider.resolveCredential()
    before each request.
*/
```

`ProfileFileSupplier.aggregate()` 方法會合併多個組態檔案的內容。您可以決定是否在每次呼叫時重新載入檔案，`resolveCredentials()`或在第一次讀取時修正檔案的設定。

下列範例顯示的 `DefaultCredentialsProvider`會合併包含設定檔設定的兩個檔案的設定。開發套件會在每次呼叫 且設定已變更`resolveCredentials()`時，重新載入`credentialsFilePath`變數指向的 檔案中的設定。物件的設定`profileFile`保持不變。

```
Path credentialsFilePath = ...;
ProfileFile profileFile = ...;

DefaultCredentialsProvider provider = DefaultCredentialsProvider
        .builder()
        .profileFile(ProfileFileSupplier.aggregate(
                ProfileFileSupplier.reloadWhenModified(credentialsFilePath, ProfileFile.Type.CREDENTIALS),
                ProfileFileSupplier.fixedProfileFile(profileFile)))
        .profileName("my-profile")
        .build();
/*
    A service client configured with the provider instance calls provider.resolveCredential()
    before each request.
*/
```