ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

使用 AWS SDK for Rust 调用 AWS IoT Greengrass V2:ListCoreDevices 示例实战

使用 AWS SDK for Rust 调用 AWS IoT Greengrass V2:ListCoreDevices 示例实战 示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome 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点击查看免费下载本文围绕仓库中的 greengrassv2 示例 展开讲解如何基于 AWS SDK for Rust 调用 AWS IoT Greengrass V2 的ListCoreDevices接口在指定区域列出所有核心设备Core Device的名称、状态与最近更新时间。读完本文你将掌握该示例的参数设计、Region 解析链、异步主流程与底层调用逻辑并能够直接运行与扩展这段代码。AWS IoT Greengrass V2 与示例定位AWS IoT Greengrass 将 AWS 无缝扩展到物理设备端使设备能够对本地产生的数据在边缘就地处理同时继续使用云端进行设备管理、数据分析和持久化存储。AWS IoT Greengrass V2 引入了核心设备Core Device的概念即以 AWS IoT Thing 为载体、运行 Greengrass 客户端的边缘设备。本仓库中的示例list-core-devices.rs展示了使用 AWS SDK for Rust 调用ListCoreDevices的操作方式这是该服务目录下唯一收录的代码示例。其功能是列出当前区域中所有 IoT Greengrass V2 核心设备的名称core device thing name状态status最近状态更新时间戳last status update timestamp从示例命名list-core-devices可以看出该示例属于单动作single action型示例即用独立二进制文件演示对单个 AWS API 的调用符合 rustv1/examples/Cargo.toml 所组织的 workspace 结构中actions with individual binaries的约定。示例代码结构解析完整的程序位于 rustv1/examples/greengrassv2/src/bin/list-core-devices.rs代码量虽小但完整覆盖了参数解析 → Region 解析 → 客户端构建 → API 调用 → 结果输出的典型 SDK 使用链路。命令行参数clap 的 Opt 结构程序使用clap的 derive 模式定义了两个命令行参数#[derive(Debug, Parser)] struct Opt { /// The AWS Region. #[structopt(short, long)] region: OptionString, /// Whether to display additional information. #[structopt(short, long)] verbose: bool, }参数含义参数简写说明--region-r指定创建客户端所使用的 AWS 区域--verbose-v是否在运行时输出额外的诊断信息SDK 版本号、实际使用的 Regionregion的类型是OptionString即该参数可省略verbose是布尔开关存在即启用。两者在main开头通过let Opt { region, verbose } Opt::parse();一次性解构取出。Region 解析链三层回退机制示例没有直接使用硬编码区域而是通过RegionProviderChain构建了一条三层回退链let region_provider RegionProviderChain::first_try(region.map(Region::new)) .or_default_provider() .or_else(Region::new(us-west-2));其解析优先级从高到低为命令行-r传入的区域first_try仅当用户显式传入时生效默认配置提供者or_default_provider即读取AWS_REGION环境变量或本地 SDK 配置文件中的区域设置兜底区域us-west-2or_else当上面两者都不可用时生效。在verbose模式下程序会打印当前实际生效的区域和 SDK 版本号if verbose { println!(IoT client version: {}, PKG_VERSION); println!(Region: {}, region_provider.region().await.unwrap().as_ref()); }其中PKG_VERSION来自aws_sdk_greengrassv2::meta::PKG_VERSION即当前aws-sdk-greengrassv2crate 的版本常量可用来快速核对运行环境中的 SDK 版本。异步运行时与客户端构建程序以#[tokio::main]声明异步入口依赖tokio提供异步运行时#[tokio::main] async fn main() - Result(), BoxError { tracing_subscriber::fmt::init(); ... let shared_config aws_config::from_env().region(region_provider).load().await; let client Client::new(shared_config); show_cores(client).await.map_err(Box::new) }关键步骤说明tracing_subscriber::fmt::init()初始化结构化日志输出配合RUST_LOG环境变量可控制日志级别详见下文运行示例aws_config::from_env().region(region_provider).load().await从环境变量加载 AWS 配置并将前面解析出的 Region 注入共享配置Client::new(shared_config)基于共享配置创建aws_sdk_greengrassv2::Client之后所有 Greengrass V2 操作都通过该客户端发起。核心调用ListCoreDevices列表查询逻辑集中在show_cores函数中async fn show_cores(client: Client) - Result(), Error { let resp client.list_core_devices().send().await?; println!(cores:); for core in resp.core_devices() { println!( Name: {}, core.core_device_thing_name().unwrap_or_default()); println!( Status: {:?}, core.status().unwrap()); println!( Last update: {:?}, core.last_status_update_timestamp().unwrap()); println!(); } println!(); Ok(()) }从源码可以看到实际调用链client.list_core_devices()构建ListCoreDevices请求.send().await异步发送并返回响应对象resp随后通过resp.core_devices()迭代设备列表。每个设备的三个字段取法如下core.core_device_thing_name()返回核心设备对应的 AWS IoT Thing 名称示例用unwrap_or_default()容错处理缺失值core.status()返回设备状态。ListCoreDevices返回的状态通常为HEALTHY健康或UNHEALTHY不健康示例直接以Debug形式打印core.last_status_update_timestamp()返回最近一次状态更新的时间戳。值得说明的是示例使用.send().await一次性拉取结果。AWS SDK for Rust 还为ListCoreDevices提供了分页器paginator对应.into_paginator()在核心设备数量较多、单页返回不完时会自动分页遍历所有结果本示例为保持代码简洁采用单次请求方式适合设备数量有限的场景。依赖与工程配置示例的依赖声明位于 rustv1/examples/greengrassv2/Cargo.toml[package] name greengrassv2-code-examples version 0.1.0 edition 2021 [dependencies] aws-config { version 1.0.1, features [behavior-version-latest] } aws-sdk-greengrassv2 { version 1.3.0 } aws-types { version 1.0.1 } tokio { version 1, features [full] } clap { version 4.4, features [derive] } tracing-subscriber { version 0.3.5, features [env-filter] }各依赖的作用aws-config负责从环境变量、配置文件等来源加载 AWS 凭据与区域配置behavior-version-latest特性表示采用最新的行为版本aws-sdk-greengrassv2AWS IoT Greengrass V2 的官方 Rust SDK crate本示例锁定在1.3.0aws-types提供Region等基础类型tokio异步运行时full特性开启全部运行时能力clap命令行参数解析derive特性支持结构体派生#[derive(Parser)]tracing-subscriber日志与追踪env-filter特性支持通过RUST_LOG过滤日志级别。此外该目录已被注册为 workspace 成员见 rustv1/examples/Cargo.toml 中的greengrassv2因此可以在rustv1/examples目录下对全部示例统一执行编译、格式化和测试也可以在rustv1根目录通过./run_all.sh脚本统一校验该脚本同时用于 CI 工具链。运行示例前置条件运行前需要满足拥有 AWS 账号已按 AWS SDK for Rust 的入门指南配置默认凭据与默认区域本仓库 rustv1/README.md 的 Prerequisites 一节对此有说明例如通过环境变量或~/.aws/credentials配置文件设置访问密钥本地已安装 Rust 工具链与 Cargo通常经 rustup 安装。执行命令在rustv1/examples/greengrassv2目录下执行cargo run --bin list-core-devices -- [-r REGION] [-v]cargo run --bin list-core-devices指定运行该二进制--之后的内容原样传递给程序自身。参数行为汇总参数行为-r REGION指定创建客户端所使用的区域如-r ap-northeast-1省略时读取AWS_REGION环境变量-v输出额外信息包括aws-sdk-greengrassv2版本号与最终生效的区域区域的解析优先级为命令行-rAWS_REGION环境变量 / 默认配置 us-west-2兜底。环境变量与日志控制参考 rustv1/README.md 的说明AWS SDK for Rust 支持的常用环境变量包括AWS_REGION或AWS_DEFAULT_REGION指定请求发送的目标区域AWS_PROFILE指定使用哪个 CLI profile 的凭据与配置AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY指定 IAM 用户或角色的访问密钥对。示例通过tracing_subscriber输出日志可用RUST_LOG精细控制日志级别例如RUST_LOGinfo显示程序常规输出RUST_LOGaws_smithy_http_tower::dispatchtrace打印每次 AWS 调用的完整 HTTP 请求RUST_LOGaws_smithy_http::middlewaretrace打印每次调用的完整 HTTP 响应。这对排查调用参数与实际请求内容非常有用。运行输出解读正常运行不带-v会先打印cores:标题随后逐行列出每个核心设备cores: Name: MyGreengrassCoreThing Status: HEALTHY Last update: 2026-09-20T08:15:33ZName为设备对应的 Thing 名称Status为设备健康状态Last update为最近状态更新时间UTC 时间戳。如果区域中没有核心设备则只输出cores:与空行。权限与安全注意事项原文档明确提醒了三条重要注意事项运行示例前务必留意遵循最小权限原则建议为该代码授予最小权限least privilege即只授予完成任务所需的最低权限。就本示例而言对应的 IAM 权限为greengrass:ListCoreDevices可将其限定在只读范围内避免附带其他 Greengrass 写操作权限区域可用性本代码未在所有 AWS 区域经过测试且部分 AWS 服务仅在特定区域可用运行前应确认目标区域支持 AWS IoT Greengrass V2费用提醒运行示例可能产生 AWS 账户费用尤其是当调用链涉及实际资源创建时应结合自身账户情况评估。从安全实践角度看凭据建议通过环境变量或 IAM 角色提供而不要在代码或命令行中明文写入访问密钥。扩展与深入学习本示例演示了ListCoreDevices这一个核心动作若需继续深入可以从以下几点出发分页遍历将.send()替换为 SDK 提供的分页器处理设备数量较多时的多页结果组合场景参考仓库其他服务目录的组织方式将ListCoreDevices与GetConnectivityInfo、GetDeployment等 API 组合成完整的设备管理场景原文档也提到 AWS 文档团队更偏好展示完整场景而非单次 API 调用跨区域脚本将-r参数脚本化对多个区域执行批量设备盘点测试与 CI本目录的单元测试可通过cargo test运行不会对 AWS 账户产生任何变更或费用集成测试cargo test -- --ignored则可能产生费用需按各示例说明单独评估。仓库中 rustv1/README.md 还提供了更多关于示例布局examples / application / lambda / webassembly、RUST_LOG用法以及cargo clippy、cargo fmt等质量校验的说明可作为深入阅读的入口。赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome 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 SDK for Rust 操作 AWS Global AcceleratorListAccelerators 示例实战解析使用 AWS SDK for Rust 操作 AWS Global AcceleratorListAccelerators 示例实战解析 本指南以 AWS 官示例工程教程后端lazygit终端UI架构深度解析从多屏协作到Git工作流革命lazygit终端UI架构深度解析从多屏协作到Git工作流革命 在当今的软件开发实践中Git已成为版本控制的行业标准但传统的命令行界面常常让开发者陷入记忆开发工具CLI版本控制AWS SDK for Go V2 实战使用 aws-doc-sdk-examples 中的 gov2 示例操作 Amazon SNSAWS SDK for Go V2 实战使用 aws doc sdk examples 中的 gov2 示例操作 Amazon SNS 本篇指南基于 gov2示例工程教程后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表