
示例工程教程后端【免费下载链接】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点击查看免费下载导读本文基于当前仓库中的 rustv1/examples/dynamodb/README.md 展开系统讲解如何使用 AWS SDK for Rust 与 Amazon DynamoDB 交互。你将学会创建按需计费on-demand表、写入/删除条目、分页列举表与扫描表内容、基于主键的 Query 查询以及两个完整的实战场景——覆盖本地 DynamoDB 实例的连接、和用 PartiQL 原生 SQL 语法完成增删改查。文中所有代码示例均可在仓库中直接运行与测试既适合初学者入门也适合开发者快速复用现成代码片段。一、示例概览与适用前提该示例模块位于仓库的 rustv1/examples/dynamodb 目录展示了如何通过 AWS SDK for Rust 调用 DynamoDB 的各项核心操作。DynamoDB 是 AWS 提供的全托管 NoSQL 数据库服务以快速、可预测的性能与无缝扩展著称开发者无需管理底层基础设施即可获得亚毫秒级的读写体验。1.1 环境准备Prerequisites在运行本模块示例之前需要先完成 rustv1 目录下的通用前置条件具体说明见 rustv1/README.md核心要求包括拥有一个 AWS 账户并按 AWS SDK for Rust 入门指南 配置好默认凭证credentials与默认 Region安装 Cargo 构建工具通常随 rustup 一起安装理解RUST_LOG环境变量的作用。本模块使用tracing_subscriber与env_filter打印结构化日志可通过RUST_LOG精细控制日志级别info显示程序运行时的常规输出{crate_name}debug显示每个操作的部分细节aws_smithy_http_tower::dispatchtrace打印每次 AWS SDK 调用的完整 HTTP 请求aws_smithy_http::middlewaretrace打印每次调用的完整 HTTP 响应。SDK 还支持通过环境变量配置行为常用变量包括AWS_REGION或AWS_DEFAULT_REGION、AWS_PROFILE、AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY等这些均与 AWS CLI 兼容。1.2 ⚠ 重要注意事项运行本模块代码前务必了解以下三点均来自原文档仓库中亦有对应体现可能产生费用运行这些代码可能导致您的 AWS 账户产生费用详情参考 AWS Pricing 与 Free Tier运行测试同样可能产生费用尤其涉及真实 AWS 资源的集成测试遵循最小权限原则建议为代码授予最小权限Least Privilege仅提供完成任务所需的最低权限详见 Grant least privilege区域可用性这些代码未经所有 AWS 区域测试部分服务仅在特定区域可用见 AWS Regional Services。二、单操作代码示例Single Actions单操作示例展示如何调用单个 DynamoDB 服务函数。这些函数全部封装在 src/scenario 模块下入口定义见 src/scenario/mod.rs。示例清单如下操作源码位置底层 APICreateTable建表create.rscreate_tablePutItem写入条目add.rsput_itemDeleteItem删除条目delete.rsdelete_itemDeleteTable删表delete.rsdelete_tableListTables列表表list.rslist_tablesQuery主键查询movies/server.rsqueryScan全表扫描list.rsscan2.1 CreateTable创建按需计费表create.rs 中的create_table函数演示了如何创建一张按需计费BillingMode::PayPerRequest的表。该模式按实际请求量计费无需预置容量适合流量不稳定的场景。关键构建步骤AttributeDefinition定义属性key的类型为字符串ScalarAttributeType::SKeySchemaElement将该属性设置为分区键KeyType::Hashbilling_mode(BillingMode::PayPerRequest)指定按需计费模式。pub async fn create_table( client: Client, table: str, key: str, ) - ResultCreateTableOutput, Error { let ad AttributeDefinition::builder() .attribute_name(a_name) .attribute_type(ScalarAttributeType::S) .build() .map_err(Error::BuildError)?; let ks KeySchemaElement::builder() .attribute_name(a_name) .key_type(KeyType::Hash) .build() .map_err(Error::BuildError)?; let create_table_response client .create_table() .table_name(table_name) .key_schema(ks) .attribute_definitions(ad) .billing_mode(BillingMode::PayPerRequest) .send() .await; // ... }该函数内置了两组单元测试create.rs#L56-L91一组模拟 200 状态码断言建表成功另一组模拟 400 状态码断言返回错误。测试使用仓库的sdk_examples_test_utils::single_shot_client!宏构造一次性客户端无需真实 AWS 环境。2.2 PutItem写入条目add.rs 中的add_item演示了通过put_item向表写入一条记录。示例中的条目包含username、account_type、age、first_name、last_name五个字段其中username作为分区键。写入后从响应中取出attributes并回读各字段打印形成写后读验证let user_av AttributeValue::S(item.username); let type_av AttributeValue::S(item.p_type); // ... let resp client .put_item() .table_name(table) .item(username, user_av) .item(account_type, type_av) // ... .send() .await?;对应的单元测试add.rs#L69-L114模拟返回一条包含p_type、age、username、first_name、last_name的Attributes响应并断言解析出的ItemOut结构完全一致——这也是理解 SDK 如何把 DynamoDB 的AttributeValue映射到 Rust 结构体的好范例。2.3 DeleteItem 与 DeleteTabledelete.rs 同时包含两个操作delete_item第 12 行通过分区键名和值AttributeValue::S删除指定条目delete_table第 36 行按表名删除整张表。删除条目的测试delete.rs#L55-L68模拟 500 状态码验证错误路径的返回。2.4 ListTables列举表的四种姿势list.rs 是本模块最丰富的一个文件给出了列举表的四种典型实现list_tables第 7 行使用分页器paginator一次性收集全部表名let paginator client.list_tables().into_paginator().items().send(); let table_names paginator.collect::ResultVec_, _().await?;list_tables_limit_10第 43 行单次请求用.limit(10)限制只返回 10 张表list_tables_iterative第 65 行手动翻页循环——每次取 10 张只要响应中的last_evaluated_table_name存在就带上exclusive_start_table_name继续请求直到取完为止对应的测试list.rs#L110-L147用StaticReplayClient连续回放三页响应a,b,c→d,e,f→g,h验证翻页聚合结果为全部 8 张表list_tables_are_more第 150 行只取前 10 张并借助last_evaluated_table_name.is_some()判断是否还有更多表。2.5 Scan扫描表内条目list.rs 的list_items演示了scan操作按指定page_size默认 10扫描表内条目并通过into_paginator().items()自动聚合分页结果。let page_size page_size.unwrap_or(10); let items: ResultVec_, _ client .scan() .table_name(table) .limit(page_size) .into_paginator() .items() .send() .collect() .await;注意Scan会读取表中所有条目并消耗相应读容量生产环境中应谨慎使用优先考虑基于主键的Query。2.6 Query基于分区键的条件查询movies/server.rs 中的movies_in_year演示了query操作通过key_condition_expression指定查询条件用表达式属性名expression_attribute_names和表达式属性值expression_attribute_values占位查询指定年份的所有电影let results client .query() .table_name(table_name) .key_condition_expression(#yr :yyyy) .expression_attribute_names(#yr, year) .expression_attribute_values(:yyyy, AttributeValue::N(year.to_string())) .send() .await?;返回的每个条目通过FromHashMapString, AttributeValue转换回Movie结构体见 movies/mod.rs完成了从 DynamoDBAttributeValue到 Rust 结构体的双向转换闭环。三、完整场景示例Scenarios除了单操作本模块还提供两个完整的实战场景连接本地 DynamoDB 实例以及使用 PartiQL 完成全流程 CRUD。3.1 场景一连接本地 DynamoDB 实例DynamoDB 提供本地可运行版本DynamoDB Local方便离线开发与测试。示例程序 src/bin/list-tables-local.rs 展示了如何覆盖 SDK 的 endpoint URL 与凭证将客户端指向本地部署的 DynamoDBlet config aws_config::defaults(aws_config::BehaviorVersion::latest()) .test_credentials() // DynamoDB 本地版默认使用 8000 端口 .endpoint_url(http://localhost:8000) .load() .await; let dynamodb_local_config aws_sdk_dynamodb::config::Builder::from(config).build(); let client aws_sdk_dynamodb::Client::from_conf(dynamodb_local_config);关键点test_credentials()提供本地测试用的哑凭证因为本地实例不校验真实 AWS 凭证endpoint_url(http://localhost:8000)将请求重定向到本地默认端口 8000构造好客户端后正常调用client.list_tables().send().await即可列出本地实例中的全部表并打印表名与总数。这是理解SDK 端点覆盖机制的最小可运行示例同样适用于其他需要指向本地/自建兼容服务的场景。3.2 场景二使用 PartiQL 查询与操作表src/bin/partiql.rs 演示了通过 DynamoDB 的PartiQL一种与 SQL 兼容的查询语言直接使用execute_statementAPI 完成以下四类操作SELECT查询条目INSERT新增条目UPDATE更新条目DELETE删除条目程序运行流程如下含命令行参数说明参数含义-i/--interactive交互模式每步操作之间需按回车继续-r/--region指定 AWS Region未指定时读取AWS_REGION环境变量仍未设置则默认us-west-2-v/--verbose显示附加信息SDK 版本、Region、表名/键名/键值、写入数据等关键实现要点建表make_table用随机 10 位字符串作表名、随机 6 位字符串作分区键同样采用按需计费模式BillingMode::PayPerRequestINSERT使用带占位符?的 PartiQL 语句并通过set_parameters传入AttributeValue列表client.execute_statement() .statement(format!(r#INSERT INTO {} VALUE {{ {}: ?, acount_type: ?, age: ?, first_name: ?, last_name: ? }} #, item.table, item.key)) .set_parameters(Some(vec![ AttributeValue::S(item.utype), AttributeValue::S(item.age), AttributeValue::S(item.first_name), AttributeValue::S(item.last_name), ])) .send().awaitUPDATE程序以再次 INSERT 相同主键、改 age 为 44的方式演示了条目更新DynamoDB 中PutItem对同主键是整体覆盖语义SELECTSELECT * FROM 表名 WHERE 键名 ?命中则打印条目未命中则提示 Did not find a match.DELETEDELETE FROM 表名 WHERE 键名 ?删表remove_table通过delete_table清理测试表每次建表后调用wait_for_ready_table见 partiql.rs#L329-L345每秒轮询一次describe_table直到表状态不再是Creating才继续后续操作。执行方式# 普通模式 cargo run --bin partiql # 交互模式每步暂停 cargo run --bin partiql -- --interactive # 指定区域并开启详细输出 cargo run --bin partiql -- --region cn-north-1 --verbose四、运行示例与依赖配置4.1 运行方式rustv1 顶层文档rustv1/README.md规定了统一运行方式每个示例用cargo run --bin [程序名]执行。本模块对应的二进制文件位于 src/bin 目录# 运行本地实例连接场景 cargo run --bin list-tables-local # 运行 PartiQL 场景 cargo run --bin partiql4.2 Cargo 依赖一览Cargo.toml 定义了本模块的依赖其中与 DynamoDB 直接相关的核心依赖包括依赖版本用途aws-config1.0.1加载凭证与 Region 配置behavior-version-latestaws-sdk-dynamodb1.3.0DynamoDB 客户端serde_dynamo4AttributeValue与 serde 结构体互转aws-sdk-dynamodb0_22axum0.5.16电影查询场景的 HTTP 服务框架clap4.4命令行参数解析derive特性tokio1.20.1异步运行时full特性sdk-examples-test-utils本地路径测试工具single_shot_client、test_event等4.3 测试运行本模块的测试分为两类统一说明见 rustv1/README.md单元测试不会访问真实 AWS、不会产生费用直接运行cargo test例如 create.rs 与 add.rs 中的测试均通过single_shot_client!宏模拟 HTTP 响应无需真实环境即可验证逻辑集成测试可能对 AWS 账户产生变更或费用通过cargo test -- --ignored运行。4.4 电影查询场景Movies 模块补充说明若读者希望深入了解更完整的 DynamoDB 应用形态可阅读 src/scenario/movies 模块——它构建了一个基于 axum 的 HTTP 服务mod.rs 定义了Movie/MovieInfo结构体、TABLE_NAMEmovies、错误类型以及Movie ↔ AttributeValue双向转换实现startup.rs 展示了初始化流程检测表是否存在table_exists→ 不存在则创建以year数字型分区键title字符串排序键为复合主键的表 → 轮询describe_table等待表进入Active状态 → 从 moviedata.json 批量加载数据每批 25 条WriteRequest并循环重试未处理条目server.rs 提供 REST 接口/与/:year后者通过movies_in_year的 Query 操作返回该年份电影列表并启用 CORS 支持浏览器跨域访问shutdown.rs 监听 CtrlC 与 SIGTERM 信号在优雅退出时自动删除movies表完成清理。五、附加资源DynamoDB 开发者指南DynamoDB API 参考SDK for Rust DynamoDB 参考docs.rs六、小结本文从 rustv1/examples/dynamodb 出发完整梳理了 AWS SDK for Rust 操作 DynamoDB 的七类单操作与两类实战场景无论是通过list-tables-local覆盖 endpoint 对接本地实例还是借助 PartiQL 以类 SQL 语句完成 CRUD均可在仓库源码中找到可直接运行的实现与配套单元测试。对想要快速搭建 DynamoDB 数据访问层的 Rust 开发者而言这些示例既是入门教材也是可复用的代码资产。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 Ruby 操作 DynamoDB 完整实战指南从建表、增删改查到 PartiQLAWS SDK for Ruby 操作 DynamoDB 完整实战指南从建表、增删改查到 PartiQL 本指南以 aws doc sdk examples示例工程教程后端使用 AWS SDK for Go 操作 Amazon DynamoDB建表、增删改查与批量加载实战指南使用 AWS SDK for Go 操作 Amazon DynamoDB建表、增删改查与批量加载实战指南 本指南以仓库中 go/dynamodb/README示例工程教程后端使用 AWS SDK for PHP 操作 Amazon DynamoDB从建表演示到 PartiQL 批量查询的完整示例指南使用 AWS SDK for PHP 操作 Amazon DynamoDB从建表演示到 PartiQL 批量查询的完整示例指南 本文以 aws doc sdk示例工程教程后端上一篇Windows电脑变身AirPlay接收器Shairport4w完全指南下一篇如何轻松实现高效百度网盘链接解析开源工具的完整实用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考