为适用于 Rust 的 AWS SDK 设置 AWS 区域 - 适用于 Rust 的 AWS SDK

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

为适用于 Rust 的 AWS SDK 设置 AWS 区域

您可以使用 AWS 区域访问在特定地理区域运营的 AWS 服务。它可以用于保证冗余,并保证您的数据和应用程序接近您和用户访问它们的位置。有关如何使用区域的更多信息,请参阅《AWS SDK 和工具参考指南》中的 AWS 区域

重要

大多数资源都位于特定的 AWS 区域,在使用 SDK 时,您必须提供资源所在的正确区域。

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

有关如何通过共享 AWS config 文件或环境变量设置默认区域的示例,请参阅《AWS SDK 和工具参考指南》中的 AWS 区域

AWS 区域提供程序链

从执行环境加载服务客户端的配置时,将使用以下查找过程。SDK 找到的第一个已设置的值将用于客户端配置。有关创建服务客户端的更多信息,请参阅从环境中配置客户端

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

  2. 系统会检查 AWS_REGION 环境变量。

    • 如果您使用的是 AWS Lambda 服务,则此环境变量由 AWS Lambda 容器自动设置。

  3. 检查共享 AWS config 文件中是否存在 region 属性。

    • AWS_CONFIG_FILE 环境变量可用于更改共享 config 文件的位置。要详细了解此文件的保存位置,请参阅《AWS SDK 和工具参考指南》中的共享 configcredentials 文件的位置

    • AWS_PROFILE 环境变量可用于选择命名配置文件而不是默认配置文件。要了解有关配置不同配置文件的更多信息,请参阅《AWS SDK 和工具参考指南》中的共享 configcredentials 文件

  4. SDK 将尝试使用 Amazon EC2 实例元数据服务,为当前运行的 Amazon EC2 实例确定区域。

    • 适用于 Rust 的 AWS SDK 仅支持 IMDSv2。

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

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

在代码中设置 AWS 区域

在代码中显式设置区域

如果要显式设置区域,请直接在配置中使用 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

如果您想有条件地注入区域、覆盖它或自定义解析链,请使用 AWS 区域提供程序链

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 环境变量中是否设置了字符串。

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

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