

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

# 在代码中为 Rust 服务客户端配置 AWS SDK
<a name="config-code"></a>

当直接在代码中处理配置时，配置范围仅限于使用该代码的应用程序。在该应用程序中，您可选择以下配置方式：对所有服务客户端的全局配置、对某一特定 AWS 服务 类型所有客户端的配置，或对某个具体服务客户端实例的配置。

要向发出请求 AWS 服务，请先为该服务实例化客户端。您可以为服务客户端配置常用设置，例如超时、HTTP 客户端及重试配置。

每个服务客户端都需要一个 AWS 区域 和一个凭据提供商。SDK 使用这些值将您的资源请求发送到正确的区域，并使用正确的凭证对请求进行签名。您可以在代码中以编程方式指定这些值，也可以让它们从环境变量中自动加载。

**注意**  
服务客户端的构造成本可能很高，而且通常需要共享。为了便于实现这一点，所有 `Client` 结构体均实施 `Clone`。

## 从环境中配置客户端
<a name="configure-a-client-from-the-environment"></a>

要创建具有环境源配置的客户端，请使用 `aws-config` crate 中的静态方法：

```
let config = aws_config::defaults(BehaviorVersion::latest())
    .load()
    .await;

let s3 = aws_sdk_s3::Client::new(&config);
```

在 Amazon Elastic Compute Cloud 上运行时 AWS Lambda，或者在任何其他可以直接从环境中配置服务客户端的环境中运行时，以这种方式创建客户端非常有用。这样可以将您的代码与其运行的环境分离，并且可以更轻松地将您的应用程序部署到多个环境中， AWS 区域 而无需更改代码。

您可以显式覆盖特定属性。显式配置优先于从执行环境中解析的配置。以下示例从环境加载配置，但显式覆盖 AWS 区域：

```
let config = aws_config::defaults(BehaviorVersion::latest())
    .region("us-east-1")
    .load()
    .await;
    
let s3 = aws_sdk_s3::Client::new(&config);
```

**注意**  
并非所有配置值都是在创建时由客户端提供的。当使用客户端发出请求时，凭证提供程序层会访问与凭证相关的设置，例如临时访问密钥和 IAM Identity Center 配置。

前面示例中显示的代码 `BehaviorVersion::latest()` 指出了默认使用的 SDK 版本。`BehaviorVersion::latest()` 适用于大多数情况。有关更多信息，请参阅 [在中使用行为版本 适用于 Rust 的 AWS SDK](behavior-versions.md)。

## 使用生成器模式进行特定于服务的设置
<a name="configure-a-client-builder"></a>

有些选项只能在特定的服务客户端类型上配置。但是，大多数情况下，您仍然需要从环境中加载大部分配置，然后专门添加其他选项。建造者模式是 适用于 Rust 的 AWS SDK 箱子里常见的模式。您首先使用 `aws_config::defaults` 加载常规配置，然后使用 `from` 方法将该配置加载到您正在使用的服务的生成器中。然后，您可以为该服务设置任何唯一的配置值并调用 `build`。最后，根据此修改后的配置创建客户端。

```
// Call a static method on aws-config that sources default config values.
let config = aws_config::defaults(BehaviorVersion::latest())
    .load()
    .await;

// Use the Builder for S3 to create service-specific config from the default config.
let s3_config = aws_sdk_s3::config::Builder::from(&config)
    .accelerate(true) // Set an S3-only configuration option
    .build();

// Create the client.
let s3 = aws_sdk_s3::Client::from_conf(s3_config);
```

要发现特定类型服务客户端可用的其他方法，一种方法是使用 API 文档，例如 [https://docs.rs/aws-sdk-s3/latest/aws_sdk_s3/config/struct.Builder.html](https://docs.rs/aws-sdk-s3/latest/aws_sdk_s3/config/struct.Builder.html) 的文档。

## 高级显式客户端配置
<a name="configure-a-client-explicitly"></a>

要使用特定值配置服务客户端，而不是从环境中加载配置，您可以在客户端 `Config` 生成器上指定这些值，如下所示：

```
let conf = aws_sdk_s3::Config::builder()
    .region("us-east-1")
    .endpoint_resolver(my_endpoint_resolver)
    .build();

let s3 = aws_sdk_s3::Client::from_conf(conf);
```

使用 `aws_sdk_s3::Config::builder()` 创建服务配置时，*不会加载任何默认配置*。只有在基于 `aws_config::defaults` 创建配置时才会加载默认配置。

有些选项只能在特定的服务客户端类型上配置。前面的示例显示了如何在 Amazon S3 客户端上使用 `endpoint_resolver` 函数来实现这一点。