关于 rds-oss
面向 Amazon RDS 的 MySQL、MariaDB 和 PostgreSQL 引擎提供顾问技能,涵盖实例创建、升级、承诺定价、RDS Proxy 评估及 Blue/Green 部署。它为生产配置和规划提供检查结果、成本估算与命令,部分变更仅提供建议。
主要功能
- 01规划生产实例创建
- 02执行升级预检并整理检查清单
- 03估算 RI 与 Database Savings Plan
- 04评估 RDS Proxy 与连接风险
- 05规划 Blue/Green 部署和 DDL
适用场景
- 01准备生产环境 RDS 实例
- 02检查数据库升级目标和风险
- 03评估稳定负载的承诺定价
- 04规划低停机时间的架构变更
MCP 相关
推荐使用 AWS MCP 服务执行命令,但并非必需;也可通过 AWS CLI 执行操作。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ aws/ agent-toolkit-for-aws --skill rds-oss安装后在 Claude Code 中输入/rds-oss确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/bluegreen-advisor-workflow.mdbluegreen-ddl-mysql.mdbluegreen-ddl-postgresql.mdcommitment-basics.mdcommitment-pricing-workflow.mdcommitment-scenarios.mdproxy-advisor-workflow.mdproxy-pinning-mysql.mdproxy-pinning-postgresql.mdupgrade-post-checklist.mdupgrade-pre-checklist.mdupgrade-prechecks-mysql.mdupgrade-prechecks-postgresql.mdupgrade-query-load-mysql.mdupgrade-query-load-postgresql.mdupgrade-workflow.mdverify-dependencies.mdscripts/rds_commitment_pricing_analyzer.py详细介绍
RDS OSS Advisor(MySQL、MariaDB、PostgreSQL)
概述
面向开源引擎的 Amazon RDS Advisor——MySQL、MariaDB 和 PostgreSQL。涵盖五个决策领域:
- 创建实例 — 使用最佳实践默认设置(最新版本、Multi-AZ、加密、Performance Insights、Secrets Manager 密码管理)预置可用于生产环境的实例
- 规划升级 — 识别实例、枚举目标版本、运行实时预检、标记计划回归,并提供升级前后检查清单
- 承诺定价 — 估算稳定工作负载的 RI 和 Database Savings Plan 节省金额
- RDS Proxy 评估 — 根据连接利用率和固定连接风险,判断是否值得使用代理
- 蓝绿部署 — 规划低停机时间的 DDL 或主要版本升级,并分析 DDL 兼容性
提供成本估算、预检结果和 CLI 命令。创建实例时,会调用 create-db-instance 并应用生产环境最佳实践。对于升级、购买和切换,仅提供建议;未经用户明确确认,绝不执行。
范围仅限 RDS 开源引擎。对于 Aurora,请使用 amazon-aurora。对于 Oracle、SQL Server 和 Db2,请使用对应引擎的技能。
建议使用 AWS MCP 服务来执行命令,但并非必需;也可以通过 AWS CLI 执行所有操作。
决策指南
| 用户询问…… | 转到 |
|---|---|
| 创建、预置或设置新的 RDS MySQL/MariaDB/PostgreSQL 实例 | 下方的生产环境实例创建 |
| 升级、目标版本、升级前后检查清单、升级预检、只读副本升级顺序 | references/upgrade-workflow.md |
| 预留实例、RI、Database Savings Plan、DSP、1 年还是 3 年、Multi-AZ 承诺、无预付/部分预付/全额预付 | references/commitment-pricing-workflow.md |
| RDS Proxy、连接池、连接过多、Lambda 数据库连接、代理固定连接、PgBouncer 与 Proxy 的比较 | references/proxy-advisor-workflow.md |
| 蓝绿部署、零停机时间 DDL、切换、尽量减少停机时间的架构变更、生产环境中的类型变更 | references/bluegreen-advisor-workflow.md |
宽泛请求(“帮我处理 RDS”)?逐项用一行列出这五种选项。如果用户提供了实例 ID,可将常规运行状况检查(引擎、版本、连接利用率)作为切入点。
范围之外(Aurora、Oracle、SQL Server、Db2、备份策略、Performance Insights 深入分析):基于通用知识作答,说明此技能不涵盖相关内容,并指向正确的引擎专用技能。
RDS 与 Aurora — 切勿混淆
RDS 开源引擎与 Aurora 是不同的产品,语义也不同。你绝不能将 Aurora 概念用于 RDS:
| 概念 | RDS(此技能) | Aurora(使用 amazon-aurora) |
|---|---|---|
| LTS 版本 | ❌ 不存在 | ✅ 提供 LTS 版本 |
| 无服务器模式 | ❌ 不存在 | ✅ Aurora Serverless |
| I/O 优化存储 | ❌ 不存在 | ✅ aurora-iopt1 |
| Data API | ❌ 独立 RDS 不提供 | ✅ Aurora Serverless 集群 |
| 实例拓扑 | 基于实例(describe-db-instances) | 基于集群(describe-db-clusters) |
| 升级范围 | 每个实例 | 每个集群(写入器和读取器一起升级) |
| DSP 期限选项 | 1 年和 3 年 | 仅 1 年 |
| 定价模式 | 按需 + RI + DSP | 按需 + RI + DSP + I/O 定价 |
如果用户询问任何 Aurora 专属概念,请转至 amazon-aurora。如果发现实例实际为 Aurora(引擎为 aurora-mysql 或 aurora-postgresql),请停止并引导用户转至相应技能。
生产环境实例创建
当用户要求创建或预置供生产环境使用的新 RDS MySQL、MariaDB 或 PostgreSQL 实例时,默认情况下你必须应用以下最佳实践:
- 使用最新的稳定主版本 — 运行
aws rds describe-db-engine-versions --engine <engine> --query "DBEngineVersions[].EngineVersion"查找最新版本。对于 MySQL,优先使用 8.4.x,而不是 8.0(8.0 的标准支持结束日期早于 8.4 — 日期请参阅 RDS Extended Support)。对于 PostgreSQL,使用最新主版本。对于 MariaDB,使用最新主版本。 - 启用 Multi-AZ — 设置
--multi-az以实现自动故障转移。 - 使用客户管理的 KMS 密钥启用存储加密 — 设置
--storage-encrypted --kms-key-id <key-arn>。客户管理的密钥可让你完全掌控密钥轮换、访问策略和跨账户共享。 - 禁用公开访问 — 设置
--no-publicly-accessible,确保实例无法从互联网访问。 - 将备份保留期设为 7 天 — 设置
--backup-retention-period 7。 - 启用保留期为 7 天的 Performance Insights — 设置
--enable-performance-insights --performance-insights-retention-period 7。如果 Performance Insights 捕获包含敏感数据的查询(例如 WHERE 子句中的字面值),请指定--performance-insights-kms-key-id <key-arn>,使用客户管理的 KMS 密钥对静态数据进行加密。 - 启用删除保护 — 设置
--deletion-protection。 - 避免使用默认主用户名 — 不要使用
admin、root、postgres或master等常见名称,因为这些名称会让凭据猜测攻击更容易得手。选择自定义的--master-username(例如,使用应用或团队专用的名称)。 - 通过 Secrets Manager 管理主密码 — 设置
--manage-master-user-password,不要提供明文--master-user-password。这会在 Secrets Manager 中自动创建并轮换密码。生产实例不得接受或使用明文密码。 - 使用 gp3 存储 — 设置
--storage-type gp3。与 gp2 相比,它更便宜、速度更快,而且无需最低 IOPS 购买量。 - 为实例添加标签,以便客户识别通过此技能创建的资源 — 设置
--tags Key=created_by,Value=rds-oss-skill Key=generation_model,Value={your-model-id}(见下文“资源标签”)。 - 强制连接传输过程中使用 TLS — 创建或修改 DB 参数组以要求加密连接:MySQL/MariaDB 使用
require_secure_transport=ON,PostgreSQL 使用rds.force_ssl=1。 - 将数据库日志导出到 CloudWatch Logs 并使用 KMS 加密 — 设置
--enable-cloudwatch-logs-exports,以便集中查看数据库级别的安全事件(登录失败、可疑查询)。MySQL/MariaDB 使用["error","slowquery","audit"](注意:必须先启用审计日志记录,否则audit流将为空 — 对于 RDS MySQL,需通过 Option Group 中的 MARIADB_AUDIT_PLUGIN 启用;对于 RDS MariaDB,需通过参数组中的内置服务器审计参数启用,例如server_audit_logging=1),PostgreSQL 使用["postgresql"]。数据库日志可能包含带字面值的 SQL 和用户名,因此必须为生成的/aws/rds/instance/<name>/*日志组配置 KMS 密钥,以保护静态敏感数据。
CLI 示例(MySQL 8.4,适用于生产环境):
aws rds create-db-instance \
--db-instance-identifier <name> \
--engine mysql \
--engine-version 8.4 \
--db-instance-class <class> \
--allocated-storage 100 \
--storage-type gp3 \
--storage-encrypted \
--kms-key-id <kms-key-arn> \
--no-publicly-accessible \
--multi-az \
--manage-master-user-password \
--master-username <custom-non-default-username> \
--backup-retention-period 7 \
--enable-performance-insights \
--performance-insights-retention-period 7 \
--performance-insights-kms-key-id <kms-key-arn> \
--deletion-protection \
--enable-cloudwatch-logs-exports '["error","slowquery","audit"]' \
--tags Key=created_by,Value=rds-oss-skill Key=generation_model,Value=<your-model-id> \
--region us-east-1
创建实例后,运行以下命令以配置 TLS 强制要求和日志组加密(这些步骤由用户执行,技能会提供这些步骤,但不会直接调用):
# Create a custom parameter group with TLS enforcement (MySQL example)
aws rds create-db-parameter-group --db-parameter-group-family mysql8.4 \
--db-parameter-group-name <name>-tls --description "TLS enforced"
aws rds modify-db-parameter-group --db-parameter-group-name <name>-tls \
--parameters "ParameterName=require_secure_transport,ParameterValue=ON,ApplyMethod=pending-reboot"
aws rds modify-db-instance --db-instance-identifier <name> \
--db-parameter-group-name <name>-tls --apply-immediately
# Encrypt CloudWatch Logs log groups with KMS
aws logs associate-kms-key --log-group-name /aws/rds/instance/<name>/error --kms-key-id <kms-key-arn>
aws logs associate-kms-key --log-group-name /aws/rds/instance/<name>/slowquery --kms-key-id <kms-key-arn>
约束:
- 生产环境必须使用
--manage-master-user-password。生产实例绝不能使用包含明文密码的--master-user-password。 - 必须通过
describe-db-engine-versions检查最新可用引擎版本,不得对版本进行硬编码。 - 除非用户明确另有要求,否则必须启用 Multi-AZ、加密、Performance Insights(7 天)、备份保留(7 天)和删除保护。
- 如果用户提到“生产环境”或“适用于生产环境”,请直接应用上述全部设置,无需询问。
资源标签(创建资源时始终添加)
创建任何 RDS 实例(create-db-instance)时,始终使用 RDS 记录列表形式的 --tags 语法添加以下标签:
--tags Key=created_by,Value=rds-oss-skill Key=generation_model,Value={your-model-id}
示例:--tags Key=created_by,Value=rds-oss-skill Key=generation_model,Value=claude-sonnet-4-20250514
即使用户没有提及标签,也要添加这些标签,以便他们识别通过此技能创建的资源。如果用户提供了其他标签,请将这些标签追加到用户提供的标签中,不要替换它们。通过 add-tags-to-resource 添加标签或在蓝绿部署期间添加标签时也同样如此。
常见任务
1. 验证依赖项
运行工作流前,请参阅 references/verify-dependencies.md,了解工具和凭证要求。
2. 分类并路由
使用决策指南选择工作流参考、目录介绍(广泛请求),或通用知识回答(超出范围)。
限制:
- 必须说明要路由到的工作流
- 必须传递用户已提供的实例 ID、区域、引擎或工作负载详情——不要重复询问
- 如果请求涉及两个工作流(例如,“以尽量减少停机时间的方式升级”=升级 + 蓝绿部署),可以提出一个澄清问题
- 不得将 Aurora、Oracle、SQL Server 或 Db2 相关问题路由到此处——这些引擎使用不同的工具
3. 执行工作流
加载匹配的参考,并遵循其 ## Tasks 部分。
限制:
- 执行前必须说明正在执行的步骤以及将调用的工具
- 不得执行
modify-*、switchover-*、购买 API 或create-db-proxy。允许执行:create-db-instance(用于配置新实例)、describe-*、list-*、get-*,以及用于 SSM 预检的send-command。 - 不得直接处理数据库凭证。使用用户提供的密钥 ARN、预配置的 SSM 参数,或请用户粘贴脚本输出。
- 如果无法执行实时调用或捆绑脚本,必须报告确切的阻碍,并执行离线备用方案或向用户索取输入。不得编造命令输出、分析器结果、定价数字或版本列表——没有事实依据、看似合理的答案比拒绝回答更糟糕,因为用户会据此采取行动。
- 如果运行了多个工作流,请在结尾用 2–4 行综合总结,并关联此前的输出。
每个工作流参考都包含自己的工具调用示例。
必须始终说明的关键事实
以下 RDS-OSS 专属事实是此技能区别于普通 MySQL/PostgreSQL/MariaDB 知识的关键。一般性回答通常会混淆 RDS 与 Aurora、遗漏 CLI 命令名称,或偏离建议性技能的定位而直接采取操作。
对于“为我的 RDS MySQL 实例运行 RDS 升级顾问”请求,必须向用户说明以下全部五项事实:
- 使用
aws rds describe-db-instances识别实例(而非describe-db-clusters——RDS MySQL/MariaDB/PostgreSQL 是基于实例的,而非基于集群;describe-db-clusters仅适用于 Aurora)。 - 从响应中检测引擎类型(
mysql、mariadb或postgres)——不要想当然。 - 使用
aws rds describe-db-engine-versions列出有效的升级目标——具体来说,以当前引擎和主版本作为筛选条件。这是枚举允许的升级路径的方式。 - 明确提供最新版本建议(例如,“8.0.40 是最新的 8.0 次要版本,8.4.x 是下一个主版本”)。
- 不要提及 LTS——RDS 没有 LTS 概念(请参阅 RDS 与 Aurora)。提供 LTS 建议表明路由时混淆了 RDS 与 Aurora。此外,除非确认实例实际上是 Aurora,否则不要提及
amazon-aurora。 关键工作流规则——无法找到指定实例时:如果describe-db-instances --db-instance-identifier <id>没有返回结果,或返回DBInstanceNotFoundFault,你仍必须为用户完整讲解顾问工作流——逐一说明每个步骤的名称(describe-db-instances,然后是引擎检测,再然后是describe-db-engine-versions、版本建议,最后是升级前检查清单)——并解释每个步骤的输出会是什么样子。不要中途停止,要求用户“能否再确认一下实例 ID?”。用户询问的是顾问流程,而不是让你实时查询。如果你无法看到该实例,应将工作流作为模板提供,供用户在获得正确标识符后运行。
对于“将我的 RDS MariaDB 从 X 升级到最新版本”,你必须向用户说明以下六点:
- 通过
describe-db-instances将引擎检测为mariadb。 - 使用
describe-db-engine-versions(搭配--engine mariadb)识别目标版本,而不是使用人工维护的列表。 - 提供 SSM 或直接连接的升级前检查方法——可通过客户端主机上的 SSM Run Command,或通过直接的 mysql-client 连接,对 RDS MariaDB 进行升级前检查。
- **不要使用 RDS Data API——MariaDB 不支持 Data API。**这是一个常见陷阱。Data API 仅适用于 Aurora Serverless 和部分集群,绝不适用于 RDS 上的 MariaDB。
- 运行 upgrade-prechecks-mysql.md 中与 MySQL 兼容的升级前检查查询——检查已移除的功能、保留关键字和
sql_mode更改。MariaDB 是 MySQL 的分支,因此复用 MySQL 升级前检查集。 - 拒绝执行升级——仅提供顾问建议。建议先在测试环境中通过快照和还原进行试运行,然后再继续。明确说明你不会运行
modify-db-instance --engine-version。
对于“2 台 db.r7g.2xlarge RDS MySQL 全天候运行——买 RI 还是 Savings Plan?”,你必须向用户说明以下七点:
- 离线运行 rds_commitment_pricing_analyzer.py,并指定
--instance-type db.r7g.2xlarge --engine mysql --num-instances 2。请在带围栏的 bash 代码块中打印完整命令。 - 提供包含全部五种选项的完整对比表——按需、1 年 RI、3 年 RI、1 年 DSP、3 年 DSP——并为每种选项列出相对于按需价格的节省金额和百分比。
- 鉴于用户表示至少有 2 年的信心且工作负载全天候运行,建议选择 3 年 RI。
- 说明 RDS Database Savings Plan 专门覆盖 r7g 系列——DSP 按系列而非实例类型覆盖;如果用户可能在该系列内调整实例规格,这是一个关键优势。
- 提及 3 年锁定期的取舍——如果工作负载发生变化,或该系列被更新的系列取代,承诺金额无法全额收回。
- 注意,RDS RI 锁定区域——如果将工作负载迁移到其他区域,将失去 RI 优惠。
- 不要提供购买操作步骤——不要添加带购买指引的“后续步骤”部分。不要写“前往 Console → Reserved Instances → Purchase”。不要提供
aws rds purchase-reserved-db-instances-offering或aws savingsplans create-savings-plan命令。**这是严格禁止的。**此技能仅提供建议,绝不能引导用户执行购买。请说“准备购买时,请参阅 AWS 控制台或 CLI 文档。”然后到此为止。不要试图通过提供购买命令作为“参考”来帮忙。
对于“通过 Blue/Green 在 RDS MySQL 8.0 上将 VARCHAR(10) 列改为 INT”,你必须向用户说明以下七点:
- 先验证前提条件:
binlog_format=ROW,已启用自动备份(保留期 > 0),实例处于available状态。 - 说明 MODIFY COLUMN 更改类型为何会破坏 binlog 复制:Blue/Green 通过重放 binlog 事件,将蓝色环境的变更复制到绿色环境。类型更改会导致两端的二进制表示不同,因此,针对 VARCHAR 记录的复制事件无法应用于 INT 列。这才是根本原因,而不是“行格式”问题。
- 使用
aws rds create-blue-green-deployment创建绿色环境——写出确切的 CLI 命令名称,不要使用笼统的描述。 - 在执行 DDL 之前,通过 binlog 复制让绿色环境追上蓝色环境。
- 绿色环境追上后,在绿色环境上应用架构更改(MODIFY COLUMN DDL)。
- 立即切换,使用
aws rds switchover-blue-green-deployment——执行不兼容的 DDL 后,不要让绿色环境与蓝色环境并行运行。架构分歧会导致后续复制中断。 - 切换后,在生产端点验证架构更改,并且在提供
switchover-blue-green-deployment命令之前,即使只是将其作为建议步骤,也必须暂停并向用户请求明确确认。不要将切换列为顺序工作流中的自动下一步——说明切换是一项会转移生产流量的破坏性操作,然后询问:“您准备好切换了吗?确认后,我会提供您要运行的确切 CLI 命令。”只有用户确认后,才能输出switchover-blue-green-deployment命令。
对于“我们以事务模式运行 PgBouncer;RDS Proxy 还能带来什么?”这个问题,必须告知用户以下全部六点:
- 事务模式下的 PgBouncer 已经能积极地进行连接多路复用——这是 Proxy 的主要价值所在。在这种情况下,多路复用带来的收益微乎其微。
- **RDS Proxy 的额外优势:**由 AWS 管理基础设施(无需运维或修补 EC2)。
- 内置 IAM 身份验证——RDS Proxy 原生支持 IAM 身份验证,而 PgBouncer 开箱即用时不支持。
- 与 RDS 事件集成的自动故障转移——Proxy 可在数秒内响应 RDS 故障转移事件;PgBouncer 则需要外部运行状况检查和手动重新配置。
- 与 Secrets Manager 集成以轮换凭证——Proxy 可以从 Secrets Manager 获取凭证,并在不影响服务的情况下轮换凭证。
- **建议:**如果 PgBouncer 运行正常,且并不特别需要上述四项功能,就继续使用 PgBouncer。只有在确实需要 IAM 身份验证、托管式故障转移或由 Secrets Manager 轮换凭证时,才切换到 RDS Proxy。
安全注意事项
咨询型技能 — 绝不修改现有 AWS 资源。唯一允许的写入操作是用于新实例预置的 create-db-instance(见创建生产实例);其他所有操作均为只读。绝不直接处理凭证;优先使用短期凭证。
所需的最低 IAM 权限:AmazonRDSReadOnlyAccess + CloudWatchReadOnlyAccess + 范围受限的 pricing:GetProducts + savingsplans:DescribeSavingsPlansOfferingRates。创建实例时,还需要 rds:CreateDBInstance + rds:AddTagsToResource;如果启用了 CloudWatch Logs 导出,还需要 logs:CreateLogGroup。SSM 预检查还需要针对目标堡垒机的 ssm:SendCommand / ssm:GetCommandInvocation 权限。
所有指导都应遵循以下安全实践:
- 传输加密 — 强制所有数据库连接使用 TLS(MySQL/MariaDB 使用
require_secure_transport=ON,PostgreSQL 使用rds.force_ssl=1)。 - IAM 数据库身份验证 — 在支持的情况下,应用程序连接优先使用 IAM 身份验证而非用户名/密码,以提供短期凭证。
- 审计日志 — 建议启用数据库审计日志(RDS MySQL 通过 Option Group 中的 MARIADB_AUDIT_PLUGIN 启用,RDS MariaDB 通过
server_audit_logging=1等内置服务器审计参数启用,PostgreSQL 使用pgaudit扩展),并启用 CloudTrail 进行 API 级别审计。 - VPC 安全 — 将实例部署在私有子网中。安全组应将入站访问限制为特定应用程序 CIDR 范围或安全组引用 — 绝不能使用
0.0.0.0/0。 - 凭证轮换 —
--manage-master-user-password可通过 Secrets Manager 自动轮换凭证。 - 监控和告警 — 建议针对与安全相关的指标配置 CloudWatch Alarms,例如
DatabaseConnections激增(可能表示凭证泄露)和FreeableMemory降低(可能表示资源耗尽攻击)。
不要为了绕过权限错误而授予上述权限之外的写入/管理员权限。不要将数据库密码存储在 SSM 参数或命令文本中 — 请使用 Secrets Manager,并在命令中检索密钥。
故障排查
拒绝访问。 附加上述只读策略。
凭证过期。 刷新凭证,或在计算承诺定价时改用 --offline。
超时 / 限流。 重试一次,然后缩小范围。大型架构的 SSM 预检查超时:改用直接连接或由用户运行脚本。独立 RDS 不支持 RDS Data API。
未找到资源。 检查区域/ID;确认它不是 Aurora 集群(describe-db-clusters)。RI/DSP 产品为空时,改用离线模式。
用户要求执行更改。 这是咨询型技能 — 对现有资源的修改应通过 AWS 控制台或由用户运行 CLI 完成。
Aurora 相关问题。 转交给 amazon-aurora。参见上文的 RDS 与 Aurora。
Oracle / SQL Server / Db2 相关问题。 转交给 rds-oracle、rds-sqlserver 或 rds-db2。