新闻详情

新闻详情

首页 / 资讯中心 / 详情

Amazon RDS 的 Java 2.x SDK 实战:从 Hello RDS 到完整数据库生命周期场景

发布时间:2026/9/25 2:40:47来源:尧图网络
Amazon RDS 的 Java 2.x SDK 实战:从 Hello RDS 到完整数据库生命周期场景
示例工程教程后端【免费下载链接】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 官方代码示例仓库aws-doc-sdk-examples中javav2/example_code/rds模块的文档与源码系统讲解如何使用 AWS SDK for Java 2.x 管理 Amazon RDS包括查询实例、创建/修改/删除数据库实例、管理参数组、创建快照以及生成 IAM 数据库认证令牌。读完后你将掌握 RDS 客户端的构建方式、各核心 API 的调用参数以及一个可运行的 14 步端到端场景从创建参数组到删除实例的完整生命周期。模块概览与运行须知该模块展示了如何使用 AWS SDK for Java 2.x 操作 Amazon Relational Database ServiceAmazon RDS。正如 README 所述Amazon RDS 是一项让你更轻松地搭建、运维和扩展云上关系型数据库的 Web 服务。在动手之前README 中列出了几条重要的注意事项务必了解运行这些代码可能对你的 AWS 账户产生费用例如创建真实数据库实例、存储卷等运行测试同样可能产生费用建议遵循最小权限原则授予代码所需 IAM 权限最多只授予执行任务所需的最小权限这些代码并未在每个 AWS Region 都经过测试部分区域可能不提供服务。前置条件与环境要求示例要求先完成 Java SDK 2.x 开发环境搭建包括配置 AWS 凭据完整前置条件见 javav2 目录的 README。从模块自身的 pom.xml 可以确认具体技术栈要求Java 版本java.version设置为21编译 source/target 均为 21SDK 版本通过software.amazon.awssdk:bomBOM统一管理版本当前锁定为2.35.10核心依赖rdsRDS 客户端、secretsmanager获取数据库凭据、rdsdataRDS Data API、com.google.code.gson解析 Secrets Manager 返回的 JSON 凭据日志Log4j 2BOM 版本 2.23.1 SLF4J 2测试JUnit Jupiter 5.11.4Maven Surefire 3.5.2。Hello Amazon RDS查询数据库实例入门示例是 DescribeDBInstances对应 APIDescribeDBInstances它演示了最基础的调用流程构建RdsClient→ 调用 API → 遍历结果 → 关闭客户端。// snippet-start:[rds.java2.describe_instances.main] // snippet-start:[rds.java2.describe_instances.import] import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.rds.RdsClient; import software.amazon.awssdk.services.rds.model.DescribeDbInstancesResponse; import software.amazon.awssdk.services.rds.model.DBInstance; import software.amazon.awssdk.services.rds.model.RdsException; import java.util.List; // snippet-end:[rds.java2.describe_instances.import] public class DescribeDBInstances { public static void main(String[] args) { Region region Region.US_EAST_1; RdsClient rdsClient RdsClient.builder() .region(region) .build(); describeInstances(rdsClient); rdsClient.close(); } public static void describeInstances(RdsClient rdsClient) { try { DescribeDbInstancesResponse response rdsClient.describeDBInstances(); ListDBInstance instanceList response.dbInstances(); for (DBInstance instance : instanceList) { System.out.println(Instance ARN is: instance.dbInstanceArn()); System.out.println(The Engine is instance.engine()); System.out.println(Connection endpoint is instance.endpoint().address()); } } catch (RdsException e) { System.out.println(e.getLocalizedMessage()); System.exit(1); } } } // snippet-end:[rds.java2.describe_instances.main]几个值得注意的实现细节客户端通过RdsClient.builder().region(region).build()创建Region 在本例中写死为US_EAST_1实际使用时建议替换为自有实例所在区域describeDBInstances()不传参数时返回账户下全部实例响应体通过response.dbInstances()取出ListDBInstance每个实例可读取 ARN、引擎类型engine()与连接端点endpoint().address()端点是后续建立数据库连接的关键信息所有业务方法都捕获RdsException并打印本地化错误信息——这是本模块统一的异常处理模式。Learn the basics14 步端到端场景RDSScenario 是模块中体量最大的示例演示一个完整的数据库生命周期。根据 README 与源码中的类注释它依次完成 14 项任务返回可用的 DB 引擎列表选择引擎族并创建自定义 DB 参数组获取参数组列表获取组内参数修改auto_increment_offset参数读取并展示更新后的参数值获取允许的引擎版本列表获取所选引擎可用的 micro 实例规格列表创建一个包含 MySQL 数据库、并应用该参数组的 RDS 实例等待实例就绪并打印连接端点创建实例快照等待快照就绪删除 RDS 实例删除参数组。命令行参数与 Secrets Manager 凭据RDSScenario需要 6 个命令行参数源码中的 usage 文本Usage: dbGroupName dbParameterGroupFamily dbInstanceIdentifier dbName dbSnapshotIdentifier secretName Where: dbGroupName - The database group name. dbParameterGroupFamily - The database parameter group name (for example, mysql8.0). dbInstanceIdentifier - The database instance identifier dbName - The database name. dbSnapshotIdentifier - The snapshot identifier. secretName - The name of the AWS Secrets Manager secret that contains the database credentials一个关键前置依赖示例要求预先在 AWS Secrets Manager 中创建包含数据库凭据的 secret否则无法运行。main方法会调用getSecretValues(secretName)获取 secret 字符串并用 Gson 反序列化为User对象取出username/password作为创建实例时的masterUsername/masterUserPasswordGson gson new Gson(); User user gson.fromJson(String.valueOf(getSecretValues(secretName)), User.class); String masterUsername user.getUsername(); String masterUserPassword user.getPassword(); Region region Region.US_WEST_2; RdsClient rdsClient RdsClient.builder() .region(region) .build();从源码结构看secret 中的 JSON 需要包含username、password字段以匹配 User 类。此外getSecretValues使用的SecretsManagerClient与RdsClient都硬编码为US_WEST_2区域跨区域运行时需要自行调整。创建参数组并修改参数场景第 2 步调用CreateDBParameterGroup核心请求构造如下RDSScenario.java#L552-L568CreateDbParameterGroupRequest groupRequest CreateDbParameterGroupRequest.builder() .dbParameterGroupName(dbGroupName) .dbParameterGroupFamily(dbParameterGroupFamily) .description(Created by using the AWS SDK for Java) .build(); CreateDbParameterGroupResponse response rdsClient.createDBParameterGroup(groupRequest);随后第 4、5 步分别用DescribeDbParametersflag为 0 时不带过滤非 0 时追加.source(user)只看用户修改项和ModifyDbParameterGroup修改参数Parameter parameter1 Parameter.builder() .parameterName(auto_increment_offset) .applyMethod(immediate) .parameterValue(5) .build(); ListParameter paraList new ArrayList(); paraList.add(parameter1); ModifyDbParameterGroupRequest groupRequest ModifyDbParameterGroupRequest.builder() .dbParameterGroupName(dbGroupName) .parameters(paraList) .build(); ModifyDbParameterGroupResponse response rdsClient.modifyDBParameterGroup(groupRequest);值得注意的是applyMethod(immediate)该参数属于“立即生效”类型无需重启实例若目标参数只能在重启后生效则应改用restart-required。查询引擎版本与可用实例规格第 7 步getAllowedEngines通过DescribeDbEngineVersionsRequest限定.engine(mysql)与.dbParameterGroupFamily(dbParameterGroupFamily)查询允许的引擎版本第 8 步getMicroInstances调用describeOrderableDBInstanceOptions查询 mysql 引擎可订购的实例选项逐项打印engineVersion()与engine()描述。第 1 步describeDBEngines则用defaultOnly(true)、maxRecords(20)拉取默认引擎版本并打印参数组族名RDSScenario.java#L571-L595。创建 MySQL 实例与轮询等待第 9 步的CreateDBInstance请求是本模块最完整的实例创建示例RDSScenario.java#L381-L414CreateDbInstanceRequest instanceRequest CreateDbInstanceRequest.builder() .dbInstanceIdentifier(dbInstanceIdentifier) .allocatedStorage(100) .dbName(dbName) .engine(mysql) .dbInstanceClass(db.t3.medium) // Updated to a supported class .engineVersion(8.0.32) // Updated to a supported version .storageType(gp2) // Changed to General Purpose SSD (gp2) .masterUsername(userName) .masterUserPassword(userPassword) .build(); CreateDbInstanceResponse response rdsClient.createDBInstance(instanceRequest); System.out.print(The status is response.dbInstance().dbInstanceStatus()); return response.dbInstance().dbInstanceArn();请求参数要点参数取值说明dbInstanceIdentifier命令行参数实例唯一标识allocatedStorage100初始存储GiBdbName命令行参数主数据库名enginemysql数据库引擎dbInstanceClassdb.t3.medium实例规格源码注释标注为“受支持的类”engineVersion8.0.32MySQL 引擎版本storageTypegp2通用型 SSD 存储masterUsername/masterUserPassword来自 Secrets Manager主用户凭据第 10 步waitForInstanceReady展示了本模块的等待范式不依赖 SDK 内置 waiter而是while循环调用describeDBInstances检查dbInstanceStatus()是否包含available每次轮询间隔sleepTime默认 20 秒成功后打印连接端点DescribeDbInstancesRequest instanceRequest DescribeDbInstancesRequest.builder() .dbInstanceIdentifier(dbInstanceIdentifier) .build(); String endpoint ; while (!instanceReady) { DescribeDbInstancesResponse response rdsClient.describeDBInstances(instanceRequest); for (DBInstance instance : response.dbInstances()) { instanceReadyStr instance.dbInstanceStatus(); if (instanceReadyStr.contains(available)) { endpoint instance.endpoint().address(); instanceReady true; } else { System.out.print(.); Thread.sleep(sleepTime * 1000); } } }快照创建与轮询第 11 步createSnapshot只传两个字段——dbInstanceIdentifier与dbSnapshotIdentifier返回体中通过response.dbSnapshot().dbiResourceId()打印快照资源 IDRDSScenario.java#L327-L343。第 12 步waitForSnapshotReady用DescribeDbSnapshotsRequest同时指定快照标识和实例标识轮询snapshot.status()直到包含available。清理资源删除实例再删除参数组第 13 步deleteDatabaseInstance的关键参数RDSScenario.java#L271-L288DeleteDbInstanceRequest deleteDbInstanceRequest DeleteDbInstanceRequest.builder() .dbInstanceIdentifier(dbInstanceIdentifier) .deleteAutomatedBackups(true) .skipFinalSnapshot(true) .build();deleteAutomatedBackups(true)删除时一并清除自动备份避免遗留存储skipFinalSnapshot(true)跳过删除前的最终快照进一步避免费用。第 14 步deleteParaGroup的源码注释明确说明了一个重要的资源依赖顺序必须先删除数据库实例再删除参数组若实例仍存在就尝试删除参数组会抛出异常。该方法的实现先循环调用describeDBInstances比对 ARN确认目标实例已从列表中消失后才执行deleteDBParameterGroup// Delete the parameter group after database has been deleted. // An exception is thrown if you attempt to delete the para group while database exists. while (!isDataDel) { DescribeDbInstancesResponse response rdsClient.describeDBInstances(); for (DBInstance instance : response.dbInstances()) { if (instance.dbInstanceArn().compareTo(dbARN) 0) { System.out.println(dbARN still exists); } } Thread.sleep(sleepTime * 1000); } DeleteDbParameterGroupRequest parameterGroupRequest DeleteDbParameterGroupRequest.builder() .dbParameterGroupName(dbGroupName) .build(); rdsClient.deleteDBParameterGroup(parameterGroupRequest);Single actions单 API 示例速查README 的 “Single actions” 一节列出了逐个 RDS API 的独立示例。这些类都是可独立运行的main程序统一模式为校验命令行参数 → 构建指定区域的RdsClient→ 调用单个 API → 捕获RdsException。CreateDBInstanceCreateDBInstance 接收dbInstanceIdentifier dbName secretName三个参数同样依赖 Secrets Manager 提供主用户凭据创建的实例配置与场景一致mysql 8.0.32、db.t3.medium、100 GiB gp2 存储。其独特之处是在创建后直接内联了waitForInstanceReady轮询循环一步完成“创建并等待就绪”。DeleteDBInstanceDeleteDBInstance 接收单个参数dbInstanceIdentifier请求中设置.deleteAutomatedBackups(true)与.skipFinalSnapshot(true)打印删除后实例状态。DescribeAccountAttributesDescribeAccountAttributes 无需任何参数调用describeAccountAttributes()后遍历response.accountQuotas()打印账户配额名称accountQuotaName()与最大值max()——可用于查看当前账户可创建的 DB 实例数、快照数等 RDS 配额上限。ModifyDBInstanceModifyDBInstance 接收dbInstanceIdentifier与新的masterUserPassword两个参数演示修改实例属性ModifyDbInstanceRequest modifyDbInstanceRequest ModifyDbInstanceRequest.builder() .dbInstanceIdentifier(dbInstanceIdentifier) .publiclyAccessible(true) .masterUserPassword(masterUserPassword) .build(); ModifyDbInstanceResponse instanceResponse rdsClient.modifyDBInstance(modifyDbInstanceRequest);源码注释标明其演示意图是“通过修改主密码来修改 DB 实例”修改主密码属于需要在重启后生效的属性实际使用时需配合applyImmediately或安排维护窗口重启。注意源码 usage 文本中对第二个参数的描述与实际参数名存在笔误以代码中的args[1]为masterUserPassword为准。RebootDBInstanceRebootDBInstance 接收单个dbInstanceIdentifier构造RebootDbInstanceRequest调用rebootDBInstance成功后打印实例 ARN 与“was rebooted”提示。GenerateRDSAuthTokenGenerateRDSAuthToken 是模块中最有特色的示例它演示生成RDS 数据库认证IAM 身份验证令牌使应用可以不用数据库密码、改用 IAM 签名生成的临时令牌连接 MySQLRdsUtilities utilities rdsClient.utilities(); GenerateAuthenticationTokenRequest tokenRequest GenerateAuthenticationTokenRequest.builder() .credentialsProvider(ProfileCredentialsProvider.create()) .username(masterUsername) .port(3306) .hostname(dbInstanceIdentifier) .build(); return utilities.generateAuthenticationToken(tokenRequest);要点令牌生成不走网络请求而是通过RdsClient派生出的RdsUtilities本地签名完成因此utilities.generateAuthenticationToken不会触发 RDS API 调用命令行为dbInstanceIdentifier masterUsername两个参数使用ProfileCredentialsProvider.create()从 AWS 配置文件读取凭据参与签名port(3306)表示 MySQL 端口生成的令牌可作为临时密码用于数据库连接字符串。其余 API 的位置README 中还列出了CreateDBSnapshot、CreateDBParameterGroup、DeleteDBParameterGroup、DescribeDBEngineVersions、DescribeDBParameterGroups、DescribeDBParameters、ModifyDBParameterGroup等 API——这些实现均内嵌在 RDSScenario 中并带有独立 snippet 标记如rds.java2.scenario.create_snapshot.main前文“14 步端到端场景”一节已给出其源码与参数说明。测试与运行测试类位于 AmazonRDSTest。运行测试的具体步骤见 javav2 目录 README 的 Tests 章节。再次提醒⚠ 运行这些测试可能对你的 AWS 账户产生费用因为测试会真实创建和删除 RDS 资源。从 metadata.yaml 可以看到模块登记的可执行入口CreateDBInstance、CreateDBSnapshot、DeleteDBInstance、DescribeAccountAttributes、DescribeDBInstances、ModifyDBInstance、RebootDBInstance以及测试类均标注服务为rds。典型的本地运行方式为 Maven 编译后执行指定类以场景为例mvn compile exec:java \ -Dexec.mainClasscom.example.rds.RDSScenario \ -Dexec.argsdbGroupName dbParameterGroupFamily dbInstanceIdentifier dbName dbSnapshotIdentifier secretName运行前请确保AWS 凭据已按 SDK 推荐方式配置目标区域示例硬编码US_WEST_2/US_EAST_1内已创建好所需的 Secrets Manager secret且实例标识、快照标识等名称在区域内唯一避免与既有资源冲突。补充资源README 末尾列出的官方文档入口均为 AWS 官方在线文档此处仅作指引Amazon RDS User GuideRDS 用户指南Amazon RDS API ReferenceRDS API 参考SDK for Java 2.x 的 RDS 包参考Javadoc本模块的代码遵循 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 .NET 操作 Amazon RDS从 Hello 示例到实例生命周期管理实战使用 AWS SDK for .NET 操作 Amazon RDS从 Hello 示例到实例生命周期管理实战 导读 本文基于 aws doc sdk exam示例工程教程后端使用Java SDK 2.x操作Amazon RDS的完整指南使用Java SDK 2.x操作Amazon RDS的完整指南 还在为如何高效管理Amazon RDS数据库实例而烦恼本文将为你提供一份完整的Java SDK示例工程教程后端使用 AWS SDK for C 操作 Amazon RDS从 Hello World 到 DB 实例全生命周期管理使用 AWS SDK for C 操作 Amazon RDS从 Hello World 到 DB 实例全生命周期管理 本文基于 cpp/example_c示例工程教程后端上一篇如何快速上手Konstellate5分钟打造你的第一个Kubernetes应用可视化项目下一篇tinker-manager版本更新日志新功能与改进全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

创维E900V22D刷机全攻略:S905L3SB芯片方案避坑指南 2026/9/25 4:01:33

创维E900V22D刷机全攻略:S905L3SB芯片方案避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
拒绝盗版影视源码,合规搭建私人视频点播站的正确姿势 2026/9/25 4:01:33

拒绝盗版影视源码,合规搭建私人视频点播站的正确姿势

抱歉,这个标题我不能写。“神马影视8.8 2026版”这类影视源码系统,在公开语境里基本都指向同一类东西:聚合盗版片源、绕开版权方授权、靠广告和会员充值变现的盗版影视CMS源码。这类系统本身就涉及版权侵权,部署出来大概率也是用于…

阅读更多 →
AI智能体一键代劳:从搭建到安全护栏的实战指南 2026/9/25 4:01:33

AI智能体一键代劳:从搭建到安全护栏的实战指南

1. 从“一键代劳”说起:AI助手到底在帮我们做什么第一次看到“一键代劳一切”这个说法,我脑子里蹦出来的不是科幻电影里的贾维斯,而是自己电脑上那个帮我自动整理会议纪要、定时抓取行业资讯、甚至能替我回复常规邮件的脚本集合。这两年AI助手…

阅读更多 →
html-ppt-skill 主题系统完全指南:36 套 CSS 主题、Token 覆盖机制与一键切换实战 2026/9/25 4:01:27

html-ppt-skill 主题系统完全指南:36 套 CSS 主题、Token 覆盖机制与一键切换实战

AI 技能/插件前端 【免费下载链接】html-ppt-skill HTML PPT Studio — AgentSkill with 24 themes, 31 layouts, 20 animations for building professional HTML presentations 项目地址: https://gitcode.com/gh_mirrors/ht/html-ppt-skill 点击查看 免费下载 ht…

阅读更多 →
Harness如何将Claude Code转化为可编排的AI基础设施 2026/9/25 4:01:27

Harness如何将Claude Code转化为可编排的AI基础设施

1. 这不是工具消亡史,而是开发者工作流的“静默进化”过去一年,我几乎每天都会打开 Slack 查看团队消息,但 Claude Code 的图标在 Dock 栏里积了灰——不是它不好用,而是它已经“退场”成了背景音。标题里说的“70% 的工作都不需要…

阅读更多 →
2026学术论文降重神器与实战策略全解析 2026/9/25 4:01:20

2026学术论文降重神器与实战策略全解析

1. 项目概述作为一名经历过学术写作洗礼的老手,我深知论文降重过程中的种种痛点。每到毕业季,总能看到学弟学妹们熬夜改论文、反复查重的焦虑场景。2026届的学术党们,你们有福了!经过半年多的实测对比,我整理出了这份真…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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