我想解决在 AWS CloudFormation 中创建或更新 Amazon Relational Database Service (Amazon RDS) 资源时遇到的错误。
简短描述
为 Amazon RDS 资源创建或更新 CloudFormation 堆栈时,您可能会看到错误。这些资源可能包括数据库实例、数据库集群或数据库参数组。如果存在以下任一情况,就会出现此错误:
- 不支持更新 Amazon RDS 资源。
- 您为 Amazon RDS 资源指定的属性无效。
解决方法
以下是在 Amazon RDS 数据库资源更新期间可能出现的常见错误:
错误: “Cannot upgrade aurora-postgresql (or any RDS version) from 13.XX to 14.YY (Service: Rds, Status Code: 400)(无法将 aurora-postgresql(或任何 RDS 版本)由 13.XX 升级到 14.YY(服务:Rds,状态代码:400))”
当您对 RDS 数据库引擎进行次要或主要版本升级时,可能会出现此错误。
在引擎版本升级之前,RDS 会进行预检查以确认可行性。当预检查期间出现故障时,就会发生此错误。
使用以下链接确保对您的 Amazon RDS 类型使用 AWS 支持的版本升级:
Amazon Aurora PostgreSQL 兼容版本:如何执行主要版本升级
Amazon Aurora MySQL 兼容版本:Amazon Aurora MySQL 的数据库引擎更新
Amazon RDS for Oracle:升级 RDS for Oracle 数据库引擎
Amazon RDS for MySQL:升级 MySQL 数据库引擎
Amazon RDS for PostgreSQL:升级 Amazon RDS 的 PostgreSQL 数据库引擎
Amazon RDS for MariaDB:升级 MariaDB 数据库引擎
错误: “The current DB instance parameter group is custom.You must explicitly specify a new DB instance parameter group, either default or custom, for the engine version upgrade.(当前的数据库实例参数组为自定义。您必须为引擎版本升级明确指定新的数据库实例参数组(默认或自定义)。)”
当使用 AWS CloudFormation 执行 RDS 数据库实例的主要版本升级时,您可能会看到此错误。如果存在以下任一情况,资源处理程序将返回此错误消息:
请按照以下所有步骤解决错误:
- 更新堆栈模板中的数据库实例资源定义,以使用当前引擎版本支持的默认数据库参数组。使用修改后的模板更新堆栈。
- 更新数据库实例资源定义以使用升级后的引擎版本和该版本支持的默认数据库参数组。
- 更新您的数据库实例资源定义,以便在升级后的引擎版本中使用所需的自定义数据库参数组。
手动升级期间由 CloudFormation 中的偏差导致的错误
手动升级 RDS 数据库实例或集群版本时(即执行带外升级时),您可能会看到此错误。手动修改 CloudFormation 创建的资源时,CloudFormation 不会跟踪对资源所做的更改。这会导致堆栈出现偏差。
按照以下步骤确保实际资源与 CloudFormation 堆栈同步:
- 修改与出现偏差的堆栈关联的堆栈模板。在 RDS 数据库实例或集群的集群资源中包含值为 Retain 的 DeletionPolicy 属性。然后,使用修改后的模板更新堆栈。当您从堆栈中删除资源时,这会保留实际资源。
- 从堆栈模板中移除出现偏差的资源,然后更新堆栈。
- 将资源导回堆栈。
**注意:**为避免偏差,请确认您用于导入 RDS 资源的堆栈模板反映了 RDS 数据库资源的当前配置。
- 在堆栈上执行偏差检测操作以验证偏差是否已解决。
错误: “Cannot change master user password while doing a major version upgrade.(Service: Rds, Status Code)(在进行主要版本升级时无法更改主用户密码。(服务:Rds,状态代码))”
此错误表明 RDS 数据库密码已更改。
**注意:**您不能在进行主要版本升级的同时执行密码轮换。
请按照以下步骤解决错误:
- 使用现有模板执行堆栈更新。此更新使用轮换的密码以及当前的引擎版本。堆栈更新完成后,将使用新密码重置数据库凭证。
- 执行堆栈更新以升级到目标主要引擎版本。
相关信息
describe-engine-default-parameters