CDK For TerraformでAurora AutoScaleの導入
- サンプルコード
// Aurora Cluster Aurora AutoScaling
const autoScaleEnabled = true;
const autoScaleMinDbcount = 0; // 0にしても既存のReaderインスタンスは影響をうけない
const autoScaleMaxDbcount = 5; // 最大は15台まで
const autoScaleTargetValue = 70;
if (autoScaleEnabled == true) {
const appAutoScalingTarget = new aws.appautoscalingTarget.AppautoscalingTarget(this, 'replicas', {
minCapacity: autoScaleMinDbcount, // 最大台数 環境別に設定する
maxCapacity: autoScaleMaxDbcount, // 最小台数 環境別に設定する
resourceId: `cluster:sample-db-cluster`,
scalableDimension: 'rds:cluster:ReadReplicaCount',
serviceNamespace: 'rds',
});
new aws.appautoscalingPolicy.AppautoscalingPolicy(this, 'AuroraReadReplicaAutoScalingPolicy', {
name: 'AuroraReadReplicaAutoScalingPolicy',
policyType: 'TargetTrackingScaling',
resourceId: appAutoScalingTarget.resourceId,
scalableDimension: appAutoScalingTarget.scalableDimension,
serviceNamespace: appAutoScalingTarget.serviceNamespace,
targetTrackingScalingPolicyConfiguration: {
predefinedMetricSpecification: {
predefinedMetricType: 'RDSReaderAverageCPUUtilization',
},
disableScaleIn: false, // スケールインを無効にする
targetValue: autoScaleTargetValue, // スケールする時のCPU利用栗
scaleInCooldown: 600, // スケールインのクールダウン時間 600秒
scaleOutCooldown: 300, // スケールアウトのクールダウン時間 300秒
},
});
}
ややこしいのが disableScaleIn
の値で
これをfalseにしておかないと(デフォルトはfalseですが)
オートスケールで作成されたインスタンスのスケールインが発生しなくなります。
あまりスケールインを無効にするケースが思いつかないですが、
基本はfalseでいいと考えています。
最小台数ですが、コメントの通り、
0にしても既存のReaderインスタンスには影響を与えません。
ただ既にReaderインスタンスが1台稼働している場合は
1にしても変化はありません。
Writerインスタンスが1 Readerインスタンスが1の状態で
Readerインスタンスを2台にする場合は 0 から2にしてあげる必要があります。
「じゃあ1にしておけばいいじゃん」となるのですが、
弊社都合でRDSの台数は別パラメータで管理しており、
明示的に変更するときに2箇所変更しないといけなくなるオーバーヘッドを
考慮して0で一旦固定としています。
尚、オートスケールは既存台数を認識してはいるものの、
明示的に作成したReaderインスタンスは勝手にスケールインしないようにしているようです。
注記にもあるのですが、どうゆうことか理解がおいついておらず、
実際に試してみて確認しました。
注記
最小容量と最大容量は、Aurora DB クラスターに対して設定されます。指定された値は、その Aurora DB クラスターに関連付けられたポリシーすべてに適用されます。