はじめに
あるプロジェクトで、Auroraレプリカインスタンスの最大数・最小数を運用で柔軟に変更する必要がありました。
AWS CLI・APIを使って変更できるよう、IAMロールを作成していたのですが、以下の2つのコマンドで使い分けに迷う部分があったので記事としてまとめてみます。
- put-scaling-policy
- register-scalable-target
どちらも、AWS公式ドキュメントに細かく記載されていますが、ドキュメント上のスケーリングポリシーの編集をする際に、2つあるコマンドのどちらを使うのかが迷った部分です。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Aurora.Integrating.AutoScaling.html
結論
Auroraレプリカインスタンスの最大数・最小数を変更したい場合は register-scalable-target コマンドを使用します。
各コマンドで設定する範囲
まず、各コマンドで設定できる範囲を大まかにまとめてみました。
- put-scaling-policy:どういう条件でスケーリングするか(= ポリシー)を設定するコマンド
- register-scalable-target:最小・最大台数指定やスケーリングの一時停止などを行うコマンド
AWSマネジメントコンソールからAuroraインスタンスのスケーリングポリシーを開いてみるとわかるのですが、コンソール上でも2つに分かれています。
- ポリシーの詳細

- クラスターのキャパシティーの詳細

この2つの設定範囲でコマンドが分かれている、という形です。
各コマンドのリファレンスを確認すると、それぞれ引数として渡すものが違うこともわかると思います。(最後にリンクを載せておきます)
最大数・最小数を表す --max-capacity、--min-capacity という引数があるのは register-scalable-target の方です。
そのため、今回リードレプリカの最大数・最小数を変更するために使用するコマンドは register-scalable-target になります。
register-scalable-targetの実行
では実際にリードレプリカの最大数・最小数を変更してみます。
変更を行う前に、まず現在の設定値を確認します。
使用するコマンドは describe-scalable-targets です。
> aws application-autoscaling describe-scalable-targets --service-namespace rds
{
"ScalableTargets": [
{
"ServiceNamespace": "rds",
"ResourceId": "cluster:aurora-replica-test",
"ScalableDimension": "rds:cluster:ReadReplicaCount",
"MinCapacity": 0,
"MaxCapacity": 0,
"RoleARN": "arn:aws:iam::xxxxxxxxxxxx:role/aws-service-role/rds.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_RDSCluster",
"CreationTime": "20xx-xx-xxTxx:xx:xx.xxxxxx+09:00",
"SuspendedState": {
"DynamicScalingInSuspended": false,
"DynamicScalingOutSuspended": false,
"ScheduledScalingSuspended": false
}
}
]
}
クラスター台数分の結果が表示されますが、 "MinCapacity"、"MaxCapacity" の部分が現在の設定値です。
今は0、0になっているため、レプリカインスタンスは0台のままになります。
次に register-scalable-target コマンドを使って、変更を行います。
オプションは以下を使います。
- --service-namespace:
rds(固定値です) - --resource-id:
cluster:に続けて、AuroraDBクラスターの名前を入れます。:例)cluster:aurora-replica-test - --scalable-dimension:
rds:cluster:ReadReplicaCount(固定値です) - --min-capacity:リードレプリカインスタンスの最小数
- --max-capacity:リードレプリカインスタンスの最大数
> aws application-autoscaling register-scalable-target --service-namespace rds --resource-id cluster:aurora-replica-test --scalable-dimension rds:cluster:ReadReplicaCount --min-capacity 1 --max-capacity 1
出力が無かったので、再度 describe-scalable-targets コマンドで設定を確認します。
> aws application-autoscaling describe-scalable-targets --service-namespace rds
{
"ScalableTargets": [
{
"ServiceNamespace": "rds",
"ResourceId": "cluster:aurora-replica-test",
"ScalableDimension": "rds:cluster:ReadReplicaCount",
"MinCapacity": 1,
"MaxCapacity": 1,
"RoleARN": "arn:aws:iam::xxxxxxxxxxxx:role/aws-service-role/rds.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_RDSCluster",
"CreationTime": "20xx-xx-xxTxx:xx:xx.xxxxxx+09:00",
"SuspendedState": {
"DynamicScalingInSuspended": false,
"DynamicScalingOutSuspended": false,
"ScheduledScalingSuspended": false
}
}
]
}
"MinCapacity"、"MaxCapacity" が両方1になっています。
実際にマネジメントコンソールから確認すると、レプリカインスタンスが起動していることを確認できると思います。
これでAuroraレプリカインスタンスのオートスケール最大・最小数を変更することができました。
おわりに
リードレプリカのオートスケール最大数などは、需要予測に合わせて手動で変更する運用もあるかと思います。
今回紹介した2つのコマンドは設定する範囲が異なるので、変更したい範囲に合わせて使い分けてください。
この記事が参考になれば幸いです。
参考
- Aurora レプリカでの Amazon Aurora Auto Scaling の使用
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Aurora.Integrating.AutoScaling.html - register-scalable-target(AWS CLI Command Reference)
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/application-autoscaling/register-scalable-target.html - put-scaling-policy(AWS CLI Command Reference)
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/application-autoscaling/put-scaling-policy.html