🦊

Aurora Serverless v2の最低ACUを0にしても止まらなかった話

に公開

はじめに

どうも、DELTAの馬場です。
今回は検証をする中で、Aurora Serverless V2の最小スケール値を0にしても停止しないケースに遭遇したので、その際のトラブルシュートを備忘がてら記載します。

今回は1つのケースについて取り上げますが、全体的な仕様についてはこちらを参照ください。

Aurora Serverless v2 の0スケール

そもそも0スケールの紹介をします。
https://aws.amazon.com/jp/about-aws/whats-new/2024/11/amazon-aurora-serverless-v2-scaling-zero-capacity/
2024年11月に発表された機能で、それまでできなかったAurora Serverless v2の(一時)停止ができるようになりました。開発環境や検証環境、待機時間の許される一部のDBなどでコスト面に効果を発揮することが期待されます。

利用を開始するには

新しいクラスターの場合、最小容量設定で ACU を 0 に設定します。
既存のクラスターの場合は、サポートされているバージョンに更新してから、最小容量設定を 0 ACU に変更します。
0 ACU は Aurora PostgreSQL 13.15 以上、14.12 以上、15.7 以上、16.3 以上Aurora MySQL 3.08 以上 でサポートされています。

今回起こった事象

対象バージョンのクラスターに対して最小ACUを "0" に設定し、5分で設定した DB クラスターの許容されるアイドル時間 が経過するまで待ってみたが 0.5ACU 以下にならなかった。

何が問題だったか?

Aurora MySQLのDBで検証用に設定していた binlog_format の値が悪さをしていた。

Auroraではレプリケーション接続の正常性をチェックするために、裏で動いているものがありそのため接続等が無いのに停止されない。という状態になっていました。

そこで binlog_format をOFFに変更しました。

これで停止するはず

と思ったのですが、DB クラスターの許容されるアイドル時間 を過ぎても止まらない状態が続いていました。
調べたところ、これは Static なパラメータグループのパラメータである binlog_format を変更した後に再起動していなかったことが原因でした。

DBインスタンスの再起動後、ようやく停止したことが確認できました!

結局何が必要だったか?

今回の私のケースでは binlog_format の設定を OFF にすることパラメータ変更後の再起動をすること
が必要でした。

他のACUが0にならないケース

Aurora Serverless v2 が自動で一時停止しない状況にならないケースは意外とたくさんあるようです。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2-auto-pause.html

今回取り上げたケース以外だと、RDSプロキシを利用しているケースでも0にならなかったりするそうでした。

ACU=0から起動するケース

ACUが0の状態から呼び出しをしてみます。

単純にアプリなどを動かすのも手ですが、エラーになったり起動が手間になる場合は RDS Data API を利用すると楽な気がします。

クラスター設定からRDS Data APIを有効化し、画面左のメニューからクエリエディタを選択します。

接続情報を入力し

クエリを実行します。適当にSELECT 1;を実行。 現状では一次停止状態ですが

リクエストを送信したので、しばらく待つとACUが起きてきます

再度同じクエリを実行すると問題なく返ってきます。

このように RDS Data APIクエリエディタ を組み合わせることで
AWSコンソールで完結するAurora Serverlessの暖気運転が可能になります。

最後に

せっかくコスト削減のために導入する設定が、油断すると効果を最大に受け取れないので
最小ACU=0 の設定をされている方は、今一度本当に停止しているか?を確認してみてください!

DELTAテックブログ

Discussion