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

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

在中使用 Amazon 共享配置文件 Amazon SDK for Java 2.x

使用共享的 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. */