🌉

Aurora Serverless v2のACUをEventBridge単体で調整する

2023/08/04に公開

AWS Aurora Serverless v2とは?

Auroraは、MySQLとPostgreSQLと互換性がある完全マネージドリレーショナルデータベースエンジンです。

Auroraについての詳細はAWSのサイトでご確認いただくほうがよいでしょう。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html

Serverless v2については、以下をご覧ください。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html

Serverless v2では、Provisionedインスタンスにはない設定項目「最小ACU」と「最大ACU」があります。

この二つこそ、Serverless v2の性能やコストを左右する重要な設定になります。

Aurora Serverless v2のACUとは?

ACUは、Aurora Capacity Unitと呼ばれる単位のCPUとメモリをセットしたようなものと思っていただければ大きな間違いはないでしょう。

このACUの値をクラスター単位で指定してデータベースの容量の範囲を決定します。
最小と最大を指定しますが、それによって指定された範囲内で自動的にスケールしてくれます。

以下のような構成の場合、それぞれのインスタンスにクラスター単位で設定した最小ACUと最大ACUが適用されることになります。

  • Serverless v2 インスタンス(ライターインスタンス)x1
  • Serverless v2 インスタンス(リーダーインスタンス)x1

例として、上記クラスターに、最小ACU:30、最大ACU:60と設定した場合、ライター・リーダーそれぞれのインスタンスに最低でも30ACUが確保されることになりますから、クラスターでの合計は、60ACUが確保されているということになります。

コストの面から見て見ると、このACUの確保数※を元に課金されます。
つまり、最小ACUをどこまで低く設定できるかが肝となってきます。

※CloudWatchのメトリックスでは、 Serverless Capacityとして表示できます。

なお、急激に負荷が増加するようなケースでは、最小ACUを0.5, 最大ACUを128に設定するのはやめましょう。
公式ドキュメントにも記載がありますが、最小ACUと最大ACUの範囲が小さいほどスケール速度が向上し、パフォーマンスにも影響が出ます。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.setting-capacity.html

ACUの設定はインスタンス停止を伴わない

ACUはコンソールからもしくはAuroraのAPIを叩くことで変更することができます。

AWS-CLIでも設定できます。

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/modify-db-cluster.html

設定変更時にはインスタンスの停止を伴いませんので、運用中でも設定することができます。

ACU設定をスケジュールで変更する

AWS-CLIからも叩けますし、LambdaやEventBridgeからAPIを叩いて変更することもできます。

Lambdaから実行する方法については、collabo_morishitaさんの記事が参考になります。

https://zenn.dev/collabostyle/articles/02e1533a97923c

この記事では、EventBridgeからスケジュールでACUの設定変更を行ってみましょう。

EventBridge単体でスケジュールによるACU設定を変更する

以下の手順で、EventBridge単体でスケジュールによるACUの調整がおこなえます。

まずは、Amazon EventBridgeのコンソールに入ります。
以下の通り、スケジュールを作成します。

  • EventBridge スケジュールを選択し、スケジュールのパターンを登録
  • ターゲットの選択でRDSを検索
    • ModifyDBClusterを選択

「入力」に次のように入力します。

{
	"DbClusterIdentifier": "<対象クラスターのID>",
	"ServerlessV2ScalingConfiguration": {
		"MinCapacity": <最小ACUの値>,
		"MaxCapacity": <最大ACUの値>
	}
}

※<対象クラスターのID>部はARNやリソースIDではありません。
RDSの設定タブから確認できる、DBクラスターIDになります。

アクセス許可用のIAMロールを作成します。
EventBridgeのルール(またはスケジュール)に対し、RDSのModifyDBCluster実行許可ポリシーをセットしたロールを設定します。

あとは作成するだけで、スケジュールはデフォルトで有効化されているはずです。

一度確認して、正常に変更されているか、Aurora側で確認しましょう。

いかがでしたでしょうか。

Serverless v2インスタンスはスパイクが発生するようなワークロードでもスケールしてくれますし、なにより停止を伴わずにスケール幅を調整できるところがいいですね。

コラボスタイル Developers

Discussion