LoginSignup
2
1

More than 5 years have passed since last update.

RDSで時間指定によるオートスケールを実現する

Last updated at Posted at 2019-02-04

はじめに

RDS(Aurora)ではオートスケールの設定が可能なのですが、トリガに利用できるのが

  • Aurora レプリカの平均 CPU 使用率
  • Aurora レプリカの平均接続数

の2つで、予めRDSの負荷が高い時間帯を狙ってオートスケールするのが難しかったので代替案を模索しました。

RDSの負荷(CPU使用率)のイメージ
03a7edb9-a4bf-ebaa-1955-24b282617a62.png

検討したこと

対象のRDS構成は以下の通りです。

RDS構成
Cluster
┣ Writer
┣ Reader1
┗ Reader2
  • Readerを予め追加した上で必要に応じて起動・停止をコントロールする。
    →そもそもClusterにぶら下がるインスタンスを停止状態にできませんでした。
  • 全インスタンスをスケールアップする。
    →特定の時間以外はリソースが足りているため、不採用としました。

今回採用した案

  • RDSの負荷(CPU使用率)が高い時間帯にReaderを一台追加する。
  • 追加する時間帯はCloudWatchのイベントルールに設定する。追加するのは所定の時刻になったらReaderを追加するものと、削除するものの2つ。
  • Readerの追加削除はLambda関数を使って実行する。

具体的な対応内容

IAM

Lambda用にRDSに対しフルアクセスできるロールを作成します。

Lambda

Reader追加と削除の関数をそれぞれ準備します。
今回はPython3.7を採用しました。

追加
import boto3

def lambda_handler(event, context):
    # TODO implement
    rds = boto3.client('rds')
    response = rds.create_db_instance(
        Engine='aurora',
        DBClusterIdentifier='[対象クラスタ]',
        DBInstanceIdentifier='[追加するインスタンス名]',
        DBInstanceClass='[他のReadeのインスタンスクラスで良いかと]',
        PubliclyAccessible=False, #外部接続OKであればTrueで
        DBParameterGroupName='[他のReaderのパラメータグループ名で良いかと]',
        PromotionTier=15 #フェイルオーバー優先度は最も低くします
    )
    print(response)
    return 0
削除
import boto3

def lambda_handler(event, context):
    # TODO implement
    rds = boto3.client('rds')
    response = rds.delete_db_instance(
        DBInstanceIdentifier='[追加時のインスタンス名]',
        SkipFinalSnapshot=True
    )
    print(response)
    return 0

CloudWatch

イベントルールからルールを作成します。

  • 追加用のルール:スケジュールからCron形式を選び追加する時刻を指定、ターゲットは先に作成したLambda関数(追加)を指定します。
  • 削除用のルール:スケジュールからCron形式を選び追加する時刻を指定、ターゲットは先に作成したLambda関数(削除)を指定します。

確認

リアルタイムで確認可能であれば、RDSのデータベース一覧から確認でき、
リアルタイムで確認が難しければ、通知メール(RDS Notification Message)で確認が可能です。

おわりに

今回はRDSの設定のみで対応が難しかったので力技になりましたが、他に良い対応方法などありましたらコメントのほどお願いいたします。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1