Amazon Aurora Serverless v2が最小キャパシティ0に対応し、自動停止・再開が可能になりました

Amazon Aurora Serverless v2が最小キャパシティ0に対応し、自動停止・再開が可能になりました

Clock Icon2024.11.21

Amazon Aurora Serverless v2 はAurora Capacity Unit(ACU)という単位でリソース管理され、0.5 ACU単位でワークロードに応じてスケールアップするサーバーレスデータベースです。従来は最小ACUが0.5でしたが、0キャパシティに対応したことにより、アクティビティのないインスタンスが自動的に停止・再開するようになりました。

例えば、本番・開発環境に同じAurora Serverless v2を導入しているケースにおいて、夜間や週末はアイドル状態を伴う開発環境の最小ACUを0にしておけば、利用がなくなるとインスタンスは自動停止し、コスト削減に繋がります。

aurora-svl-v2-whatsnew

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

対応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時間の範囲で指定しましょう。

aurora-serverless-v2-config

Serverless v2を選択しながら、ACU 0に対応していないバージョンを選択していると、以下の様なメッセージが表示されます。

Selected Aurora MySQL version doesn't support pausing Aurora Serverless v2

Choose version 3.08.0 or higher to use.

aurora-serverlss-v2-version-notice

後は、通常通りにクラスターを作成しましょう。

一定時間放置すると、DBインスタンスが一時停止したことがイベント出力されます。

aurora-serverless-v2-events

CloudWatch Metrics の ServerlessDatabaseCapacity を確認すると、ACU が 0.5 になった後、"Pause after inactivity" で指定した5分後に ACU が 0 になっていることがわかります。

aurora-serverless-v2-metrics

再開時の注意事項

インスタンスがいったん一時停止すると、再接続には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.

https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2-auto-pause.html#auto-pause-whynot

停止状態のサーバーレスインスタンスにも正しく接続できるように、アプリケーションのタイムアウト期間を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 が追従します。

https://dev.classmethod.jp/articles/aurora-serverless-acu-sync-with-writer-in-case-of-failover/

複数台インスタンスを抱える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 のときの利用費

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の導入ユースケースが大きく広がると思われます。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.