mcpField
R
rds-oss

rds-oss

github.com/aws数据与数据库3.3k5.2k 次安装1 天前更新
代码仓库

关于 rds-oss

面向 Amazon RDS 的 MySQL、MariaDB 和 PostgreSQL 引擎提供顾问技能,涵盖实例创建、升级、承诺定价、RDS Proxy 评估及 Blue/Green 部署。它为生产配置和规划提供检查结果、成本估算与命令,部分变更仅提供建议。

主要功能

  1. 01规划生产实例创建
  2. 02执行升级预检并整理检查清单
  3. 03估算 RI 与 Database Savings Plan
  4. 04评估 RDS Proxy 与连接风险
  5. 05规划 Blue/Green 部署和 DDL

适用场景

  1. 01准备生产环境 RDS 实例
  2. 02检查数据库升级目标和风险
  3. 03评估稳定负载的承诺定价
  4. 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.md
bluegreen-ddl-mysql.md
bluegreen-ddl-postgresql.md
commitment-basics.md
commitment-pricing-workflow.md
commitment-scenarios.md
proxy-advisor-workflow.md
proxy-pinning-mysql.md
proxy-pinning-postgresql.md
upgrade-post-checklist.md
upgrade-pre-checklist.md
upgrade-prechecks-mysql.md
upgrade-prechecks-postgresql.md
upgrade-query-load-mysql.md
upgrade-query-load-postgresql.md
upgrade-workflow.md
verify-dependencies.md
scripts/
rds_commitment_pricing_analyzer.py

详细介绍

RDS OSS Advisor(MySQL、MariaDB、PostgreSQL)

概述

面向开源引擎的 Amazon RDS Advisor——MySQL、MariaDB 和 PostgreSQL。涵盖五个决策领域:

  1. 创建实例 — 使用最佳实践默认设置(最新版本、Multi-AZ、加密、Performance Insights、Secrets Manager 密码管理)预置可用于生产环境的实例
  2. 规划升级 — 识别实例、枚举目标版本、运行实时预检、标记计划回归,并提供升级前后检查清单
  3. 承诺定价 — 估算稳定工作负载的 RI 和 Database Savings Plan 节省金额
  4. RDS Proxy 评估 — 根据连接利用率和固定连接风险,判断是否值得使用代理
  5. 蓝绿部署 — 规划低停机时间的 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 实例时,默认情况下你必须应用以下最佳实践:

  1. 使用最新的稳定主版本 — 运行 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,使用最新主版本。
  2. 启用 Multi-AZ — 设置 --multi-az 以实现自动故障转移。
  3. 使用客户管理的 KMS 密钥启用存储加密 — 设置 --storage-encrypted --kms-key-id <key-arn>。客户管理的密钥可让你完全掌控密钥轮换、访问策略和跨账户共享。
  4. 禁用公开访问 — 设置 --no-publicly-accessible,确保实例无法从互联网访问。
  5. 将备份保留期设为 7 天 — 设置 --backup-retention-period 7。
  6. 启用保留期为 7 天的 Performance Insights — 设置 --enable-performance-insights --performance-insights-retention-period 7。如果 Performance Insights 捕获包含敏感数据的查询(例如 WHERE 子句中的字面值),请指定 --performance-insights-kms-key-id <key-arn>,使用客户管理的 KMS 密钥对静态数据进行加密。
  7. 启用删除保护 — 设置 --deletion-protection。
  8. 避免使用默认主用户名 — 不要使用 admin、root、postgres 或 master 等常见名称,因为这些名称会让凭据猜测攻击更容易得手。选择自定义的 --master-username(例如,使用应用或团队专用的名称)。
  9. 通过 Secrets Manager 管理主密码 — 设置 --manage-master-user-password,不要提供明文 --master-user-password。这会在 Secrets Manager 中自动创建并轮换密码。生产实例不得接受或使用明文密码。
  10. 使用 gp3 存储 — 设置 --storage-type gp3。与 gp2 相比,它更便宜、速度更快,而且无需最低 IOPS 购买量。
  11. 为实例添加标签,以便客户识别通过此技能创建的资源 — 设置 --tags Key=created_by,Value=rds-oss-skill Key=generation_model,Value={your-model-id}(见下文“资源标签”)。
  12. 强制连接传输过程中使用 TLS — 创建或修改 DB 参数组以要求加密连接:MySQL/MariaDB 使用 require_secure_transport=ON,PostgreSQL 使用 rds.force_ssl=1。
  13. 将数据库日志导出到 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 升级顾问”请求,必须向用户说明以下全部五项事实:

  1. 使用 aws rds describe-db-instances 识别实例(而非 describe-db-clusters——RDS MySQL/MariaDB/PostgreSQL 是基于实例的,而非基于集群;describe-db-clusters 仅适用于 Aurora)。
  2. 从响应中检测引擎类型(mysql、mariadb 或 postgres)——不要想当然。
  3. 使用 aws rds describe-db-engine-versions 列出有效的升级目标——具体来说,以当前引擎和主版本作为筛选条件。这是枚举允许的升级路径的方式。
  4. 明确提供最新版本建议(例如,“8.0.40 是最新的 8.0 次要版本,8.4.x 是下一个主版本”)。
  5. 不要提及 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 升级到最新版本”,你必须向用户说明以下六点:

  1. 通过 describe-db-instances 将引擎检测为 mariadb。
  2. 使用 describe-db-engine-versions(搭配 --engine mariadb)识别目标版本,而不是使用人工维护的列表。
  3. 提供 SSM 或直接连接的升级前检查方法——可通过客户端主机上的 SSM Run Command,或通过直接的 mysql-client 连接,对 RDS MariaDB 进行升级前检查。
  4. **不要使用 RDS Data API——MariaDB 不支持 Data API。**这是一个常见陷阱。Data API 仅适用于 Aurora Serverless 和部分集群,绝不适用于 RDS 上的 MariaDB。
  5. 运行 upgrade-prechecks-mysql.md 中与 MySQL 兼容的升级前检查查询——检查已移除的功能、保留关键字和 sql_mode 更改。MariaDB 是 MySQL 的分支,因此复用 MySQL 升级前检查集。
  6. 拒绝执行升级——仅提供顾问建议。建议先在测试环境中通过快照和还原进行试运行,然后再继续。明确说明你不会运行 modify-db-instance --engine-version。

对于“2 台 db.r7g.2xlarge RDS MySQL 全天候运行——买 RI 还是 Savings Plan?”,你必须向用户说明以下七点:

  1. 离线运行 rds_commitment_pricing_analyzer.py,并指定 --instance-type db.r7g.2xlarge --engine mysql --num-instances 2。请在带围栏的 bash 代码块中打印完整命令。
  2. 提供包含全部五种选项的完整对比表——按需、1 年 RI、3 年 RI、1 年 DSP、3 年 DSP——并为每种选项列出相对于按需价格的节省金额和百分比。
  3. 鉴于用户表示至少有 2 年的信心且工作负载全天候运行,建议选择 3 年 RI。
  4. 说明 RDS Database Savings Plan 专门覆盖 r7g 系列——DSP 按系列而非实例类型覆盖;如果用户可能在该系列内调整实例规格,这是一个关键优势。
  5. 提及 3 年锁定期的取舍——如果工作负载发生变化,或该系列被更新的系列取代,承诺金额无法全额收回。
  6. 注意,RDS RI 锁定区域——如果将工作负载迁移到其他区域,将失去 RI 优惠。
  7. 不要提供购买操作步骤——不要添加带购买指引的“后续步骤”部分。不要写“前往 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”,你必须向用户说明以下七点:

  1. 先验证前提条件:binlog_format=ROW,已启用自动备份(保留期 > 0),实例处于 available 状态。
  2. 说明 MODIFY COLUMN 更改类型为何会破坏 binlog 复制:Blue/Green 通过重放 binlog 事件,将蓝色环境的变更复制到绿色环境。类型更改会导致两端的二进制表示不同,因此,针对 VARCHAR 记录的复制事件无法应用于 INT 列。这才是根本原因,而不是“行格式”问题。
  3. 使用 aws rds create-blue-green-deployment 创建绿色环境——写出确切的 CLI 命令名称,不要使用笼统的描述。
  4. 在执行 DDL 之前,通过 binlog 复制让绿色环境追上蓝色环境。
  5. 绿色环境追上后,在绿色环境上应用架构更改(MODIFY COLUMN DDL)。
  6. 立即切换,使用 aws rds switchover-blue-green-deployment——执行不兼容的 DDL 后,不要让绿色环境与蓝色环境并行运行。架构分歧会导致后续复制中断。
  7. 切换后,在生产端点验证架构更改,并且在提供 switchover-blue-green-deployment 命令之前,即使只是将其作为建议步骤,也必须暂停并向用户请求明确确认。不要将切换列为顺序工作流中的自动下一步——说明切换是一项会转移生产流量的破坏性操作,然后询问:“您准备好切换了吗?确认后,我会提供您要运行的确切 CLI 命令。”只有用户确认后,才能输出 switchover-blue-green-deployment 命令。

对于“我们以事务模式运行 PgBouncer;RDS Proxy 还能带来什么?”这个问题,必须告知用户以下全部六点:

  1. 事务模式下的 PgBouncer 已经能积极地进行连接多路复用——这是 Proxy 的主要价值所在。在这种情况下,多路复用带来的收益微乎其微。
  2. **RDS Proxy 的额外优势:**由 AWS 管理基础设施(无需运维或修补 EC2)。
  3. 内置 IAM 身份验证——RDS Proxy 原生支持 IAM 身份验证,而 PgBouncer 开箱即用时不支持。
  4. 与 RDS 事件集成的自动故障转移——Proxy 可在数秒内响应 RDS 故障转移事件;PgBouncer 则需要外部运行状况检查和手动重新配置。
  5. 与 Secrets Manager 集成以轮换凭证——Proxy 可以从 Secrets Manager 获取凭证,并在不影响服务的情况下轮换凭证。
  6. **建议:**如果 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 权限。

所有指导都应遵循以下安全实践:

  1. 传输加密 — 强制所有数据库连接使用 TLS(MySQL/MariaDB 使用 require_secure_transport=ON,PostgreSQL 使用 rds.force_ssl=1)。
  2. IAM 数据库身份验证 — 在支持的情况下,应用程序连接优先使用 IAM 身份验证而非用户名/密码,以提供短期凭证。
  3. 审计日志 — 建议启用数据库审计日志(RDS MySQL 通过 Option Group 中的 MARIADB_AUDIT_PLUGIN 启用,RDS MariaDB 通过 server_audit_logging=1 等内置服务器审计参数启用,PostgreSQL 使用 pgaudit 扩展),并启用 CloudTrail 进行 API 级别审计。
  4. VPC 安全 — 将实例部署在私有子网中。安全组应将入站访问限制为特定应用程序 CIDR 范围或安全组引用 — 绝不能使用 0.0.0.0/0。
  5. 凭证轮换 — --manage-master-user-password 可通过 Secrets Manager 自动轮换凭证。
  6. 监控和告警 — 建议针对与安全相关的指标配置 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。

其他资源

评论

支持 Markdown