Amazon Aurora Serverless v2が最小キャパシティ0に対応し、自動停止・再開が可能になりました
Amazon Aurora Serverless v2 はAurora Capacity Unit(ACU)という単位でリソース管理され、0.5 ACU単位でワークロードに応じてスケールアップするサーバーレスデータベースです。従来は最小ACUが0.5でしたが、0キャパシティに対応したことにより、アクティビティのないインスタンスが自動的に停止・再開するようになりました。
例えば、本番・開発環境に同じAurora Serverless v2を導入しているケースにおいて、夜間や週末はアイドル状態を伴う開発環境の最小ACUを0にしておけば、利用がなくなるとインスタンスは自動停止し、コスト削減に繋がります。
対応DBエンジン
以下のAuroraエンジンに対応しています
- PostgreSQL : 16.3, 15.7, 14.12, 13.15
- MySQL : 3.08.0 以上
やってみた
Auroraクラスターの作成画面を選択し、ACU 0に対応したDBエンジンバージョンを選択します。
DB Instance Classで "Serverless v2"を選択し、最小 Capacity を0に設定すると、アクティビティがなくなってから ACU 0にスケールインする時間("Pause after inactivity")を5分から24時間の範囲で指定できるようになります。
後は、通常通りにクラスターを作成しましょう。
一定時間放置すると、DBインスタンスが一時停止したことがイベント出力されます。
CloudWatch Metrics の ServerlessDatabaseCapacity
を確認すると、ACU が 0.5 になった後、"Pause after inactivity" で指定した5分後に ACU が 0 になっていることがわかります。
再開時の注意事項
インスタンスがいったん一時停止すると、再接続には15秒程度かかります。
また、停止期間が24時間を超えると "deeper sleep"モードとなり、接続に30秒以上かかる場合があります。
If an Aurora Serverless v2 instance remains paused more than 24 hours, Aurora can put the instance into a deeper sleep that takes longer to resume. In that case, the resume time can be 30 seconds or longer, roughly equivalent to doing a reboot of the instance. If your database has periods of inactivity that last longer than a day, we recommend setting connection timeouts to 30 seconds or more.
停止状態のサーバーレスインスタンスにも正しく接続できるように、アプリケーションのタイムアウト期間を30秒以上に設定したり、リトライ回数を増やすなどしましょう。
アイドル判定について
アイドル状態の判定には、Pause after inactivity で指定したしきい値が利用され、30秒から24時間の間で指定できます。
クライアントがコネクションを貼り続けていると、inactive と判定されないため、注意しましょう。
また、ロードバランサー(ALB)等から、ヘルスチェックのハートビートを打ち続けていると、同様にアイドルにはなりません。
フェイルオーバーPriority TierとACUの関係
Amazon Aurora Serverless v2は Priority Tierを0または1に設定されていると、ライターのフェイルオーバー先とみなされます。
フェイルオーバーが発生してWriterにプロモートしたときに、スペック不足とならないよう、Serverless v2 インスタンスの Priority が 0または1に設定されている場合、少なくとも Writer と同じスペックの ACU を確保するよう ACU が追従します。
複数台インスタンスを抱えるAuroraクラスターで ACU 0 を利用したい場合、主に2つのユースケースが考えられます。
- ライターも ACU 0を連動させる:
- インスタンスの Priority Tier を 0または1 に設定
- ライター・リーダーの ACU 0を連動させる
- 一部のリーダーだけをACU 0にする:
- 2台は Priority Tierを 0または1 に設定
- ACU 0を使いたい3台目の Priority Tier を2から15の範囲で指定し、最小ACUを0に設定
- 3台目のみが ACU 0にスケールダウンします
Aurora Global Databaseの制限
Aurora Global Databaseにもいくつかの制限があります。
プライマリ・クラスターはGlobal Databaseの他のクラスターを管理するために、起動している必要があるため、自動停止できません。
セカンダリ・クラスターも自動停止できません。
ACU = 0 に対応していないバージョンを選択している場合
Serverless v2を選択しながら、ACU 0に対応していないバージョンを選択していると、以下の様なメッセージが表示され、ACU を 0に設定できません。
Selected Aurora MySQL version doesn't support pausing Aurora Serverless v2
Choose version 3.08.0 or higher to use.
ACU = 0 のときの利用費
ACU が0の時は、直感通りインスタンス利用費は発生しません。ただし、Auroraクラスターのストレージ費用やその他のサーバーレスでないインスタンスの費用は発生します。
How instance billing works for auto-paused Aurora Serverless v2 clusters
While an Aurora Serverless v2 instance is auto-paused, its instance charge is zero. The ServerlessV2Usage metric is zero during that period. AWS still charges for Aurora storage and other aspects of the cluster that aren't tied to that specific DB instance.
https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2-auto-pause.html
まとめ
Aurora Serverless v2が最小 ACU 0、つまり、自動一時停止・再開機能に対応しました。
今回のアップデートにより、開発環境のように利用しない期間が発生する環境において、コストを抑えながら手離れよくAurora Serverless v2を導入できるようになりました。
Aurora Serverlss v1 ユーザーが v2 に対して最も待ち望んでいた機能が実装されたことで、Aurora Serverless v2の導入ユースケースが大きく広がると思われます。
参考
- Scaling to Zero ACUs with automatic pause and resume for Aurora Serverless v2 - Amazon Aurora
- Amazon Aurora Serverless v2 supports scaling to zero capacity - AWS
- Introducing scaling to 0 capacity with Amazon Aurora Serverless v2 | AWS Database Blog
- Understanding how certain database parameters impact scaling in Amazon Aurora Serverless v2 | AWS Database Blog
- Understanding how ACU minimum and maximum range impacts scaling in Amazon Aurora Serverless v2 | AWS Database Blog