Amazon Aurora Serverlessの利用費を試算してみた

Amazon Aurora Serverlessの代表的なユースケースに対して利用費をAmazon Aurora Provisionedと比較してみました。

はじめに

Amazon Auroraには

  • ユーザーがサーバー構成を明示的に指定する昔ながらの Provisioned 型
  • アプリケーションのニーズに基づいて自動的に起動、シャットダウン、スケールアップ・ダウンする Serverless 型

の2種類があります。

後者の serverless 型は

  • 不定期使用のアプリケーション(自動起動・シャットダウン狙い)
  • 可変・予測不能なワークロード(オートスケール狙い)

といったユースケースにおいて、コスト・スケーラビリティなどの観点から有用と考えられます。

本ブログではコスト面からServerlessとProvisionedを比較します。

前提

Amazon Aurora Serverless の正式版は MySQL 5.6 のみで提供されています。 以下ではこのデータベースエンジンを前提に話を進めます。

Amazon Aurora では何に対して課金される?

Amazon Aurora は以下の利用で課金されます。

  • インスタンス利用費
  • ストレージ
  • I/O

Provisioned/Serverless で利用費が異なるのは、1つ目のインスタンス利用費だけです。

Provisioned 型では、インスタンスタイプに応じて利用費が決定します。

Serverless 型では、Aurora capacity unit(ACU)という単位のべき乗でデータベースのキャパシティはスケーリングし、消費したACUによって利用費が決定します。 1ACU は約2GBのメモリーと対応するCPU/Network性能があり、2(4GB RAM)〜256(488GB RAM)の範囲でスケール可能です。

自動起動・シャットダウン機能により、利用がない期間はACUの消費がなく、インスタンス利用費が発生しません。

Serverless 型の損益分岐点を求める

Serverless の起動時間が1日何時間までであれば、 Provisioned よりも低コストですむのか、その損益分岐点を求めます。 試算には東京リージョンを利用します。

東京リージョンでは 1ACUの利用費は $0.1/Hour です。 Serverless型は最低でも2ACU(4GB RAM)のユニット消費(利用費としては $0.2/Hour)が必要です。

t2 系インスタンスとの比較

まずは、t2インスタンスファミリーと比較します。

2ACU(4GB RAM) に対応するインスタンスタイプは db.t2.medium(2 vCPU/4 GB RAM)です。 このインスタンスタイプの利用費は $0.125/Hour です。

仮に Serverless 型が起動中は最低限の2ACUしか消費しないと仮定した場合、1日の起動時間が15時間までであれば Serverless 型のほうが安くなります。

さらに、Aurora MySQLを起動可能な最小のインスタンスタイプ db.t2.small($0.063/Hour, 1 vCPU/2 GB RAM)と比較する場合、1日の起動時間が7時間33分までであれば Serverless 型のほうが安くなります。

r4 系インスタンスとの比較

次に、r4インスタンスファミリーと比較します。

r4 インスタンスファミリーで最小のインスタンスタイプはdb.r4.large($0.35/Hour, 2 vCPU/15.25GB RAM)です。 このRAM 量には 8ACU が相当します。

同様に、Serverless 起動中は 8ACU を消費し続ける前提で損益分岐点を求めると、1日の起動時間が10時間30分までであれば Serverless 型のほうが安くなります。

可変なワークロードの場合の利用費

Amazon Aurora Serverless の Pricing ページの例1・2を実際に計算してみます。

ドキュメントに合わせて、North Virginia リージョンの単価を利用します。

Pricing Example 1 : 可変なワークロードの場合の利用費

ワークロードパターン

  • 1日中利用があり、データベースは停止状態にはならない
  • 1日2回、アクセスのピークがある
    • 約1時間 (1.021 hours) 4ACU を消費
    • 約40分(0.766 hours) 8ACU を消費
  • 残りの時間(22.213 hours)は最小の 2ACU を消費

この場合、1日あたりACU消費は 1.021 * 4 + 0.766 * 8 + 22.213 * 2 = 54.638 ACU-Hour となります。

North Virginia の ACU 利用費は $0.06 です。そのため、1日の利用費は 54.638 * 0.06 = $3.28 です。

Serverless 型を利用することで、低ワークロード時の利用費を抑えたまま、高負荷にはスケールアップ(8ACU=db.r4.large相当)してワークロードを処理します。

固定のインスタンスタイプを24時間起動した場合の利用費と比較したのが次の図です。

最大負荷にあわせてdb.r4.largeを24時間起動すると $8.40/day かかります。 Serverless を利用することで利用費を40%に抑えることに成功しています。

一方で、高負荷時には目をつぶり、通常時の負荷にあわせてdb.t2.medium を24時間起動すると、1台構成では $1.97/day, 2台のマルチAZ構成では $3.94/day かかります。 Serverless を利用すると、1台構成の場合は利用費が166%に増え、2台のマルチAZ構成の場合は利用費を83%に抑えられています。

Pricing Example 2 : 不定期使用の場合の利用費

ワークロードパターン

  • 1日2回のまとまった利用
    • 1回目は約44分間(0.735 hours) 4ACU を消費
    • 2回目は約30分間(0.502 hours) 8ACU を消費
  • 残りの時間はアクセスが無く、ACUの消費なし

この場合、1日あたりACU消費は 0.735 * 4 + 0.502 * 8 = 7.048 ACU-Hour となります。

North Virginia の ACU 利用費は $0.06 です。そのため、1日の利用費は 7.048 * 0.06 = $0.42 です。

Serverless 型を利用することで、アイドル時は利用費が発生せず、1日2回の利用時のみインスタンスが立ち上がり、ワークロードを処理します。

固定のインスタンスタイプを24時間起動した場合の利用費と比較したのが次の図です。

最大負荷時にあわせてdb.r4.largeを24時間起動すると $8.40/day かかります。 serverless を利用することで利用費を5%に抑えることに成功しています。

また、高負荷時には目をつぶり、普段は利用がないことから db.t2 系1台で24時間起動すると、db.t2.small では $0.98/day, db.t2.medium では $1.97/day かかります。 Serverless を利用すると、それぞれのケースで利用費を 42%, 21%に抑えられています。

最後に

Amazon Aurora Serverless の利用費を

  • 可変なワークロード
  • 不定期使用

の2ケースで試算し、利用費だけで比較すると、コスト削減が期待されることを確認しました。 特に、後者のような不定期使用サイト(開発環境など)では、レイテンシーなどの性能要件の低さから導入しやすい上に、大幅なコスト削減が見込まれます。

ただし、可用性・冗長構成、機能面などで、両者にはそもそも違いがある(Serverlessは制約が多い)ため、同じ条件での比較にはなっていないことにはご留意ください。

なお、データベースインスタンスの利用が不定期な場合、インスタンスをストップさせることも可能です。 この場合、ユーザーが明示的に停止操作をしないといけないほか、停止後7日を経過すると、インスタンスは自動的に起動します。 うっかり起動しっぱなしになっていた、ということをかなりの高確率で経験します。

開発環境などのため、長期に渡りインスタンスを利用しない可能性がある場合、Serverless を利用したほうがより運用の手離れが良いと思います。

それでは。

参考