Amazon Aurora オートスケーリングでも ScheduledAction が使えた

はじめに

オートスケーリング機能でよく使われるのは EC2 のオートスケーリング機能だと思います。 ポリシーを設定すると自動でインスタンスを増減させてスケールアウト、スケールインできます。 またスケジュールされたアクションも設定することができて、これで最大、最小、希望のインスタンス数を変えることができます。 時間が予定されるイベントなどではスケジュールされたアクションを使うことがあります。

Aurora では Read Replica のオートスケーリング機能があります。 CPU 使用率やデータベース接続数でのオートスケーリングポリシーを設定して自動で Read Replica 数を増減することができます。 Aurora Read Replica でもスケジュールされたアクションが使えるようで便利だと思うんですが、これについて書いてる記事があまりなかったので書いておきます。

使えそうなケース

時間が決まっていて負荷がかかることがわかっているイベントであらかじめ Read Replica 数を増やしておくというのがあると思います。

docs.aws.amazon.com

cron 式でのスケジュール設定もできるので毎週のスケジュールや毎日のスケジュールなどで Read Replica 数を変えたりもできます。 アクセスが少ない時間帯に Read Replica 数を減らしておくなどしてコスト削減できるかもしれません。

やり方

  • スケーラブルターゲットとオートスケーリングポリシー作成
  • ScheduledAction 作成

という感じでできました。

オートスケーリングポリシー作成は AWS のウェブ上からもできたんですが ScheduledAction は RDS の画面からは表示も編集もできませんでした。 今のところは CLIAPI などを使ってやる必要があるようです。 もしかするとオートスケーリングのサービスの方から設定したりできるのかもしれないんですが ap-northeast-1 リージョンではまだ提供されていないので使えませんでした。

スケーラブルターゲットとオートスケーリングポリシー作成はこちらのドキュメントの方法でできました。

docs.aws.amazon.com

ScheduledAction の設定は put-scheduled-action で行います。 autoscaling サブコマンドではなく application-autoscaling サブコマンドを使います。

put-scheduled-action — AWS CLI 1.15.76 Command Reference

aws application-autoscaling put-scheduled-action \
  --service-namespace rds \
  --schedule at(2018-12-31T20:00:00) \
  --scheduled-action-name '{{schedule_name}}' \
  --resource-id 'cluster:{{db_cluster}}' \
  --scalable-dimension rds:cluster:ReadReplicaCount \
  --scalable-target-action 'MinCapacity=2,MaxCapacity=2'

describe-scheduled-actions — AWS CLI 1.15.76 Command Reference

describe-scheduled-actions で登録されているスケジュールが取得できます。

aws application-autoscaling describe-scheduled-actions --service-namespace rds --resource-id 'cluster:{{db_cluster}}'

参考

docs.aws.amazon.com qiita.com dev.classmethod.jp