在代码中为AWS SDK for Java 2.x 配置服务客户端 - AWS SDK for Java 2.x

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

在代码中为AWS SDK for Java 2.x 配置服务客户端

除了(或作为替代方案)通过外部方式配置服务客户端之外,您还可以在代码中以编程方式对其进行配置。

通过在代码中配置服务客户端,您可以精细地控制许多可用的选项。可以通过外部方式设置的大多数配置也可以在代码中进行设置。

代码中的基本配置

例如,以下代码段在代码中为 Amazon S3 服务客户端将 AWS 区域设置为 EU_SOUTH_2

S3Client s3Client = S3Client.builder() .region(Region.EU_SOUTH_2) .build();

前面的代码段显示了静态工厂方法 builder()builder() 方法返回一个允许您自定义服务客户端的 builder 对象。fluent setter 方法会返回 builder 对象(在本例中为 S3ClientBuilder 实例),这样就可以将多个方法调用链式地写在一起,使代码更简洁、更易读。在配置了所需属性后,可以调用 build() 方法创建客户端。

代码中的高级配置

下面的代码段显示了额外配置选项:

ClientOverrideConfiguration clientOverrideConfiguration = ClientOverrideConfiguration.builder() .apiCallAttemptTimeout(Duration.ofSeconds(1)) .addMetricPublisher(CloudWatchMetricPublisher.create()) .build(); S3Client s3Client = S3Client.builder() .region(Region.EU_SOUTH_2) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .overrideConfiguration(clientOverrideConfiguration) .httpClientBuilder( ApacheHttpClient.builder() .maxConnections(100) .connectionTimeout(Duration.ofSeconds(5)) .proxyConfiguration(ProxyConfiguration.builder() .endpoint(URI.create("http://proxy:8080")) .build()) ).build();

在前面的代码段中,您可以看到配置服务客户端的几个入口点:

  • 提供所有服务客户端通用的配置选项的 ClientOverrideConfiguration.Builder 对象。这些设置是与任何 HTTP 实现无关的 AWS 特定行为。

  • 通过单独的 HTTP 客户端生成器实现来配置 HTTP 客户端。ApacheHttpClient.Builder 就是一个这样的例子。服务客户端提供 httpClientBuilder() 方法,将配置好的 HTTP 客户端关联到服务客户端。

  • 客户端生成器本身的方法,例如 region()credentialsProvider()

不是使用先创建单独的对象,然后再将对象传递给服务客户端这样的方法,AWS SDK for Java 2.x 提供的方法可接受 lambda 表达式来内联地构建这些对象。生成器上的配置方法名称相同,但具有不同的签名。例如:

前面所示的 S3 客户端配置,如果使用这种方法,可以用一个代码块来完成:

S3Client s3Client = S3Client.builder() .region(Region.EU_SOUTH_2) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .overrideConfiguration(b -> b .apiCallAttemptTimeout(Duration.ofSeconds(1)) .addMetricPublisher(CloudWatchMetricPublisher.create())) .httpClientBuilder(ApacheHttpClient.builder() .maxConnections(100) .connectionTimeout(Duration.ofSeconds(5)) .proxyConfiguration(ProxyConfiguration.builder() .endpoint(URI.create("http://proxy:8080")) .build())) .build();

代码中不可用的配置选项

由于以下设置会影响 SDK 中的基本初始化过程,因此只能通过外部方式而不能在代码中设置以下配置设置:

文件位置设置

这些设置控制共享配置和凭证文件的位置,在 SDK 加载这些设置后无法以编程方式对其进行覆盖:

  • AWS_CONFIG_FILE(环境变量)/aws.configFile(JVM 系统属性)

  • AWS_SHARED_CREDENTIALS_FILE(环境变量)/aws.sharedCredentialsFile(JVM 系统属性)

因为这些设置决定了 SDK 在哪里查找配置,所以必须在 SDK 加载配置文件之前进行设置。SDK 初始化完成后,更改这些值将不再生效。

实例元数据服务禁用

  • AWS_EC2_METADATA_DISABLED(环境变量)/aws.disableEc2Metadata(JVM 系统属性)

此设置用于控制 SDK 是否会尝试使用 EC2 实例元数据服务。SDK 初始化完成后,就无法以编程方式更改此设置。

配置文件选择

  • AWS_PROFILE(环境变量)/aws.profile(JVM 系统属性)

此设置告诉 SDK 从共享配置和凭证文件中加载哪个配置文件。加载后,更改此值将不再生效。

容器凭证路径

  • AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

  • AWS_CONTAINER_CREDENTIALS_FULL_URI

  • AWS_CONTAINER_AUTHORIZATION_TOKEN

  • AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE

使用这些环境变量告诉 SDK 如何从容器服务获取凭证。在服务客户端初始化期间建立凭证提供程序链后,无法再更改这些设置。

默认 HTTP 实现选择

  • SYNC_HTTP_SERVICE_IMPL(环境变量)/software.amazon.awssdk.http.service.impl(JVM 系统属性)

  • ASYNC_HTTP_SERVICE_IMPL(环境变量)/software.amazon.awssdk.http.async.service.impl(JVM 系统属性)

这些全局设置决定了 SDK 在所有服务客户端中默认使用哪个 HTTP 客户端实现,除非在代码中为单个服务客户端覆盖了该设置。您必须在 SDK 初始化其 HTTP 客户端之前进行设置,之后不能再更改。