

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

# 创建服务客户端
<a name="creating-clients"></a>

要向发出请求 AWS 服务，必须先为该服务实例化客户端。

您可以为服务客户端配置常用设置，例如要使用的 HTTP 客户端、日志级别和重试配置。此外，每个服务客户端都需要一个 AWS 区域 和一个凭据提供程序。SDK 使用这些值向正确的区域发送请求，并使用正确的凭据对请求进行签名。

您可以在代码中以编程方式指定这些值，也可以让它们从环境变量中自动加载。

## 在代码中配置客户端
<a name="programmatic-config"></a>

要使用特定值配置服务客户端，可以在传递给服务客户端工厂方法的 lambda 函数中指定这些值，如以下代码段所示。

```
val dynamoDbClient = DynamoDbClient {
    region = "us-east-1"
    credentialsProvider = ProfileCredentialsProvider(profileName = "myprofile")
}
```

您未在配置块中指定的任何值都将设置为默认值。例如，如果您没有像前面的代码那样指定凭证提供程序，则凭证提供程序将默认为[默认的凭证提供程序链](credential-providers.md#default-credential-provider-chain)。

**警告**  
某些属性（例如）`region`没有默认值。使用编程配置时，必须在配置块中明确指定它们。如果 SDK 无法解析该属性，API 请求可能会失败。

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

创建服务客户端时，SDK 可以检查当前执行环境中的位置以确定某些配置属性。这些位置包括[共享配置和凭据文件](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)、[环境变量](https://docs.aws.amazon.com/sdkref/latest/guide/environment-variables.html)以及 [JVM 系统属性](https://docs.aws.amazon.com/sdkref/latest/guide/jvm-system-properties.html)。可供解析的属性包括[AWS 区域](region-selection.md)、[重试策略](retries.md)、[日志模式](logging.md#sdk-log-mode)等。有关 SDK 可以从执行环境中解析的所有设置的更多信息，请参阅[AWS SDKs 和工具设置参考指南](https://docs.aws.amazon.com/sdkref/latest/guide/settings-reference.html)。

要创建具有环境源配置的客户端，请在服务客户端界`suspend fun fromEnvironment()`面上使用静态方法：

```
val dynamoDbClient = DynamoDbClient.fromEnvironment()
```

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

此外，您可以通过将 lambda 块传递给来覆盖特定属性。`fromEnvironment`以下示例从环境（例如 Region）加载一些配置属性，但特别重写了证书提供者以使用配置文件中的证书。

```
val dynamoDbClient = DynamoDbClient.fromEnvironment { 
    credentialsProvider = ProfileCredentialsProvider(profileName = "myprofile")
}
```

对于任何无法通过编程设置或环境确定的配置属性，SDK 都使用默认值。例如，如果您没有在代码或环境设置中指定凭证提供程序，则凭证提供程序默认为[默认的凭证提供程序链](credential-providers.md#default-credential-provider-chain)。

**警告**  
某些属性（例如 “区域”）没有默认值。您必须在环境设置中或在配置块中明确指定它们。如果 SDK 无法解析该属性，API 请求可能会失败。

**注意**  
尽管可以在执行环境中找到与凭证相关的属性（例如临时访问密钥和 SSO 配置），但在创建时这些值并不是由客户端获取的。相反，凭证提供程序层会在每次请求时访问这些值。

## 关闭客户端
<a name="closing-the-client"></a>

当您不再需要服务客户端时，请将其关闭以释放它正在使用的任何资源：

```
val dynamoDbClient = DynamoDbClient.fromEnvironment()
// Invoke several DynamoDB operations.
dynamoDbClient.close()
```

由于服务客户端会扩展[https://docs.aws.amazon.com/smithy-kotlin/api/latest/runtime-core/aws.smithy.kotlin.runtime.io/-closeable/index.html](https://docs.aws.amazon.com/smithy-kotlin/api/latest/runtime-core/aws.smithy.kotlin.runtime.io/-closeable/index.html)接口，因此您可以使用[https://docs.aws.amazon.com/smithy-kotlin/api/latest/runtime-core/aws.smithy.kotlin.runtime.io/use.html](https://docs.aws.amazon.com/smithy-kotlin/api/latest/runtime-core/aws.smithy.kotlin.runtime.io/use.html)扩展程序在区块结束时自动关闭客户端，如以下代码段所示。

```
DynamoDbClient.fromEnvironment().use { dynamoDbClient ->
    // Invoke several DynamoDB operations.
}
```

在前面的示例中，lambda 块接收对刚刚创建的客户端的引用。您可以对此客户端引用调用操作，当区块完成时（包括抛出异常），客户端就会关闭。