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

发布时间:2026/9/29 12:29:46

使用 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),仅供参考
延伸阅读

更多相关文章

2026/9/29 12:29:46

常见网络攻击原理与防御:从SQL注入到DDoS的实战指南

简介:这是一份面向网络安全初学者、高校信息安全专业学生及安全培训学员的教学型PPT资料,系统梳理了最常见网络攻击的原理与防范手段。内容以典型攻击步骤为主线,覆盖预攻击探测、漏洞扫描、木马攻击、拒绝服务攻击、欺骗攻击、蠕虫病毒攻击等…

2026/9/29 12:24:45

看懂 Git 团队协作全流程:分支、提交、PR、rebase 到底在干嘛

文章目录看懂 Git 团队协作全流程:分支、提交、PR、rebase 到底在干嘛一、一句话总览二、用"改合同"理解每个核心概念三、完整流程图(8 步)四、术语速查表(对照流程位置)五、最常问的几个问题1. 为什么不能直…

2026/9/29 13:29:53

英语情景教学Agent架构设计与工程落地

1. 为什么“英语情景教学Agent”不能只靠一个大模型调用就完事?我去年带一个教育科技团队做AI口语陪练产品时,第一版原型就是简单把用户语音转文字丢给大模型,再把回复转成语音播出来。表面看流程跑通了:学生说“Where’s the nea…

2026/9/29 13:29:53

YOLOv11遥感建筑物检测:多尺度小目标优化实战

简介:这份PDF文档面向遥感图像处理与目标检测方向的学习者、研究人员及工程实践者,聚焦YOLOv11在多尺度建筑物检测中的训练技巧与数据增强方案,帮助读者应对复杂遥感场景下小目标漏检、尺度差异大、样本稀缺等实际问题。文档共38页&#xff0…

2026/9/29 13:29:53

重庆会议室舞台音响灯光选购与部署实战指南

很多刚接手会议室或小型活动场地搭建的朋友,常会遇到这样的尴尬:花大价钱买的音响设备,开会时却听不清人声,甚至产生刺耳的啸叫;灯光打下来,要么嘉宾脸上阴影重重,要么屏幕反光严重看不清 PPT。…

2026/9/29 13:29:53

AI大模型赋能数字化林业平台:从巡护日志到智能问答的落地实践

简介:这份PPT方案面向林业信息化管理者、智慧林业方案设计者及AI大模型行业应用研究者,系统梳理了AI大模型赋能数字化林业平台的建设路径,帮助读者理解如何将大模型能力落地到林业资源管理场景。资源包共1个pptx文件,大小约442KB&…

2026/9/29 11:07:23

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/28 6:05:15

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 7:00:49

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 0:04:04

AI Evals实战指南:从零搭建LLM应用评估体系与CI/CD集成

1. 为什么AI Evals值得你花时间搞明白做LLM应用的人,迟早会撞上同一堵墙:模型输出飘忽不定,今天答得好好的,明天换个问法就胡说八道。你改了一版提示词,感觉好像好了点,但到底好了多少?说不清。…

2026/9/29 0:04:04

Java采购管理系统实战:从数据库设计到事务一致性

简介:这是一套面向Java Web初学者与课程设计者的采购管理系统完整源码,采用JSP技术搭建,配合MySQL数据库,用于解决企业采购信息的管理问题,适合作为毕业设计、课程大作业或进销存类项目的参考模板。系统实现了用户登录…

2026/9/29 3:53:39

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/29 9:46:12

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/29 6:36:14

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑