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の他のクラスターを管理するために、起動している必要があるため、自動停止できません。

セカンダリ・クラスターも自動停止できません。

まとめ

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.