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

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

使用配置文件

使用共享的 configcredentials 文件,您可以设置多个配置文件。这使您的应用程序能够使用多组凭证配置。前面提到的 [default] 配置文件。SDK 使用该ProfileCredentialsProvider类从共享credentials文件中定义的配置文件加载设置。

以下代码片演示如何使用名为 my_profile 的配置文件中定义的设置来生成服务客户端。

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

将另一个配置文件设置为默认配置文件

要将 [default] 配置文件以外的另一个配置文件设置为应用程序的默认配置文件,请将 AWS_PROFILE 环境变量设置为自定义配置文件的名称。

要在 Linux、macOS 或 Unix 上设置这些变量,请使用 export

export AWS_PROFILE="other_profile"

要在 Windows 上设置这些变量,请使用 set

set AWS_PROFILE="other_profile"

或者,将 aws.profile Java 系统属性设置为配置文件的名称。

重新加载配置文件凭证

对于其生成器上具有 profileFile() 方法的任何凭证提供程序,您都可以将其配置为能够重新加载配置文件凭证。这些凭证配置文件类是:ProfileCredentialsProviderDefaultCredentialsProviderInstanceProfileCredentialsProviderProfileTokenProvider.

注意

配置文件凭证的重新加载仅适用于配置文件中的以下设置:aws_access_key_idaws_secret_access_keyaws_session_token

诸如 regionsso_sessionsso_account_idsource_profile 之类的设置将被忽略。

要将支持的凭证提供程序配置为重新加载配置文件设置,请为 profileFile() 生成器方法提供一个 ProfileFileSupplier 实例。以下代码示例演示的 ProfileCredentialsProvider 将从 [default] 配置文件重新加载凭证设置。

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 的 SDK 会重新加载设置。ProfileFileSupplier.defaultSupplier() 是 SDK 提供的 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() 并且设置发生更改时,SDK 都会重新加载 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. */