新闻详情

新闻详情

首页 / 资讯中心 / 详情

使用 AWS SDK for Rust 操作 AWS IoT:DescribeEndpoint 与 ListThings 代码示例详解

发布时间:2026/9/28 12:36:14来源:尧图网络
使用 AWS SDK for Rust 操作 AWS IoT:DescribeEndpoint 与 ListThings 代码示例详解
示例工程教程后端【免费下载链接】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-doc-sdk-examples仓库中 rustv1/examples/iot/README.md 为骨架系统讲解如何用 AWS SDK for Rust 调用 AWS IoT 的两类核心单操作Single Action——查询账户专属终端节点地址DescribeEndpoint与列举 IoT 事物ListThings。文中不仅完整继承官方文档的命令行参数说明还逐行拆解了仓库内两个示例二进制文件的真实源码帮助读者掌握aws-sdk-iot客户端的构建方式、Region 解析链与clap参数解析写法并给出可直接复制的运行命令与权限建议。AWS IoT 与 SDK for Rust示例概览AWS IoT 为联网设备传感器、执行器、嵌入式设备、无线设备、智能家电等提供安全、双向的通信能力使设备能够通过 MQTT、HTTPS 和 LoRaWAN 等协议连接到 AWS Cloud。本目录中的示例展示了如何使用 AWS SDK for Rust 与 AWS IoT 交互。在仓库中该示例位于 rustv1/examples/iot其代码结构如下Cargo.tomlRust 项目的包清单声明了aws-sdk-iot、aws-config、tokio、clap、tracing-subscriber等依赖src/bin/describe-endpoint.rs调用DescribeEndpoint的独立可执行示例src/bin/list-things.rs调用ListThings的独立可执行示例README.md本目录的说明文档即本指南的主体来源。目录提供的两个Single actions单操作代码摘录如下DescribeEndpointListThings注意事项运行本目录代码前请留意以下事项可能产生费用运行示例或测试可能会对您的 AWS 账户产生费用遵循最小权限原则建议为代码授予最低权限Least Privilege仅授予执行任务所需的最小权限集区域可用性本代码并未在每一个 AWS 区域经过测试某些 AWS 服务仅在特定区域可用运行前请确认目标区域的服务可用性。环境准备Prerequisites运行示例之前需要满足以下前置条件AWS 账户与凭证您必须拥有 AWS 账户并按 AWS SDK for Rust 开发指南 的描述配置默认凭证与默认区域Cargo 构建工具需要安装 Cargo 构建工具通常通过 rustup 安装。关于完整的 Rust 示例目录组织、运行方式与贡献规范可参见 rustv1/README.md。环境变量RUST_LOG 与 AWS 系列变量本仓库的 Rust 示例使用tracing_subscriber配合env_filter特性在程序运行期间打印各类信息。由于 AWS SDK for Rust 与示例用到的许多 crate 都通过tracing做结构化日志理解RUST_LOG变量尤为重要RUST_LOG控制 tracing 环境日志级别可精细控制显示哪些日志消息info显示程序的所有常规输出{crate_name}debug显示每个操作的若干有用细节aws_smithy_http_tower::dispatchtrace打印对每个 AWS SDK 调用的完整 HTTP 请求aws_smithy_http::middlewaretrace打印对每个 AWS SDK 调用的完整 HTTP 响应。AWS SDK for Rust 还使用以下环境变量配置行为这些变量与 AWS CLI 环境变量子集一致AWS_REGION或AWS_DEFAULT_REGION指定请求发送到的 AWS 区域AWS_PROFILE指定要使用的 AWS CLI 配置文件名称AWS_ACCESS_KEY_ID指定与 IAM 用户或角色关联的 AWS 访问密钥AWS_SECRET_ACCESS_KEY指定访问密钥对应的秘密密钥。单操作示例一DescribeEndpointDescribeEndpoint返回特定于发起调用的 AWS 账户、在该区域内的唯一终端节点地址。该功能由 src/bin/describe-endpoint.rs 实现其核心代码如下对应文档中的 DescribeEndpoint 代码摘录// Displays the address of an endpoint. // snippet-start:[iot.rust.describe-endpoint] async fn show_address(client: Client, endpoint_type: str) - Result(), Error { let resp client .describe_endpoint() .endpoint_type(endpoint_type) .send() .await?; println!(Endpoint address: {}, resp.endpoint_address.unwrap()); println!(); Ok(()) } // snippet-end:[iot.rust.describe-endpoint]命令行参数示例通过clap的Parserderive 宏定义命令行参数#[derive(Debug, Parser)] struct Opt { /// The AWS Region. #[structopt(short, long)] region: OptionString, /// The endpoint type. #[structopt(short, long)] endpoint_type: String, /// Whether to display additional information. #[structopt(short, long)] verbose: bool, }其参数语义如下-r REGION客户端创建时所在的 AWS 区域。若不提供则使用AWS_REGION环境变量值若环境变量也未设置默认使用us-west-2-e ENDPOINT-TYPE终端节点类型必填必须是以下取值之一iot:Data返回由 VeriSign 签名的数据终端节点iot:Data-ATS返回由 ATS 签名的数据终端节点iot:CredentialProvider返回 AWS IoT 凭证提供者 API 终端节点iot:Jobs返回 AWS IoT 设备管理 Jobs API 终端节点-v是否显示附加信息verbose 模式打印 SDK 版本、区域与终端节点类型。从源码看实现细节在main函数中示例依次完成了以下步骤初始化日志tracing_subscriber::fmt::init()根据RUST_LOG输出日志解析参数Opt::parse()解析命令行参数构建 Region 解析链通过RegionProviderChain::first_try(...).or_default_provider().or_else(Region::new(us-west-2))依次尝试“命令行参数指定区域 → 默认凭证/配置链中的区域 → 兜底 us-west-2”。这正是文档所述“未指定时使用AWS_REGION再未设置时默认us-west-2”的实现依据创建客户端aws_config::from_env().region(region_provider).load().await加载共享配置Client::new(shared_config)创建aws-sdk-iot客户端调用接口show_address(client, endpoint_type).await调用describe_endpoint()并打印endpoint_address。在 verbose 模式下还会打印aws_sdk_iot::meta::PKG_VERSIONSDK 包版本等信息。入口标注了#[tokio::main]表明该示例基于 tokio 异步运行时执行。单操作示例二ListThingsListThings返回指定区域内您的 IoT 事物Thing列表。该功能由 src/bin/list-things.rs 实现其核心代码如下对应文档中的 ListThings 代码摘录// Lists your IoT things. // snippet-start:[iot.rust.list-things] async fn show_things(client: Client) - Result(), Error { let resp client.list_things().send().await?; println!(Things:); for thing in resp.things.unwrap() { println!( Name: {}, thing.thing_name.as_deref().unwrap_or_default() ); println!( Type: {}, thing.thing_type_name.as_deref().unwrap_or_default() ); println!( ARN: {}, thing.thing_arn.as_deref().unwrap_or_default() ); println!(); } println!(); Ok(()) } // snippet-end:[iot.rust.list-things]命令行参数#[derive(Debug, Parser)] struct Opt { /// The AWS Region. #[structopt(short, long)] region: OptionString, /// Whether to display additional information. #[structopt(short, long)] verbose: bool, }-r REGION客户端创建时所在的 AWS 区域。若不提供则使用AWS_REGION环境变量值若环境变量也未设置默认使用us-west-2-v是否显示附加信息verbose 模式打印 SDK 版本与区域。从源码看实现细节main中的流程与describe-endpoint.rs完全一致初始化日志 → 解析参数 → 构建RegionProviderChain命令行 → 默认配置 → us-west-2→aws_config::from_env().region(...).load().await加载配置 →Client::new创建客户端 →show_things(client).await。show_things遍历resp.things对每个 Thing 打印三项属性thing_nameThing 名称thing_type_nameThing 类型名称thing_arnThing 的 ARN。代码使用as_deref().unwrap_or_default()安全处理可空字段避免因缺少某一属性而 panic。运行示例运行指令根据 rustv1/README.md 的说明每个示例都可使用cargo run --bin [program name]执行。在本目录下# 查询默认区域或 AWS_REGION 指定区域的账户专属终端节点地址 cargo run --bin describe-endpoint -- -e iot:Data-ATS # 在 verbose 模式下查看 SDK 版本与区域信息 cargo run --bin describe-endpoint -- -e iot:CredentialProvider -r us-west-2 -v # 列出区域内的 IoT 事物 cargo run --bin list-things # 指定区域并输出附加信息 cargo run --bin list-things -r us-west-2 -v依赖声明可见于 Cargo.tomlaws-sdk-iotv1.3.0、aws-configv1.0.1启用behavior-version-latest特性、aws-typesv1.0.1、tokiov1.20.1启用full特性、clapv4.4启用derive特性以及tracing-subscriberv0.3.15启用env-filter特性。首次运行前请确认这些依赖可被 Cargo 正确解析。测试⚠ 运行集成测试可能会对您的 AWS 账户产生费用。单元测试不产生 AWS 变更与费用cargo test集成测试可能产生 AWS 变更与费用cargo test -- --ignored。具体测试运行说明可参见 rustv1/README.md 中rustv1文件夹的相关章节。权限建议为遵循最小权限原则运行这两个示例所需的最小 IAM 权限大致包括iot:DescribeEndpoint供describe-endpoint示例使用iot:ListThings供list-things示例使用。建议在 IAM 策略中只授予上述必要权限而非使用管理员级别的宽松权限。补充资源AWS IoT Developer GuideAWS IoT 开发者指南AWS IoT API ReferenceAWS IoT API 参考SDK for Rust AWS IoT referenceRust 版 AWS IoT SDK 的docs.rs参考文档。如需了解仓库中其余 AWS 服务的 Rust 示例可继续阅读 rustv1/examples 下各服务目录的 README例如本仓库同时提供的 rustv1/examples/iot/README.md 原始文档其中包含DescribeEndpoint与ListThings的官方代码摘录链接。Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.SPDX-License-Identifier: Apache-2.0赞分享示例工程教程后端【免费下载链接】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 官示例工程教程后端使用 AWS SDK for .NET 操作 AWS Organizations12 个单动作示例详解使用 AWS SDK for .NET 操作 AWS Organizations12 个单动作示例详解 导读 本指南以 dotnetv3/Organizati示例工程教程后端使用 AWS SDK for Kotlin 操作 AWS IoT Core场景化示例代码全解析使用 AWS SDK for Kotlin 操作 AWS IoT Core场景化示例代码全解析 导读 本文基于 AWS 官方代码示例仓库中 kotlin/se示例工程教程后端上一篇3 步让 Ghostty 终端用上你的母语gettext 本地化完整实战下一篇如何用EasyControl实现安卓设备远程控制完整免费教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

VC6调用NI FRM11实现1000Hz高精度采集模板 2026/9/28 16:51:01

VC6调用NI FRM11实现1000Hz高精度采集模板

简介:本资源是一套基于Visual C调用NI-DAQmx驱动实现高精度数据采集的完整开发模板,面向自动化测试、工业测控及高校实验场景下的C/C嵌入式开发者与仪器控制初学者。项目聚焦FRM11型NI采集卡,支持1000Hz恒定采样率与定时器精准触发&#xff0…

阅读更多 →
工业级无人机检测数据集:9229张实拍图+YOLO/VOC双格式开箱即训 2026/9/28 16:51:01

工业级无人机检测数据集:9229张实拍图+YOLO/VOC双格式开箱即训

简介:本资源是一份面向深度学习目标检测任务的高质量无人机识别数据集,适用于YOLO系列(v5至v10)、Faster R-CNN、SSD等主流模型的训练与验证,特别适合计算机视觉方向的初学者进阶实践及科研项目快速启动。数据集共9229…

阅读更多 →
电流检测链路全解析:采样电阻选型、INA199电路与ADC换算 2026/9/28 16:51:01

电流检测链路全解析:采样电阻选型、INA199电路与ADC换算

从一块采样电阻塞进电路板到单片机能读出一个准确的电流值,中间隔着的往往不只是几根飞线,而是一整条需要认真对待的信号链路。最近帮朋友调试一块电机驱动板,问题恰好出在电流检测上:采样电阻明明选了毫欧级,INA199也…

阅读更多 →
Substrate框架从入门到实践:底层设计思维与区块链开发指南 2026/9/28 16:50:49

Substrate框架从入门到实践:底层设计思维与区块链开发指南

1. 从“substrate”这个词说起:它到底是什么,为什么值得单独聊第一次看到“substrate”这个词,很多人会愣一下。它在不同圈子里指向完全不同的东西:做区块链的人第一反应是 Parity 那套区块链开发框架,做材料或者生物的…

阅读更多 →
用CLI-Anything统一管理Codex CLI与Claude CLI:模型路由与Key配置实战 2026/9/28 16:50:49

用CLI-Anything统一管理Codex CLI与Claude CLI:模型路由与Key配置实战

1. CLI-Anything到底在解决什么问题我先说下这个项目是怎么来的。过去半年我电脑上的终端越开越多,不是因为我工作量大,而是因为AI编程助手装得太散。Codex CLI要单独记住启动命令,Claude CLI有自己的一套初始化流程,想临时切换通…

阅读更多 →
Kubernetes 上 agentic 工作负载的调度与编排:ax 原语实践 2026/9/28 16:50:49

Kubernetes 上 agentic 工作负载的调度与编排:ax 原语实践

1. 从“ax”这个标题说起:一个被低估的调度原语第一次看到“ax”这个标题,很多人会以为是某个命令行工具的缩写,或者某个内部项目的代号。但把热搜词摊开来看——ax、agentic、orchestration、kubernetes、workspace——这几个词凑在一起&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉