

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

# 使用适用于 Rust 的 AWS SDK 发出 AWS 服务请求
<a name="make-request"></a>

 要以编程方式访问 AWS 服务，适用于 Rust 的 AWS SDK 对每个 AWS 服务使用一个客户端结构体。例如，如果您的应用程序需要访问 Amazon EC2，则您的应用程序会创建一个 Amazon EC2 客户端结构体来与该服务交互。然后，您可以使用服务客户端向该 AWS 服务 发出请求。

要向 AWS 服务发出请求，您必须先创建和[配置](configure.md)服务客户端。对于您的代码使用的每个 AWS 服务，它都有自己的 crate 和用于与之交互的专用类型。客户端为服务公开的每个 API 操作公开一种方法。

 要在适用于 Rust 的 AWS SDK 中与 AWS 服务交互，请创建一个特定于服务的客户端，使用其 API 方法和流畅的生成器式串接，并调用 `send()` 以执行请求。

`Client` 为服务公开的每个 API 操作公开一种方法。这些方法的返回值都是“fluent builder”，通过生成器式函数调用串接为该 API 添加不同的输入。调用服务的方法后，调用 `send()` 以获取 [https://doc.rust-lang.org/nightly/core/future/trait.Future.html](https://doc.rust-lang.org/nightly/core/future/trait.Future.html)，它将产生成功的输出或 `SdkError`。有关 `SdkError` 的更多信息，请参阅 [处理 Rust AWS 开发工具包中的错误](error-handling.md)。

以下示例展示了使用 Amazon S3 在 `us-west-2` AWS 区域创建存储桶的基本操作：

```
let config = aws_config::defaults(BehaviorVersion::latest())
    .load()
    .await;
  
let s3 = aws_sdk_s3::Client::new(&config);
  
let result = s3.create_bucket()
    // Set some of the inputs for the operation.
    .bucket("my-bucket")
    .create_bucket_configuration(
        CreateBucketConfiguration::builder()
            .location_constraint(aws_sdk_s3::types::BucketLocationConstraint::UsWest2)
            .build()
        )
    // send() returns a Future that does nothing until awaited.
    .send()
    .await;
```

每个服务 crate 都有其他用于 API 输入的模块，例如：
+ `types` 模块具有结构体或枚举来提供更复杂的结构化信息。
+  `primitives` 模块具有更简单的类型来表示数据，例如日期时间或二进制 blob。

 有关服务 crate 及 crate 组织的更详细信息，请参阅 [API 参考文档](https://awslabs.github.io/aws-sdk-rust/)。例如，Amazon Simple Storage Service 的 `aws-sdk-s3` crate 具有多个[模块](https://docs.rs/aws-sdk-s3/latest/aws_sdk_s3/#modules)。其中两个是：
+ [https://docs.rs/aws-sdk-s3/latest/aws_sdk_s3/types/index.html](https://docs.rs/aws-sdk-s3/latest/aws_sdk_s3/types/index.html)
+ [https://docs.rs/aws-sdk-s3/latest/aws_sdk_s3/primitives/index.html](https://docs.rs/aws-sdk-s3/latest/aws_sdk_s3/primitives/index.html)