使用 AWS CloudFormation 创建 RDS 数据库实例时如何解析“DBInstance xxxxxx 未能稳定”错误?

上次更新时间:2019 年 5 月 31 日

当我尝试使用 AWS CloudFormation 创建 AWS::RDS::DBInstance 资源时,收到了以下错误:“DBInstance xxxxxx 未能稳定。” 如何解决此错误?

简短描述

如果您使用 AWS CloudFormation 从现有的 RDS 数据库快照创建 Amazon Relational Database Service (Amazon RDS) 数据库实例 (AWS::RDS::DBInstance),您可能会收到错误,原因如下:

  • 数据库快照中的存储类型与数据库实例中的存储类型不匹配。
  • 您的数据库快照包含无效的对象。

解决方法

匹配数据库快照与数据库实例之间的存储类型

1.    通过 Amazon RDS 控制台或在 AWS 命令行界面 (AWS CLI) 中使用 describe-db-snapshots 命令验证数据库快照的存储类型。

请参阅以下示例:

aws rds describe-db-snapshots --db-snapshot-identifier MyRDSSnapShot --region us-east-1
{
    "DBSnapshots": [
        {
            .......
            "AllocatedStorage": 20, 
            "Status": "available", 
            "PercentProgress": 100, 
            "DBSnapshotArn": "arn:aws:rds:us-east-1:1234567890:snapshot:MyRDSSnapShot", 
            "EngineVersion": "12.1.0.2.v7", 
            "ProcessorFeatures": [], 
            "OptionGroupName": "default:oracle-ee-12-1", 
            "SnapshotCreateTime": "2019-03-16T17:43:41Z", 
            "AvailabilityZone": "us-east-1f", 
            "StorageType": "gp2",
            .......
        }
    ]
}

注意:来自 AWS CLI 命令的存储类型gp2 在 Amazon RDS 控制台中映射到通用型 (SSD)

2.    在 AWS CloudFormation JSON 或 YAML 模板的 AWS::RDS::DBInstance 资源定义中,将存储类型的值设置为 gp2。请参阅以下示例:

JSON:

{
    "MySampleDB": {
        "Type": "AWS::RDS::DBInstance",
        "Properties": {
            "DBInstanceClass": "db.t2.small",
            "StorageType": "gp2",
            "Engine": "postgres",
            "EngineVersion": "9.5.12",
            ........
        }
    }
}

YAML:

MySampleDB:
  Type: 'AWS::RDS::DBInstance'
  Properties:
    DBInstanceClass: db.t2.small
    StorageType: gp2
    Engine: postgres
    EngineVersion: 9.5.12
    ......

注意:如果您未明确地将数据库实例的存储类型设置为通用型 SSD (gp2),则在默认情况下,AWS CloudFormation 将存储类型设置为标准。此默认设置会导致 Amazon RDS 将 gp2 转换为标准。转换需要很长时间,会导致 AWS CloudFormation 超时。然后,AWS CloudFormation 在数据库实例创建过程中将会返回“DBInstance x 未能稳定”错误。

3.    启动您的 AWS CloudFormation 堆栈以创建数据库实例。

验证您的数据库快照没有无效的对象

如果用于创建数据库实例的数据库快照包含无效的对象,请完成以下步骤:

1.    找出并修复现有数据库中的无效对象。

例如,以下 Oracle 数据库查询可返回无效对象的列表:

select owner,object_name,object_type,status from dba_objects where status='INVALID'

2.    从现有数据库重新拍摄快照

重要提示:只有修复或删除了数据库中的所有无效对象后,才能重新拍摄数据库快照。

3.    启动您的 AWS CloudFormation 堆栈以使用现有数据库快照创建数据库实例。


这篇文章对您有帮助吗?

您觉得我们哪些地方需要改进?


需要更多帮助?