AWS CloudFormation で Amazon Relational Database Service (Amazon RDS) リソースを作成または更新したときに発生するエラーを解決したいです。
簡単な説明
Amazon RDS リソースの CloudFormation スタックを作成または更新すると、エラーが発生する場合があります。これらのリソースには、DB インスタンス、DB クラスター、または DB パラメータグループが含まれる場合があります。このエラーは、Amazon RDS リソースが更新に対応していない場合に発生します。Amazon RDS リソースに無効なプロパティを指定した。
解決策
エラー: 「aurora-postgresql (または任意の RDS バージョン) を 13.## から 14.## にアップグレードすることはできません (サービス: RDS、ステータスコード: 400)」
このエラーは、RDS DB エンジンのマイナーバージョンまたはメジャーバージョンのアップグレードにおいて発生することがあります。
RDS は、エンジンバージョンをアップグレードする前に、事前チェックを実行して実現可能性を確認します。このエラーは、事前チェック中に障害が発生した場合に発生します。
お使いの Amazon RDS のタイプに応じた AWS サポート対象のバージョンアップグレードについては、以下のリンクをご利用ください。
エラー: 「現在の DB インスタンスパラメータグループはカスタムです。エンジンのバージョンをアップグレードするには、デフォルトまたはカスタムの新しい DB インスタンスパラメータグループを明示的に指定する必要があります。」
AWS CloudFormation を使用して RDS DB データベースインスタンスのメジャーバージョンアップグレードを実行する際に、このエラーが発生することがあります。リソースハンドラーは、次の条件のいずれかに当てはまる場合にこのエラーメッセージを返します。
このエラーを解決するには、次の手順を実行してください。
- スタックテンプレートの DB インスタンスリソース定義を更新して、現在のエンジンバージョンでサポートされているデフォルト DB パラメータグループを使用します。変更したテンプレートでスタックを更新します。
- アップグレードされたエンジンバージョンおよび、そのバージョンでサポートされているデフォルト DB パラメータグループを使用するように、DB インスタンスのリソース定義を更新します。
- アップグレードされたエンジンバージョンで必要なカスタム DB パラメータグループを使用するように、DB インスタンスのリソース定義を更新します。
手動アップグレード中の CloudFormation のドリフトによるエラー
このエラーは、RDS DB インスタンスまたはクラスターバージョンを手動でアップグレードした場合 (帯域外アップグレードを実行した場合) に発生する場合があります。CloudFormation で作成されたリソースを手動で変更した場合、CloudFormation はリソースに加えられた変更を追跡しません。その結果、スタックにドリフトが発生します。
実際のリソースが CloudFormation スタックと同期していることを確認するには、以下の手順を実行してください。
- ドリフトされたスタックに関連するスタックテンプレートを変更します。RDS DB インスタンスまたはクラスターの Retain という値を持つクラスターリソースに、DeletionPolicy 属性を含めます。次に、変更したテンプレートでスタックを更新します。こうすると、スタックからリソースを削除しても、実際のリソースは保持されます。
- ドリフトされたリソースをスタックテンプレートから削除し、スタックを更新します。
- リソースをスタックにインポートし直します。
**注: ** ドリフトを避けるため、RDS リソースのインポートに使用するスタックテンプレートに RDS DB リソースの現在の設定が反映されていることを確認してください。
- スタックでドリフト検出操作を実行して、ドリフトが解決されていることを確認します。
エラー: 「メジャーバージョンのアップグレード中は、マスターユーザーのパスワードを変更できません。(サービス: Rds、ステータスコード)」
RDS DB のパスワードが変更された場合、このエラーが表示されます。
**注: ** メジャーバージョンアップグレードと同時にパスワードのローテーションを実行することはできません。
このエラーを解決するには、次の手順を実行してください。
- 既存のテンプレートを使用してスタックの更新を実行します。この更新では、現在のエンジンバージョンとともにローテーションされたパスワードを使用します。スタックの更新が完了すると、データベースの認証情報は新しいパスワードで再設定されます。
- スタックの更新を実行して、ターゲットのメジャーエンジンバージョンにアップグレードします。
エラー: 「DB インスタンスはすでに存在する」というエラー、または EngineVersion を他のプロパティとともに更新した際に名前が重複する
DBInstanceIdentifier がハードコーディングされている AWS::RDS::DBInstance リソースの EngineVersion を更新すると、命名衝突のエラーが発生する場合があります。
EngineVersion のみの更新は、インプレース更新となります。しかし、同じ更新で DBSubnetGroupName、KmsKeyId、DBClusterIdentifier など、置換が必要なプロパティも変更される場合、CloudFormation は代わりにインスタンスを置換します。置換の際、CloudFormation は古いインスタンスを削除する前に新しいインスタンスを作成するため、ハードコードされた識別子があると命名衝突が発生します。
**注: ** DBInstanceIdentifier を指定する場合、新しい名前も割り当てない限り、インスタンスの置き換えを必要とする更新を実行することはできません。
このエラーを解決するには、次のいずれかの操作を行います。
- 1回の更新で EngineVersion のみを変更し、置き換えをトリガーするプロパティについては別途適用してください。
- 命名衝突を回避するために、同じ更新で新しい DBInstanceIdentifier を指定してください。
- ハードコーディングされた DBInstanceIdentifier を削除し、CloudFormation が一意の名前を生成するようにします。
トリガーとなるプロパティを確認するには、AWS::RDS::DBInstance のリファレンスで、変更された各プロパティの「更新が要求」値を確認してください。「置換」とラベル付けされたプロパティは、インスタンスを置き換えます。
**重要: ** 「置換」は元のインスタンスを削除します。インスタンスを置き換えるスタックの更新を実行する前に、スナップショットを作成してください。
関連情報
describe-engine-default-parameters