AWS CloudFormation を使用して RDS DB インスタンスを作成するときの「DBInstance xxxxxx failed to stabilize」というエラーを解決するにはどうすればよいですか?
最終更新日: 2019 年 5 月 31 日
AWS CloudFormation を使用して AWS::RDS::DBInstance リソースを作成しようとすると、「DBInstance xxxxxx failed to stabilize.」というエラーが表示されます。 このエラーの解決方法を教えてください。
簡単な説明
AWS CloudFormation を使用して既存の RDS DB スナップショットから Amazon Relational Database Service (Amazon RDS) DB ンスタンス (AWS::RDS::DBInstance) を作成すると、以下の理由でエラーが発生することがあります。
- DB スナップショットのストレージタイプが DB インスタンスのストレージタイプと一致していない。
- DB スナップショットに無効なオブジェクトが含まれている。
解決方法
DB スナップショットと DB インスタンスのストレージタイプを一致させる
1. Amazon RDS コンソールまたは AWS コマンドラインインターフェイス (AWS CLI) の describe-db-snapshots コマンドを使用して、DB スナップショットのストレージタイプを確認します。
次の例を参照してください。
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 コンソールでの値 General Purpose (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
......
注意: DB インスタンスのストレージタイプを明示的に General Purpose SSD (gp2)に設定しないと、AWS CloudFormation はデフォルトで StorageType を standard に設定します。このデフォルト設定により、Amazon RDS は gp2 を standard に変換します。この変換には時間がかかり、AWS CloudFormation がタイムアウトする原因になります。そして、AWS CloudFormation は、DB インスタンスの作成中に「DBInstance x failed to stabilize」というエラーを返します。
3. AWS CloudFormation スタックを起動して DB インスタンスを作成します。
DB スナップショットに無効なオブジェクトがないことを確認する
DB インスタンスの作成に使用された DB スナップショットに無効なオブジェクトが含まれている場合は、以下の手順を実行します。
1. 既存のデータベース内にある無効なオブジェクトを特定して、修正します。
たとえば、次の Oracle データベースクエリは無効なオブジェクトのリストを返します。
select owner,object_name,object_type,status from dba_objects where status='INVALID'
2. 既存のデータベースからスナップショットを再取得します。
重要: DBスナップショットを再取得するのは、必ずデータベースからすべての無効なオブジェクトを修正または削除した後だけです。
3. AWS CloudFormation スタックを起動し、既存の DB スナップショットを使用して DB インスタンスを作成します。