當我嘗試使用 AWS CloudFormation 建立 AWS::RDS::DBInstance 資源時,收到以下錯誤: 「DBInstance xxxxxx 無法穩定。」
簡短描述
如果您使用 AWS CloudFormation 從現有 RDS 資料庫快照建立 Amazon Relational Database Service (Amazon RDS) 資料庫執行個體 (AWS::RDS::DBInstance),則可能會因下列原因而收到錯誤:
- 資料庫快照中的儲存類型與資料庫執行個體中的儲存類型不符。
- 您的資料庫快照包含無效的物件。
**注意:**RDS 資料庫執行個體穩定問題還有其他可能的原因。以下解決方法中的步驟僅適用於在 AWS CloudFormation 中從快照建立 RDS 資料庫執行個體的問題。
解決方法
比對資料庫快照與資料庫執行個體之間的儲存類型
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請確保您使用的是最新的 AWS CLI 版本。
1. 使用 Amazon RDS 主控台或 describe-db-snapshots AWS CLI 命令來驗證資料庫快照的儲存類型。例如:
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 命令中的 StorageType 值 gp2 對應至 Amazon RDS 主控台中一般用途 (SSD) 的值。
2. 在 AWS CloudFormation JSON 或 YAML 範本的 AWS::RDS::DBInstance 資源定義中,設定 StorageType 的值以符合快照的儲存類型。在這種情況下,儲存類型設為 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
......
注意:如果未設定儲存類型,則 AWS CloudFormation 預設會將 StorageType 設定為標準,這可能與參考快照的儲存類型不符。如果儲存類型不相符,則 RDS 可能需要更長的時間來建立資料庫,因為有額外的儲存轉換程序。此外,這種不相符可能導致較大資料庫發生逾時錯誤。最佳做法是在 AWS::RDS::DBInstance 資源中明確定義儲存類型。此外,請考慮將儲存類型設定為符合快照的儲存類型。
3. 啟動您的AWS CloudFormation 堆疊以建立資料庫執行個體。
確認您的資料庫快照沒有無效物件
如果用來建立資料庫執行個體的資料庫快照包含無效物件,請完成下列步驟:
1. 識別並修正現有資料庫中的無效物件。
例如,下列 Oracle 資料庫查詢會傳回無效物件的清單:
select owner,object_name,object_type,status from dba_objects where status='INVALID'
2. 從現有資料庫重新建立快照。
**重要事項:**只有在修正或移除資料庫中的所有無效物件後,才重新建立資料庫快照。
3. 啟動您的 AWS CloudFormation 堆疊,以使用現有的資料庫快照建立資料庫執行個體。