[Amazon Aurora] リードレプリカを指定した時刻でスケーリングできるのか教えてください

[Amazon Aurora] リードレプリカを指定した時刻でスケーリングできるのか教えてください

日中のアクセス増に備えてDBの読み取り性能を上げたい、でも夜間や休日はインスタンスを減らしてコストを抑えたい...。Amazon Auroraで、そんな柔軟な運用を実現したいと考えたことはありませんか?
Clock Icon2025.07.21

困っていた内容

業務時間に合わせて、Aurora PostgreSQL リーダーインスタンスの台数を増やす方法があれば教えてください。AWS マネジメントコンソール上で確認をしてみましたが、クラスターやインスタンスの設定変更でそれらしい機能を見つけることはできませんでした。

回答

Application Auto Scaling のスケジュールアクションを利用いただくことで、リードレプリカを指定いただいた時刻にスケーリングすることが可能です。なお、Application Auto Scaling の設定には、AWS CLI または AWS CloudShell の利用が必要です。

Schedule scaling for Amazon Aurora replicas using AWS Application Auto Scaling

In the following example, we create a scheduled action named ScaleUpAurora on our cluster database-1 to set the minimum capacity of 6 and maximum capacity of 10, every day at 06:10 AM UTC:
aws application-autoscaling put-scheduled-action --service-namespace rds --schedule "cron(10 6 ? * * * )" --scheduled-action-name ScaleUpAurora --resource-id cluster:database-1 --scalable-dimension rds:cluster:ReadReplicaCount --scalable-target-action MinCapacity=6,MaxCapacity=10 --region us-east-2

やってみた

実際に、時刻を指定してリードレプリカの台数を 1 台から 3 台にスケールアウトし、その 30 分後にスケールインするように Aurora クラスターを設定してみます。

まずは、Application Auto Scaling の対象とする Aurora クラスターを作成します。マネージメントコンソールを利用して、以下の設定で作成しました。

リージョン: ap-northeast-1(東京)
エンジンバージョン: 16.6
インスタンスタイプ: db.t3.medium
リードレプリカ台数: 1 台

2025-07-20_16h33_33

スケジュール設定は、以下の2ステップで行います。

ステップ1: スケーリング対象の登録 (register-scalable-target)
まず、Aurora クラスターのリードレプリカ数を Application Auto Scaling の管理対象として登録します。これにより、レプリカ数をプログラムで変更できるようになります。

ステップ2: スケジュールアクションの作成 (put-scheduled-action)
次に、登録した対象に対して「いつ」 「何台にするか」という具体的なスケジュールを設定します。

では、実際に AWS CLI コマンドで登録していきます。以下の AWS CLI コマンドで、リードレプリカの数を Application Auto Scaling のスケーリング対象として登録します。
register-scalable-target — AWS CLI 2.27.55 Command Reference

aws application-autoscaling register-scalable-target \
    --service-namespace rds \
    --resource-id cluster:database-1 \
>   --scalable-dimension rds:cluster:ReadReplicaCount \
    --min-capacity 1 \
    --max-capacity 3

さらに、put-scheduled-action コマンドを実行して、毎日 18:00(JST)に自動的にリードレプリカが 3 台になるように設定しました。
put-scheduled-action — AWS CLI 2.27.55 Command Reference

aws application-autoscaling put-scheduled-action \
  --service-namespace rds \
> --schedule "cron( 0 9 ? * * * )" \
  --scheduled-action-name ScaleUpAurora \
  --resource-id cluster:database-1 \
> --scalable-dimension rds:cluster:ReadReplicaCount \
> --scalable-target-action MinCapacity=3,MaxCapacity=3 \
  --region ap-northeast-1

以下の AWS CLI コマンドを実行することで、スケジュールされた Aurora クラスターのアクションを確認できます。application-autoscaling put-scheduled-action コマンド実行後に、ちゃんとスケジューリングされているか確認しましょう。
describe-scheduled-actions — AWS CLI 2.27.55 Command Reference

$ aws application-autoscaling describe-scheduled-actions \
     --service-namespace rds
{
    "ScheduledActions": [
        {
            "ScheduledActionName": "ScaleUpAurora",
            "ScheduledActionARN": "arn:aws:autoscaling:ap-northeast-1:179460073119:scheduledAction:a18e2b2d-82a4-4dc4-9752-3ea291331eb1:resource/rds/cluster:database-1:scheduledActionName/ScaleUpAurora",
            "ServiceNamespace": "rds",
            "Schedule": "cron( 0 9 ? * * * )",
            "ResourceId": "cluster:database-1",
            "ScalableDimension": "rds:cluster:ReadReplicaCount",
            "ScalableTargetAction": {
                "MinCapacity": 3,
                "MaxCapacity": 3
            },
            "CreationTime": "2025-07-20T08:20:16.615000+00:00"
        }
    ]
}

18:00 を少し過ぎたぐらいのタイミングでマネージメントコンソール上で、リードレプリカが 2 台作成され始めたことを確認できました。

2025-07-20_18h01_31

Cloud Trail においても、AutoScaling-UpdateDesiredCapacity によってリードレプリカ 2 台が作成されたことが確認できました。

2025-07-20_18h05_07

スケールインについても自動化できるか確認してみます。18:30(JST)にスケールインするように設定しました。

aws application-autoscaling put-scheduled-action \
--service-namespace rds \
--schedule "cron( 30 9 ? * * * )" \
--scheduled-action-name ScaleinAurora \
--resource-id cluster:database-1 \
--scalable-dimension rds:cluster:ReadReplicaCount \
--scalable-target-action MinCapacity=1,MaxCapacity=1 \
--region ap-northeast-1

マネージメントコンソール上で、リードレプリカ 2 台の削除が開始されたことを確認できました。

2025-07-20_18h32_21

Cloud Trail においても、AutoScaling-UpdateDesiredCapacity によってリードレプリカが削除されたことが確認できました。

2025-07-20_18h47_13

スケールインについても、問題無く実施されました。

おまけ(クーロン実践例):平日の業務時間だけスケールさせる

最も一般的なユースケースとして、平日の業務時間( 9:00 〜 18:00 )だけレプリカを 1 台から 3 台に増やすクーロン設定を紹介します。

  1. スケールアウト (平日JST 9:00 / UTC 0:00)
aws application-autoscaling put-scheduled-action \
  --service-namespace rds \
  --scheduled-action-name scale-out-weekdays \
  --resource-id cluster:database-1 \
  --scalable-dimension rds:cluster:ReadReplicaCount \
  --schedule "cron(0 0 ? * MON-FRI *)" \
  --scalable-target-action MinCapacity=3,MaxCapacity=3
  1. スケールイン (平日JST 18:00 / UTC 9:00)
aws application-autoscaling put-scheduled-action \
  --service-namespace rds \
  --scheduled-action-name scale-in-weekdays \
  --resource-id cluster:database-1 \
  --scalable-dimension rds:cluster:ReadReplicaCount \
  --schedule "cron(0 9 ? * MON-FRI *)" \
  --scalable-target-action MinCapacity=1,MaxCapacity=1

クーロンの詳細について更に知りたい方は、下記 AWS ドキュメントをご一読ください。
Schedule recurring scaling actions using Application Auto Scaling - Application Auto Scaling

まとめ

今回紹介したスケジュールアクションを活用することで、アクセスの少ない夜間や休日のリードレプリカを自動で停止し、データベースコストを最適化することができます。

この記事がどなたかのお役に立てば幸いです。

参考資料

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.