新闻详情

新闻详情

首页 / 资讯中心 / 详情

使用 AWS SDK for Rust 管理 Amazon Aurora:从 Hello World 到集群全生命周期实战指南

发布时间:2026/9/28 3:18:40来源:尧图网络
使用 AWS SDK for Rust 管理 Amazon Aurora:从 Hello World 到集群全生命周期实战指南
示例工程教程后端【免费下载链接】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 仓库中的 Aurora 示例为主体讲解如何使用 AWS SDK for Rust 完成 Amazon Aurora 的核心管理操作从最基础的DescribeDBClusters快速入门到创建自定义集群参数组 → 修改参数 → 创建 DB 集群与实例 → 生成快照 → 清理资源的完整集群生命周期场景。读完本文你将掌握 Aurora MySQL 在 Rust 侧的 API 调用方式、参数组的深层作用机制以及如何用cargo run与cargo test运行和验证这些示例。示例代码在哪里仓库中 Aurora 的 Rust 示例原本位于rust_dev_preview/examples/aurora目录该目录下的 README 现仅保留一条迁移说明将读者指向同一仓库内迁移后的完整代码位置rustv1/examples/aurora/。迁移后的目录结构如下README.md示例总览、代码清单与运行说明Cargo.toml依赖清单aws-sdk-rds、tokio、anyhow、secrecy、inquire、mockall等src/lib.rs库入口导出aurora_scenario与rds两个模块src/rds.rsRDS API 的薄封装层所有aws_sdk_rds调用集中于此src/aurora_scenario/mod.rs集群生命周期场景的编排逻辑src/aurora_scenario/tests.rs基于mockall的单元测试src/bin/hello-world.rs 与 src/bin/aurora-scenario.rs两个可执行二进制程序。该目录的 README 明确说明示例使用 AWS SDK for Rust 操作 Amazon Aurora。Aurora 是面向云构建的托管关系数据库引擎兼容 MySQL 与 PostgreSQL属于 Amazon RDS 的一部分。当前仓库中的场景示例默认使用aurora-mysql引擎。前提条件与运行环境账号与工具链根据 rustv1/README.md 与 Aurora 示例 README运行示例需要一个 AWS 账号并已按 AWS SDK for Rust 官方入门指南配置好默认凭据与默认 Region默认读取环境变量或~/.aws配置中的 profile安装 Cargo 构建工具通常通过 rustup 安装注意运行本示例可能产生 AWS 账户费用运行测试同样可能产生费用。常用环境变量rustv1目录下的示例使用tracing_subscriberenv_filter输出运行日志因此RUST_LOG是调试的关键变量RUST_LOGinfo显示程序运行的主要输出RUST_LOG{crate_name}debug显示某个 crate 内部的动作细节RUST_LOGaws_smithy_http_tower::dispatchtrace打印每次 AWS SDK 请求的完整 HTTP 请求RUST_LOGaws_smithy_http::middlewaretrace打印每次调用的完整 HTTP 响应。AWS SDK for Rust 还会读取以下与凭据/区域相关的环境变量AWS_REGION或AWS_DEFAULT_REGION请求发往的 AWS 区域AWS_PROFILE使用的 AWS CLI 配置文件名缺省为defaultAWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY访问密钥对。依赖清单解读Cargo.toml 中与业务强相关的依赖如下aws-config { version 1.0.1, features [behavior-version-latest] }SDK 配置加载aws-sdk-rds { version 1.3.0 }RDS/Aurora 服务 SDKtokiofull、test-util特性异步运行时test-util用于测试中对虚拟时钟的控制secrecy 0.8.0用SecretString包装主用户密码避免明文散落在内存调试信息中inquire 0.6.2交互式命令行选择/输入引擎族、版本、实例规格、用户名密码等mockall 0.11.4单元测试 mocksdk-examples-test-utils { path ../../test-utils }提供Waiter轮询工具位于 rustv1/test-utils。Hello Aurora三分钟跑通 DescribeDBClustershello-world.rs 是进入 Aurora 的起点演示最基本的DescribeDBClusters调用#[tokio::main] async fn main() - Result(), Error { tracing_subscriber::fmt::init(); let sdk_config aws_config::from_env().load().await; let client Client::new(sdk_config); let describe_db_clusters_output client .describe_db_clusters() .send() .await .map_err(|e| Error(e.to_string()))?; println!( Found {} clusters:, describe_db_clusters_output.db_clusters().len() ); for cluster in describe_db_clusters_output.db_clusters() { let name cluster.database_name().unwrap_or(Unknown); let engine cluster.engine().unwrap_or(Unknown); let id cluster.db_cluster_identifier().unwrap_or(Unknown); let class cluster.db_cluster_instance_class().unwrap_or(Unknown); println!(\tDatabase: {name}); println!(\t Engine: {engine}); println!(\t ID: {id}); println!(\tInstance: {class}); } Ok(()) }这段代码展示了 SDK for Rust 的标准用法aws_config::from_env().load().await加载凭据与区域配置 → 构建Client→ 链式设置请求参数此处为空→send().await发起调用。运行方式cargo run --bin hello-world输出会列出当前账号下所有 Aurora/RDS 集群的数据库名、引擎、集群标识符与实例规格没有集群时会打印Found 0 clusters:。README 将其定位为 Get started 示例对应的服务动作就是DescribeDBClusters。核心场景Learn the basics完整走一遍集群生命周期Aurora 示例 README 的 Basics 部分定义了一个名为 Learn the basics 的场景对应 aurora_scenario/mod.rs 与 aurora-scenario.rs其目标操作序列为创建一个自定义 Aurora DB 集群参数组并设置参数值创建一个使用该参数组的 DB 集群创建一个包含数据库的 DB 实例对 DB 集群创建快照然后清理资源。入口二进制为aurora-scenario运行方式cargo run --bin aurora-scenario整个程序通过inquire提供交互式提示按以下流程推进。第一步选择引擎族与版本get_engines set_engineprepare_scenario先调用scenario.get_engines()内部执行DescribeDbEngineVersions(Engineaurora-mysql)把返回结果中每个DBEngineVersion的db_parameter_group_family与engine_version组装成HashMapString, VecString引擎族 → 可用版本列表从源码注释可知典型结果形如{aurora-mysql8.0, aurora-mysql5.7}。随后用inquire::Select让用户先选引擎族、再选版本。选定引擎与版本后调用set_engine(engine, version)其核心逻辑在 aurora_scenario/mod.rspub async fn set_engine(mut self, engine: str, version: str) - Result(), ScenarioError { self.engine_family Some(engine.to_string()); self.engine_version Some(version.to_string()); let create_db_cluster_parameter_group self .rds .create_db_cluster_parameter_group( DB_CLUSTER_PARAMETER_GROUP_NAME, DB_CLUSTER_PARAMETER_GROUP_DESCRIPTION, engine, ) .await; ... }其中三个常量定义在 mod.rsDB_ENGINE aurora-mysqlDB_CLUSTER_PARAMETER_GROUP_NAME RustSDKCodeExamplesDBParameterGroupDB_CLUSTER_PARAMETER_GROUP_DESCRIPTION Parameter Group created by Rust SDK Code Example另有DB_CLUSTER_IDENTIFIER RustSDKCodeExamplesDBCluster与DB_INSTANCE_IDENTIFIER RustSDKCodeExamplesDBInstance。set_engine对DBParameterGroupAlreadyExists错误做了幂等处理若参数组已存在则直接跳过创建保证场景可重复运行。第二步选择实例规格get_instance_classes引擎确定后prepare_scenario调用scenario.get_instance_classes()内部执行DescribeOrderableDbInstanceOptions(Engineaurora-mysql, EngineVersion所选版本)使用分页器收集所有可用规格并过滤storage_type aurora的项后提取db_instance_class见 mod.rs。用户通过交互式选择指定实例规格如m5.large测试用例中即使用该规格。第三步展示并修改集群参数cluster_parameters update_auto_incrementprepare_cluster先调用show_parameters其内部执行DescribeDbClusterParameters(DBClusterParameterGroupName...)由于参数列表很长底层封装使用分页器收集全部页见 rds.rs随后在场景层用phf静态集合FILTER_PARAMETER_NAMES只筛选出两个关键参数mod.rsauto_increment_offsetauto_increment_increment筛选结果被包装为AuroraScenarioParameter以参数名: 当前值 (allowed: 允许值)的格式打印方便用户看到可选项。接着程序用inquire::Text分别询问这两个参数的更新值默认auto_increment_offset5、auto_increment_increment3随后调用scenario.update_auto_increment(offset, increment)。这一步的核心在 mod.rs通过一次ModifyDbClusterParameterGroup调用同时修改两个参数且都使用ApplyMethod::Immediate立即生效无需重启实例let modify_db_cluster_parameter_group self .rds .modify_db_cluster_parameter_group( DB_CLUSTER_PARAMETER_GROUP_NAME, vec![ Parameter::builder() .parameter_name(auto_increment_offset) .parameter_value(format!({offset})) .apply_method(aws_sdk_rds::types::ApplyMethod::Immediate) .build(), Parameter::builder() .parameter_name(auto_increment_increment) .parameter_value(format!({increment})) .apply_method(aws_sdk_rds::types::ApplyMethod::Immediate) .build(), ], ) .await;修改完成后再次调用show_parameters展示新值形成读取-修改-回读验证的闭环。第四步设置数据库登录信息程序提示输入数据库用户名默认testuser与密码密码通过inquire的 validator 强制至少 8 个字符否则拒绝输入密码以SecretString包装后保存到场景对象中见 aurora-scenario.rs。第五步创建集群与实例并等待就绪start_cluster_and_instancerun_instance首先调用scenario.start_cluster_and_instance()这是整个场景中最复杂的步骤mod.rs内部完成创建 DB 集群CreateDBCluster传入集群标识符、参数组名、引擎aurora-mysql、所选版本、主用户名与主用户密码在集群内创建 DB 实例CreateDBInstance传入集群标识符、实例标识符、实例规格与引擎等待就绪因为集群创建最长可能耗时 20 分钟代码用sdk-examples-test-utils提供的Waiter构建最长 20 分钟的轮询Duration::from_secs(20 * 60)在循环中同时检查DescribeDbClusters返回的集群状态DescribeDbInstances中所有实例的DBInstanceStatus AvailableDescribeDbClusterEndpoints中所有端点的status available。let instances_available instance .unwrap() .db_instances() .iter() .all(|instance| instance.db_instance_status() Some(Available)); let endpoints_available endpoints .unwrap() .db_cluster_endpoints() .iter() .all(|endpoint| endpoint.status() Some(available)); if instances_available endpoints_available { return Ok(()); }只有三者全部就绪才算集群可用这是 Aurora 集群 实例 端点 三态并发的典型等待逻辑。轮询期间某次DescribeDbClusters失败只会记录 warn 日志并继续下一次循环而不是直接终止。第六步输出连接串并使用数据库集群就绪后scenario.connection_string()从DescribeDbClusters结果中取出集群端点、端口与主用户名拼出可直接使用的 MySQL 客户端命令mod.rsOk(format!(mysql -h {endpoint} -P {port} -u {username} -p))程序打印该连接串并暂停等待用户操作数据库Use the database with the connection string. When youre finished, press enter key to continue.。第七步创建集群快照snapshot用户按回车后程序询问快照名称默认ScenarioRun然后调用scenario.snapshot(name)内部执行CreateDbClusterSnapshot快照标识符由集群标识符 _ 用户输入名拼接而成如RustSDKCodeExamplesDBCluster_ScenarioRun成功后打印快照 ARNmod.rs。第八步清理资源clean_up场景最后调用scenario.clean_up()mod.rs按依赖顺序逆向删除并等待任何一步失败都会被收集进VecScenarioError删除 DB 实例DeleteDbInstance使用skip_final_snapshot(true)随后轮询DescribeDbInstances直到该集群下不再有实例或状态离开Deleting删除 DB 集群DeleteDbCluster同样skip_final_snapshot(true)随后轮询DescribeDbClusters直到集群列表为空删除 DB 集群参数组DeleteDbClusterParameterGroup。main中所有阶段产生的告警统一收集到Warnings结构并最终汇总打印若任何一步失败进程以非零状态退出见 aurora-scenario.rs。底层封装层rds.rs 中的全部 API 动作src/rds.rs 将所有aws_sdk_rds调用收敛到一个RdsImpl结构持有RdsClient每个方法都用// snippet-start:[rust.aurora.xxx.wrapper]标注便于文档自动抽取。README 的 Single actions 清单与其一一对应API 动作封装方法位置DescribeDBEngineVersionsdescribe_db_engine_versions(engine)rds.rsDescribeOrderableDBInstanceOptionsdescribe_orderable_db_instance_options(engine, engine_version)分页收集rds.rsCreateDBClusterParameterGroupcreate_db_cluster_parameter_group(name, description, family)rds.rsDescribeDBClustersdescribe_db_clusters(id)rds.rsDescribeDBClusterParametersdescribe_db_cluster_parameters(name)分页收集rds.rsModifyDBClusterParameterGroupmodify_db_cluster_parameter_group(name, parameters)rds.rsCreateDBClustercreate_db_cluster(name, parameter_group, engine, version, username, password)rds.rsCreateDBInstancecreate_db_instance(cluster_name, instance_name, instance_class, engine)rds.rsDescribeDBInstances单实例describe_db_instance(instance_identifier)rds.rsCreateDBClusterSnapshotsnapshot_cluster(db_cluster_identifier, snapshot_name)rds.rsDescribeDBInstances全量describe_db_instances()rds.rsDescribeDBClusterEndpointsdescribe_db_cluster_endpoints(cluster_identifier)rds.rsDeleteDBInstancedelete_db_instance(instance_identifier)skip_final_snapshot(true)rds.rsDeleteDBClusterdelete_db_cluster(cluster_identifier)skip_final_snapshot(true)rds.rsDeleteDBClusterParameterGroupdelete_db_cluster_parameter_group(name)rds.rs几个值得注意的实现细节密码处理create_db_cluster接收SecretString仅在发送请求时通过password.expose_secret()取出明文避免密码长时间驻留在普通字符串中分页器复用describe_orderable_db_instance_options与describe_db_cluster_parameters都使用into_paginator().send().try_collect()一次性拉取全部结果省去手动翻页代码删除均跳过最终快照delete_db_instance与delete_db_cluster都显式设置skip_final_snapshot(true)确保清理流程不会因额外快照而拖慢或残留资源。测试与验证mockall 驱动的单元测试Aurora 示例 README 明确提示运行测试可能产生 AWS 账户费用但这里说的测试主要指集成测试而仓库中的单元测试不会产生费用。rds.rs中通过条件编译接入 mock#[cfg(test)] use mockall::automock; #[cfg(test)] pub use MockRdsImpl as Rds; #[cfg(not(test))] pub use RdsImpl as Rds;即测试编译时用MockRdsImpl替换真实的RdsImpl。全部单元测试位于 src/aurora_scenario/tests.rs覆盖场景的每一条成功与失败路径例如test_scenario_set_engine/test_scenario_set_engine_param_group_exists验证创建参数组的参数匹配与DBParameterGroupAlreadyExists错误处理test_scenario_get_engines验证引擎族到版本列表的映射组装mock 返回f1/f2两个族并断言输出test_scenario_get_instance_classes验证仅保留storage_type aurora的实例规格mock 中aurora-iopt1被过滤掉test_scenario_update_auto_increment断言ModifyDbClusterParameterGroup收到的参数列表与ApplyMethod::Immediate完全一致offset10、increment20test_scenario_connection_string断言拼出的连接串为mysql -h test_endpoint -P 3306 -u test_username -ptest_start_cluster_and_instance使用tokio::time::pause()/advance()虚拟时钟推进等待循环模拟集群与实例进入可用状态test_scenario_clean_up/test_scenario_clean_up_errors验证按实例→集群→参数组顺序删除以及删除失败时错误被收集为VecScenarioErrortest_scenario_snapshot验证快照标识符拼接格式{cluster}_{name}。运行单元测试cargo test按 rustv1/README.md 的说明单元测试不会对 AWS 账号造成任何变更或费用集成测试可能产生费用可通过cargo test -- --ignored单独运行。运行示例的完整命令汇总目的命令快速查看现有集群Hello Auroracargo run --bin hello-world运行完整集群生命周期场景cargo run --bin aurora-scenario运行单元测试无费用cargo test运行集成测试可能产生费用cargo test -- --ignored场景运行全程交互注意密码必须不少于 8 个字符由于集群创建最长可能耗时 20 分钟请为等待阶段预留足够时间。注意事项与最佳实践费用创建 Aurora 集群、实例、快照以及运行相关测试都会产生 AWS 账户费用建议在明确了解计费规则的前提下运行并在演示结束后确保clean_up执行成功避免残留资源持续计费最小权限建议按最小权限原则授予运行代码所需的 IAM 权限仅开放rds:Describe*、rds:Create*、rds:Modify*、rds:Delete*中必要的动作区域可用性本示例代码未在每个 AWS 区域实测部分区域可能不提供 Aurora 或特定引擎版本请以所选区域的实际支持情况为准重入安全场景为参数组创建设计了幂等逻辑已存在则跳过但重复运行时若集群/实例仍存在CreateDBCluster与CreateDBInstance可能返回已存在错误此时需先清理上一次运行残留参数组语义auto_increment_offset与auto_increment_increment属于 MySQL 的自增步进与起始偏移参数在 Aurora 集群参数组中修改后仅对新建立的连接生效示例选择ApplyMethod::Immediate以演示立即生效的用法。延伸阅读指引总览rustv1目录下的 README.md 说明了整个 Rust 示例代码库的布局、环境变量与运行约定场景编排src/aurora_scenario/mod.rs 与可执行入口 src/bin/aurora-scenario.rsAPI 封装src/rds.rs测试用例src/aurora_scenario/tests.rs轮询工具sdk-examples-test-utils的Waiter实现位于 rustv1/test-utils。如需进一步了解 Aurora 的架构与 API 细节可查阅 AWS 官方的 Aurora 用户指南、Aurora API 参考以及 SDK for Rust 的 Aurora 参考文档aws-sdk-aurora/aws-sdk-rdscrate 文档。赞分享示例工程教程后端【免费下载链接】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 操作 Amazon EC2从 Hello World 到完整实例生命周期管理使用 AWS SDK for Rust 操作 Amazon EC2从 Hello World 到完整实例生命周期管理 本文基于 AWS Code Exampl示例工程教程后端使用 AWS SDK for C 操作 Amazon RDS从 Hello World 到 DB 实例全生命周期管理使用 AWS SDK for C 操作 Amazon RDS从 Hello World 到 DB 实例全生命周期管理 本文基于 cpp/example_c示例工程教程后端使用 AWS SDK for Kotlin 管理 Amazon EC2从 Hello World 到完整实例生命周期场景使用 AWS SDK for Kotlin 管理 Amazon EC2从 Hello World 到完整实例生命周期场景 本文基于 aws doc sdk e示例工程教程后端上一篇番茄小说下载器终极指南免费保存全网小说到本地下一篇番茄小说下载器完整指南5种格式随心保存的免费开源工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

SQL Server 2025安装实战:从环境准备到远程连接排错 2026/9/28 6:35:42

SQL Server 2025安装实战:从环境准备到远程连接排错

把时间拨回2025年的某个工作周:我在帮客户部署一套新的业务系统,对方指着服务器说“数据库就用你们最顺手的那套吧”。我没有犹豫,直接装了SQL Server 2025——作为微软数据库产品线的最新成员,它继承了2022的稳定性,又…

阅读更多 →
双指针原地算法:力扣26/80题有序数组去重模板全解析 2026/9/28 6:35:42

双指针原地算法:力扣26/80题有序数组去重模板全解析

刷力扣的人,早晚都会撞上这道题。26题“删除有序数组中的重复项”是面试里出现频率极高的基础题,而80题“删除有序数组中的重复项 II”则是它的直接变体,把“每个元素最多出现一次”改成“最多出现两次”。两道题放在一起刷,其实是…

阅读更多 →
锂电池主动均衡电路设计实战:反激变压器与MOSFET驱动全解析 2026/9/28 6:35:41

锂电池主动均衡电路设计实战:反激变压器与MOSFET驱动全解析

做了这么久的BMS相关硬件,我一直觉得主动均衡是个“看起来不难,上手全是坑”的方向。最开始我也想偷懒,直接上被动均衡,电阻把高容量电芯的能量烧掉,给低容量电芯“拖延时间”。但实测下来,大电流被动均衡发…

阅读更多 →
VisionTransformer图像去雾:Python源码与实战解析 2026/9/28 6:35:41

VisionTransformer图像去雾:Python源码与实战解析

简介:图像去雾是典型的病态反问题,传统方法依赖暗通道先验估计透射率,在天空、白墙等区域容易失效。VisionTransformer凭借全局自注意力机制,能够有效建模长程依赖,对不均匀雾和复杂场景表现出更强的稳定性。本文从大气…

阅读更多 →
做一个小说网站需要多少钱?别被坑,教你怎么选不挂马 2026/9/28 6:35:33

做一个小说网站需要多少钱?别被坑,教你怎么选不挂马

做一个小说网站需要多少钱?别被坑,教你怎么选不挂马 昨晚刚给一个做网文平台的客户做完代码审计,心有余悸。他们那个站被黑得稀碎,首页挂满了赌博链接,后台数据库被拖了个底朝天,最要命的是用户支付记录全泄露了。客户急得跳脚,问我为什么之前没发现,…

阅读更多 →
拒绝踩坑:ccg搭建wordpress从零搭建实战指南 2026/9/28 6:35:32

拒绝踩坑:ccg搭建wordpress从零搭建实战指南

拒绝踩坑:ccg搭建wordpress从零搭建实战指南 域名买错了?服务器配置全乱?很多项目经理在接手“ccg搭建wordpress”这种需求时,第一反应是头大。明明只是装个博客或官网,怎么搞出这么高的门槛?其实, 域名服务器搞不懂…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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