

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

# AWS 区域 为 适用于 Rust 的 AWS SDK
<a name="region"></a>

您可以使用访问 AWS 服务 在特定地理区域运营的内容 AWS 区域。它可以用于保证冗余，并保证您的数据和应用程序接近您和用户访问它们的位置。有关如何使用区域的更多信息，请参阅*AWS SDKs 和工具参考指南[AWS 区域](https://docs.aws.amazon.com/sdkref/latest/guide/feature-region.html)*中的。

**重要**  
大多数资源都位于特定的区域 AWS 区域 ，在使用 SDK 时，您必须为该资源提供正确的区域。

你必须为 Rust AWS 区域 的 SDK 设置默认值才能用于 AWS 请求。此默认设置用于未指定区域的任何 SDK 服务方法调用。

有关如何通过共享 AWS `config`文件或环境变量设置默认区域的示例，请参阅*AWS SDKs 和工具参考指南[AWS 区域](https://docs.aws.amazon.com/sdkref/latest/guide/feature-region.html)*中的。

## AWS 区域 提供者链
<a name="region-provider-chain"></a>

 从执行环境加载服务客户端的配置时，将使用以下查找过程。SDK 找到的第一个已设置的值将用于客户端配置。有关创建服务客户端的更多信息，请参阅[从环境中配置客户端](config-code.md#configure-a-client-from-the-environment)。

1. 以编程方式设置显式区域。

1. 系统会检查 `AWS_REGION` 环境变量。
   + 如果您正在使用该 AWS Lambda 服务，则此环境变量由 AWS Lambda 容器自动设置。

1. 已选中共享 AWS `config`文件中的`region`属性。
   + `AWS_CONFIG_FILE` 环境变量可用于更改共享 `config` 文件的位置。要详细了解此文件的保存[位置，请参阅《工具参考指南》`config`和《工具参考指南》中的共享`credentials`文件AWS](https://docs.aws.amazon.com/sdkref/latest/guide/file-location.html)*SDKs 和*文件的位置。
   + `AWS_PROFILE` 环境变量可用于选择命名配置文件而不是默认配置文件。要了解有关配置不同配置文件的更多信息，请参阅[`config`和*工具参考指南中的共享AWS SDKs 和`credentials`*文件](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)。

1. SDK 将尝试使用 Amazon EC2 实例元数据服务，为当前运行的 Amazon EC2 实例确定区域。
   +  适用于 Rust 的 AWS SDK 唯一的支持 IMDSv2。

在创建与服务客户端一起使用的基本配置时，系统会自动使用 `RegionProviderChain`，无需额外的代码：

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

## 设置输入 AWS 区域 代码
<a name="RegionProgram"></a>

### 在代码中显式设置区域
<a name="RegionNew"></a>

如果要显式设置区域，请直接在配置中使用 `Region::new()`。

未使用区域提供程序链，不检查环境、共享 `config` 文件或 Amazon EC2 实例元数据服务。

```
use aws_config::{defaults, BehaviorVersion};
use aws_sdk_s3::config::Region;

#[tokio::main]
async fn main() {
    let config = defaults(BehaviorVersion::latest())
        .region(Region::new("us-west-2"))
        .load()
        .await;

    println!("Using Region: {}", config.region().unwrap());
}
```

请务必为输入有效的字符串 AWS 区域；所提供的值未经过验证。

### 自定义 `RegionProviderChain`
<a name="regionProviderChain"></a>

如果您想有条件地注入区域、覆盖它或自定义解析链，请使用[AWS 区域 提供者链](#region-provider-chain)。

```
use aws_config::{defaults, BehaviorVersion};
use aws_config::meta::region::RegionProviderChain;
use aws_sdk_s3::config::Region;
use std::env;

#[tokio::main]
async fn main() {  
    let region_provider = RegionProviderChain::first_try(env::var("CUSTOM_REGION").ok().map(Region::new))
        .or_default_provider()
        .or_else(Region::new("us-east-2"));
    
    let config = aws_config::defaults(BehaviorVersion::latest())
        .region(region_provider)
        .load()
        .await;

    println!("Using Region: {}", config.region().unwrap());
}
```

 之前的配置将：

1. 首先检查 `CUSTOM_REGION` 环境变量中是否设置了字符串。

1. 如果不可用，请回退到默认的区域提供程序链。

1. 如果失败了，请使用“us-east-2”作为最终回退选项。