

Aurora Serverless v2、ReaderをCDKで足さないとスケールアウトはしない
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
Aurora Serverless v2をCDKで組むとき、DatabaseClusterにWriter/Readerをどう定義すればいいか迷ったので整理した。
結論
- Writerだけあれば動く。Readerは任意
- Reader無しでも自動でスケールする(ただしACUのスケールアップの話)
- インスタンスの数(Readerの追加)は基本的に自動では増えない
「自動スケール」という言葉に、垂直(ACU増減)と水平(インスタンス数)の2つの意味が混ざっているのが混乱の原因だった。
CDKでの最小構成
Writerだけならこれで十分。
const cluster = new rds.DatabaseCluster(this, 'Cluster', { engine: rds.DatabaseClusterEngine.auroraPostgres({ version: rds.AuroraPostgresEngineVersion.VER_16_4, }), writer: rds.ClusterInstance.serverlessV2('writer'), serverlessV2MinCapacity: 0.5, serverlessV2MaxCapacity: 4,});Readerが必要になったらreadersに追加する。
readers: [ rds.ClusterInstance.serverlessV2('reader1', { scaleWithWriter: true }),],ACUのスケール(垂直)は常に自動
WriterもReaderも、それぞれのACUは負荷に応じて自動で増減する。これはReaderの有無に関係ない。Writer単体構成でも、書き込み・読み取り両方の負荷でACUが動く。
インスタンス数(水平)は基本手動
Readerを1台から3台に増やす、みたいな話は自動では起きない。CDKやコンソールから明示的に追加する必要がある。
ただし例外がある。Application Auto Scalingのポリシーをクラスターに設定すれば、Reader自体の追加・削除を自動化することもできるらしい(自分では未検証)。デフォルトの挙動としては「Reader数は固定、増やすなら手動」と考えておけば大きく外さない。
scaleWithWriterとpromotion tierの落とし穴
Readerを追加するとき、scaleWithWriterオプションとpromotion tierの組み合わせで挙動が変わる。
AWSの公式ドキュメントには、promotion tierが0か1でないReaderは、Writerと一緒にスケールしない場合があると書かれている。つまり「WriterとReaderはそれぞれ独立してACUがスケールする」という理解は、tier設定次第で条件が変わる。
フェイルオーバー用に昇格させたいReaderなら、tierとscaleWithWriterの設定をちゃんと合わせておかないと、いざという時にACUが足りない状態でPromoteされることになりそう。
構成の考え方
flowchart TD
A[サービス開始] --> B[Writerのみ]
B --> C{読み取り負荷が増える}
C -->|Yes| D[Readerを1台追加]
C -->|No| B
D --> E{さらに増える}
E -->|Yes| F[Readerを追加/tier調整]
E -->|No| D
classDef start fill:#e0f2fe,stroke:#0284c7,color:#0c4a6e;
classDef decision fill:#fef9c3,stroke:#ca8a04,color:#713f12;
classDef action fill:#dcfce7,stroke:#16a34a,color:#14532d;
class A,B start
class C,E decision
class D,F action
最初はWriterのみで様子を見て、読み取り負荷が上がってきたらReaderを足す、という順番で問題ない。ACUのスケールアップだけである程度は吸収できるので、Reader追加は本当に必要になってからで十分そう。
まとめると
- 「自動スケール」=ACUの話。インスタンス数の話ではない
- Reader追加はデフォルト手動。Auto Scalingポリシーを組めば自動化もできるが未検証
- Readerのpromotion tierと
scaleWithWriterはセットで考える必要がある