☰
使用 AWS SDK for Rust 操作 AWS Global Accelerator:ListAccelerators 示例实战解析
2026/9/28 6:51:20 网站建设 项目流程
  • 示例工程
  • 教程
  • 后端

【免费下载链接】aws-doc-sdk-examples

Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.

项目地址:https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples
点击查看免费下载

本指南以 AWS 官方代码示例仓库(aws-doc-sdk-examples)中的 Global Accelerator 示例文档 为骨架,逐段剖析其唯一代码示例globalaccelerator-helloworld的源码实现、依赖配置与运行方式。读完本文,你将掌握如何用 AWS SDK for Rust 通过分页器调用ListAccelerators列出账户下所有加速器的名称与 ARN,理解 Global Accelerator 全局服务端点的固定 Region 处理技巧,并能在本地正确配置凭据后一键运行该示例。

AWS Global Accelerator 是什么

AWS Global Accelerator 是一项网络服务,它利用亚马逊全球网络基础设施,将用户流量的性能提升最多 60%(该数据为 AWS 官方服务宣传口径)。Global Accelerator 通过静态 Anycast IP 地址将流量定向到距离用户最近的 AWS 边缘节点,再经由 AWS 全球骨干网转发到后端应用端点(如 Application Load Balancer、Network Load Balancer、EC2 实例或弹性 IP),从而减少公网跳数与延迟,提升可用性。它属于"全局服务",控制平面 API 位于特定的 AWS 区域(示例中使用 us-west-2),这与常规按区域划分的服务不同,也是示例代码中需要显式固定 Region 的原因。

本仓库通过一个轻量示例(globalaccelerator-helloworld)演示了如何使用 AWS SDK for Rust 与该服务交互:列出账户中所有加速器的名称与 ARN。核心源码位于 globalaccelerator-helloworld.rs,工程清单见 Cargo.toml。

代码示例总览

文档明确将示例定位为单个 API 动作(action)级别:"Displays the names and ARNs of your accelerators"(ListAccelerators)。相比跨服务场景,这类示例聚焦演示单一 SDK 调用,便于快速学习对应服务的 SDK 用法。

  • 示例程序:globalaccelerator-helloworld
  • 涉及 API:ListAccelerators
  • 输出内容:账户下所有 Global Accelerator 加速器的名称(Name)与 ARN(Arn)
  • 文件位置:rustv1/examples/globalaccelerator/src/bin/globalaccelerator-helloworld.rs

从工程的 workspace 配置看,rustv1/examples/Cargo.toml 将globalaccelerator列为 workspace 成员,说明该示例可与其他 Rust 示例一起被统一编译、格式化和测试(运行cargo clippy --all-targets、cargo fmt或仓库级脚本run_all.sh时都会被纳入检查范围)。

源码逐段解析:如何列出加速器

整个程序分为两个核心部分:show_accelerators异步函数负责调用 SDK,main函数负责 Region 解析、客户端构建与参数解析。

1. show_accelerators:分页遍历加速器列表

async fn show_accelerators(client: &Client) -> Result<(), Error> { println!("Welcome to the AWS Rust SDK Global Accelerator example!"); println!(); let accelerators = client .list_accelerators() .into_paginator() .items() .send() .try_collect() .await?; for accelerator in accelerators { let accelerator_arn = accelerator.name().unwrap_or_default(); let accelerator_name = accelerator.accelerator_arn().unwrap_or_default(); println!("Accelerator Name : {}", accelerator_name); println!("Accelerator ARN : {}", accelerator_arn); println!(); } Ok(()) }

关键点解析:

  • 分页器(paginator):list_accelerators()返回分页器构建器,into_paginator()将其转换为可分页遍历的形式。ListAccelerators的 API 返回结果可能超过单页上限,SDK 的分页器会自动携带NextToken连续发起后续请求,直至取完所有页。
  • items()+try_collect():.items()返回加速器条目的异步流(Stream),配合tokio-stream提供的try_collect()将流收集为Vec<Accelerator>。这里?会传播 SDK 返回的Error,保证任一页请求失败即终止。
  • 字段提取:遍历每个Accelerator结构体,读取name()(加速器名称)与accelerator_arn()(加速器 ARN),并用unwrap_or_default()容错空值。注意源码中变量命名与打印顺序存在轻微错位(accelerator_arn变量实际存的是name(),打印时 "Accelerator ARN" 行实际输出 name 字段),这是官方示例中的一个命名瑕疵,阅读时需注意区分。
  • #![allow(clippy::result_large_err)]:文件顶部允许Result携带大尺寸错误类型,避免 clippy 对大错误类型的告警,属于 SDK 示例中的常见 lint 豁免写法。

2. main:固定 Region 并构建客户端

let region_provider = RegionProviderChain::first_try(Region::new("us-west-2")); let shared_config = aws_config::from_env().region(region_provider).load().await; let client = Client::new(&shared_config);
  • 固定 us-west-2 的原因:源码注释明确说明"Global Accelerator is a global service with its API in us-west-2"。Global Accelerator 虽是全局服务,但其 API 端点固定部署在 us-west-2,因此示例通过RegionProviderChain::first_try(Region::new("us-west-2"))强制使用该区域,而不是依赖环境变量中的默认区域。
  • RegionProviderChain::first_try:将 us-west-2 作为第一个尝试的区域源。aws_config::from_env().region(region_provider)将区域提供链注入配置构建器,load().await完成配置加载(含凭据解析)。
  • verbose模式:-v参数开启时,程序额外打印 SDK 客户端版本(来自aws_sdk_globalaccelerator::meta::PKG_VERSION)与解析出的 Region,便于调试与确认运行时环境。
  • 参数解析:使用clap的 derive 模式声明Opt结构体,#[structopt(short, long)]声明布尔型-v/--verbose参数,Opt::parse()完成命令行解析。
  • 异步运行时:#[tokio::main]宏将 main 包装进 Tokio 运行时;tracing_subscriber::fmt::init()初始化结构化日志输出,配合RUST_LOG环境变量可控制日志级别。

工程依赖配置

globalaccelerator 的 Cargo.toml 声明了如下依赖:

依赖项版本用途
aws-config1.0.1(feature:behavior-version-latest)加载共享配置(凭据、Region 解析链)
aws-sdk-globalaccelerator1.3.0Global Accelerator 服务 SDK 客户端
tokio1.20.1(feature:full)异步运行时
tokio-stream0.1.8为分页器返回的异步流提供try_collect等扩展
clap4.4(feature:derive)命令行参数声明式解析
tracing-subscriber0.3.15(feature:env-filter)结构化日志初始化,支持RUST_LOG过滤

其中tokio-stream是分页遍历的关键支撑:into_paginator().items()产出的异步流依赖Streamtrait 扩展,try_collect正是由tokio-stream的StreamExt提供。aws-config的behavior-version-latestfeature 会启用当前最新的 SDK 行为版本,确保请求构造遵循 SDK 最新约定。

运行环境准备

前置条件

运行该示例需要满足文档列出的前置条件:

  1. AWS 账户:必须拥有有效的 AWS 账户。
  2. 凭据与 Region 配置:按 AWS SDK for Rust 官方入门指南配置默认凭据与区域(通常通过~/.aws/credentials与~/.aws/config文件,或环境变量注入)。
  3. Cargo 构建工具:通过 rustup 安装的 Rust 工具链,自带cargo。

仓库级 rustv1/README.md 进一步补充:每个示例可用cargo run --bin [程序名]执行;cargo test可运行单元测试(不会产生 AWS 费用);cargo test -- --ignored可运行集成测试(可能产生费用或账户变更)。

常用环境变量

示例运行时依赖 AWS SDK for Rust 的环境变量配置(详见 rustv1/README.md):

  • AWS_REGION/AWS_DEFAULT_REGION:指定发送请求的区域。对本示例而言,代码中已用RegionProviderChain::first_try(us-west-2)强制固定,环境变量区域不会覆盖该链的首选值。
  • AWS_PROFILE:指定使用哪个 CLI 配置文件的凭据。
  • AWS_ACCESS_KEY_ID与AWS_SECRET_ACCESS_KEY:指定 IAM 用户/角色的访问密钥。
  • RUST_LOG:控制 tracing 日志级别,例如info显示常规输出,aws_smithy_http_tower::dispatch=trace可打印每次 SDK 调用的完整 HTTP 请求。

运行示例

编译并运行

在rustv1/examples/globalaccelerator目录下执行:

cargo run --bin globalaccelerator-helloworld [-v]
  • 不带参数运行:仅列出所有加速器的名称与 ARN。
  • 追加-v:额外显示 SDK 客户端版本号与解析出的 Region(始终为 us-west-2),便于确认运行时环境。

预期输出

账户中存在加速器时,输出形如:

Welcome to the AWS Rust SDK Global Accelerator example! Accelerator Name : my-accelerator Accelerator ARN : arn:aws:globalaccelerator::123456789012:accelerator/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

若账户中没有任何加速器,分页器收集到的列表为空,程序正常结束且不打印任何加速器条目。

在 workspace 内运行

该示例是 rustv1/examples/Cargo.toml 中 workspace 的成员之一,因此也可以在rustv1/examples目录下直接执行cargo run --bin globalaccelerator-helloworld,Cargo 会自动解析 workspace 成员并编译运行该二进制目标。若要统一检查全部 Rust 示例的格式与 lint,可运行仓库根目录下的./run_all.sh(见 rustv1/README.md)。

⚠ 重要注意事项

原文档明确列出了三点使用须知,务必在运行前了解:

  1. 最小权限原则:建议为运行该示例的 IAM 身份授予最小权限(least privilege),即仅授予执行本任务所需的最低权限。对本示例而言,所需权限为globalaccelerator:ListAccelerators对应的 IAM 权限(globalaccelerator:ListAccelerators),不应附带其他无关权限。
  2. 区域可用性:本代码未经所有 AWS 区域测试。部分 AWS 服务仅在特定区域提供,Global Accelerator 虽是全局服务,但其 API 端点位于 us-west-2,若所在网络无法访问该端点,请求将失败。
  3. 费用风险:运行本代码可能在你的 AWS 账户中产生费用。Global Accelerator 服务本身按加速器运行时间计费,创建、运行加速器均会产生账单;仅调用ListAccelerators不会创建资源,但任何后续实操都应留意成本。

相关资源

若希望继续深入,仓库内可参考的资源包括:

  • 示例源码:globalaccelerator-helloworld.rs
  • 示例文档:Global Accelerator README
  • 依赖清单:Cargo.toml
  • 工程 workspace 配置:rustv1/examples/Cargo.toml
  • Rust 示例总览与环境变量说明:rustv1/README.md

官方还提供了 AWS SDK for Rust 的 Global Accelerator API 参考与 SDK 配置参考(原文档 "Resources" 一节所列),建议配合 SDK 文档查询ListAccelerators的请求/响应模型细节。

版权说明

示例代码遵循 Apache-2.0 许可(Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0),可直接参照、修改与运行,用于学习 AWS SDK for Rust 的 Global Accelerator 集成。

  • 示例工程
  • 教程
  • 后端

【免费下载链接】aws-doc-sdk-examples

Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.

项目地址:https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples
点击查看免费下载
上一篇:极客时间电子书资源库:200+技术课程完整学习指南
下一篇:如何快速掌握SSH配置管理:Awesome-SSH中的5个顶级工具解析

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询