

CDKでAurora PostgreSQLをServerless v2にするとParameterGroupとengine modeで弾かれる
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
CDKでAurora PostgreSQLのクラスターを作ろうとして、続けて2つのエラーにぶつかった。どっちもエンジンのバージョン指定周りが原因だった。
起きたこと
最初に出たのがこれ。
Could not create a new ParameterGroup for an unversioned aurora-postgresql cluster engine.Please either use a versioned engine, or pass an explicit ParameterGroup when creating the clusterバージョンを指定して回避したら、次はこっち。
The engine mode serverless you requested is currently unavailable.ParameterGroupのエラーについて
DatabaseClusterEngine.AURORA_POSTGRESQLのようにバージョンを指定しない状態(unversioned engine)でクラスターを作ろうとすると、CDKが自動生成しようとするParameterGroupがどのバージョン向けか決められずに弾かれる。
CDKのGitHub Issue(aws-cdk#13936, #14031)にも同じ内容の報告があって、unversionedなエンジンにParameterGroupを紐付けることはできない、非serverlessクラスターでunversionedエンジンを使うのは可用性リスクだから非推奨、と書いてあった。
直し方は2通り。
エンジンのバージョンを明示する。
engine: rds.DatabaseClusterEngine.auroraPostgres({ version: rds.AuroraPostgresEngineVersion.VER_15_2,}),もしくは、バージョン指定なしのままにしたいなら明示的にParameterGroupを渡す。
const parameterGroup = new rds.ParameterGroup(this, 'MyParamGroup', { engine: rds.DatabaseClusterEngine.auroraPostgres({ version: rds.AuroraPostgresEngineVersion.VER_15_2, }), parameters: { log_min_duration_statement: '1000', },});ただしParameterGroup自体を作るときはバージョン指定必須なので、結局どこかでバージョンは決めることになる。
engine mode serverlessのエラーについて
こっちはAurora Serverless v2固有の話。今回自分がぶつかった原因は主に3つ。
- 指定したPostgreSQLのバージョンがServerless v2に対応していない
- リージョンがServerless v2に対応していない
serverlessV2MinCapacity/serverlessV2MaxCapacityを指定していない
現時点(2025年3月)でServerless v2が対応しているPostgreSQLの最小バージョンはざっくり13.6 / 14.3 / 15.2以降らしい。ただしこの辺はマイナーバージョンの更新で最小要件が上がることがあるようなので、実際に使うバージョンで通るかどうかはaws rds describe-orderable-db-instance-optionsで確認したほうが確実だと思う(未確認)。
capacityの指定はこんな感じ。
serverlessV2MinCapacity: 0.5,serverlessV2MaxCapacity: 4,ServerlessClusterかDatabaseClusterか
もう一つ引っかかったのが、CDKのL2コンストラクトのどっちを使うかという話。
rds.ServerlessClusterはAurora Serverless v1専用で、Serverless v2では使わない。v2の場合はrds.DatabaseClusterにserverlessV2MinCapacityとserverlessV2MaxCapacityを渡す形になる。
const cluster = new rds.DatabaseCluster(this, 'MyAuroraCluster', { engine: rds.DatabaseClusterEngine.auroraPostgres({ version: rds.AuroraPostgresEngineVersion.VER_15_2, }), vpc, serverlessV2MinCapacity: 0.5, serverlessV2MaxCapacity: 4, credentials: rds.Credentials.fromGeneratedSecret('admin'), defaultDatabaseName: 'mydatabase',});名前だけ見るとServerlessClusterの方がそれっぽく見えるけど、v2を使うつもりならこっちは選ばない。
Aurora Serverless v1自体は2025年3月31日でEOLが予定されているので、新規で作るならv1を選ぶ理由はもうなさそう。