Amazon Aurora Serverless v2 のスケールアップ・スケールダウンを Amazon EventBridge Scheduler だけで実装する
2023.8.23
はじめに
Aurora Serverless は使用している ACU 単位でコストが発生します。
アクセスが無い時間帯だと ACU は最小値を維持します。
そのため、日中帯しかデータベースが利用されない場合は深夜帯で、最小 ACU を下げることによりコスト最適化が行なえます。
今回は、EventBridge Scheduler を使って自動的に ACU をスケールアップ・スケールダウンする方法についてご説明いたします。
以前は、EventBridge + Lambda が必要でしたが、EventBridge Scheduler がリリースされて API をそのまま実行出るようになったため EventBridge だけで実装することができるようになりました。
自動スケールアップ・スケールダウンをスケジューリングする
前提
- Aurora Serverless v2 MySQL を構築済み
自動スケールアップ・スケールダウンの流れ
- EventBridge Scheduler で任意のタイミングでイベント起動
- ModifyDBCluster イベントでスケーリングの設定を変更
スケジューリング設定を追加する
まずは、EventBridge Scheduler を作成していきます。
スケジュールのパターンについてはお好みで設定して下さい。
以下例は、毎日 18 時にスケールダウンさせるスケジュールのパターンになります。
次はターゲットを選択しますが設定する値は以下の通りです。
- API:ModifyDBCluster
- ペイロード:
{"DbClusterIdentifier":"cold-airflow-aurora-scheduler","ServerlessV2ScalingConfiguration":{"MaxCapacity":2,"MinCapacity":1}}
ModifyDBCluster – Amazon Relational Database Service
コンソールからだと、API 名でしらべても出てこないのでまずはサービス名(RDS)で検索します。
[Amazon RDS] を選択したら、API 名(ModifyDBCluster)で再度検索します。
そうすると、パラメータ入力画面が出てくるので設定する値を入力します。
なお、ペイロードのクラスター名(DbClusterIdentifier)は対象とする Aurora クラスター名にして下さい。
「MaxCapacity」と「MinCapacity」はスケールさせたい値を入力して下さい。
その際の注意点として、「MaxCapacity」のほうが「MinCapacity」より大きい値になるようにしてください。
(ぱっと見文字列が同じなので間違えてエラーなりました)
個人的には、再試行ポリシーは不要だと思うので無効にしておきます。
大体は、一回失敗するとその後も失敗すると思うので不要な試行をさせたくない意図です。
自動スケールアップ・スケールダウンさせる
今回は、検証のため 「定期的なスケジュール」ではなく「一回限りのスケジュール」で設定していきます。
スケジュールが実行される前の、最小 ACU と最大 ACU は以下の通りです。
- 最小 ACU:0.5
- 最大 ACU:1
それを以下容量にスケールアップさせます。
- 最小 ACU:1
- 最大 ACU:2
上記で設定をして、時間が経つまで暫く待つと ACU 値が変わります。
CloudTrail のイベントでも以下のように記録されてます。
{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AROAVPARCPUZY47FPCSTO:54c2bc601452306d9db796c0adb0ca27", "arn": "arn:aws:sts::375845453107:assumed-role/EventBridgeRole/54c2bc601452306d9db796c0adb0ca27", "accountId": "375845453107", "accessKeyId": "xxxxxxxxxxxxxx", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAVPARCPUZY47FPCSTO", "arn": "arn:aws:iam::375845453107:role/EventBridgeRole", "accountId": "375845453107", "userName": "EventBridgeRole" }, "webIdFederationData": {}, "attributes": { "creationDate": "2023-06-02T00:38:02Z", "mfaAuthenticated": "false" } } }, "eventTime": "2023-06-02T00:38:02Z", "eventSource": "rds.amazonaws.com", "eventName": "ModifyDBCluster", "awsRegion": "us-east-1", "sourceIPAddress": "54.198.180.126", "userAgent": "AmazonEventBridgeScheduler, aws-sdk-java/2.20.67 Linux/5.10.179-166.674.amzn2.x86_64 OpenJDK_64-Bit_Server_VM/11.0.19+8-LTS Java/11.0.19 kotlin/1.6.21-release-334(1.6.21) vendor/Amazon.com_Inc. md/internal exec-env/AWS_ECS_FARGATE io/async http/NettyNio cfg/retry-mode/legacy", "requestParameters": { "dBClusterIdentifier": "cold-airflow-aurora-scheduler", "applyImmediately": false, "allowMajorVersionUpgrade": false, "serverlessV2ScalingConfiguration": { "minCapacity": 1, "maxCapacity": 2 }, "allowEngineModeChange": false }, "responseElements": { "allocatedStorage": 1, "availabilityZones": [ "us-east-1c", "us-east-1b", "us-east-1f" ], "backupRetentionPeriod": 1, "databaseName": "test", "dBClusterIdentifier": "cold-airflow-aurora-scheduler", "dBClusterParameterGroup": "default.aurora-mysql8.0", "dBSubnetGroup": "cold-airflow-aurora-scheduler", "status": "available", "earliestRestorableTime": "Jun 2, 2023 12:20:09 AM", "endpoint": "cold-airflow-aurora-scheduler.cluster-co4nqylz6jpl.us-east-1.rds.amazonaws.com", "readerEndpoint": "cold-airflow-aurora-scheduler.cluster-ro-co4nqylz6jpl.us-east-1.rds.amazonaws.com", "multiAZ": false, "engine": "aurora-mysql", "engineVersion": "8.0.mysql_aurora.3.02.0", "latestRestorableTime": "Jun 2, 2023 12:36:18 AM", "port": 3306, "masterUsername": "root", "preferredBackupWindow": "03:22-03:52", "preferredMaintenanceWindow": "wed:04:11-wed:04:41", "readReplicaIdentifiers": [], "dBClusterMembers": [ { "dBInstanceIdentifier": "cold-airflow-aurora-scheduler-serverless-instance", "isClusterWriter": true, "dBClusterParameterGroupStatus": "in-sync", "promotionTier": 0 } ], "vpcSecurityGroups": [ { "vpcSecurityGroupId": "sg-0dd842e1e9de50671", "status": "active" } ], "hostedZoneId": "Z2R2ITUGPM61AM", "storageEncrypted": false, "dbClusterResourceId": "cluster-Y75DPZ4VKN4TLKZOOB4YNH7PTY", "dBClusterArn": "arn:aws:rds:us-east-1:375845453107:cluster:cold-airflow-aurora-scheduler", "associatedRoles": [], "iAMDatabaseAuthenticationEnabled": false, "clusterCreateTime": "Jun 2, 2023 12:18:31 AM", "engineMode": "provisioned", "autoMinorVersionUpgrade": true, "deletionProtection": false, "httpEndpointEnabled": false, "copyTagsToSnapshot": false, "crossAccountClone": false, "domainMemberships": [], "tagList": [ { "key": "Name", "value": "cold-airflow-test-tf" } ], "networkType": "IPV4", "serverlessV2ScalingConfiguration": { "minCapacity": 1, "maxCapacity": 2 } }, "requestID": "d0647939-e8ff-452e-81f2-1d7af8606f06", "eventID": "507710c1-7879-475a-aeb9-d821fc80634b", "readOnly": false, "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "375845453107", "eventCategory": "Management", "tlsDetails": { "tlsVersion": "TLSv1.2", "cipherSuite": "ECDHE-RSA-AES128-GCM-SHA256", "clientProvidedHostHeader": "rds.us-east-1.amazonaws.com" } }
参考資料
ModifyDBCluster – Amazon Relational Database Service
ServerlessV2ScalingConfiguration – Amazon Relational Database Service
Aurora Serverless v2 の仕組み – Amazon Aurora
Amazon Aurora Serverless v2 の一般提供開始 | Amazon Web Services ブログ
Aurora Serverless v2 でのパフォーマンスとスケーリング – Amazon Aurora
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitter2021年新卒入社。インフラエンジニアです。RDBが三度の飯より好きです。 主にデータベースやAWSのサーバレスについて書く予定です。あと寒いのは苦手です。
Recommends
こちらもおすすめ
-
Amazon EventBridgeのRDSイベントメッセージが結構便利だった話
2024.12.8
-
Amazon S3のデータをAmazon Auroraにインポートする
2023.9.28
-
AWS Chatbotを使って、Slack通知をカスタマイズする
2024.2.15
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16