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

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

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Amazon Auroraにはオンデマンドで起動し、ワークロードに応じてスケールするサーバーレス型が存在します。 Amazon Aurora Serverlessの代表的なユースケースに対して利用費をAmazon Aurora Provisionedと比較してみました。

はじめに

Amazon Auroraには

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

の2種類があります。

後者の serverless 型は

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

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

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

前提

Amazon Aurora Serverless のエンジンは

  • MySQL 5.6.10a
  • PostgreSQL 10.7

が対応しています。

以下では MySQL 5.6.10a を前提に話を進めます。

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

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

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

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

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

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

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

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

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

Serverless型は最低ユニットは 1ACU であり、東京リージョンでは1 ユニットあたり$0.1/Hour かかります。

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

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

1ACU(2GB RAM) に対応するインスタンスタイプは db.t3.small(2 vCPU/2 GB RAM)です。 このインスタンスタイプの時間あたりの利用費は $0.063/Hour で、24時間では 24 * 0.063 = $1.512 です。

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

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

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

R5 インスタンスファミリーで最小のインスタンスタイプはdb.r5.large(2 vCPU/16GB RAM)です。 このインスタンスタイプの時間あたりの利用費は $0.35/Hour で、24時間では 24 * 0.35 = $8.4 です。 この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)は最小の 1ACU を消費

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

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

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

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

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

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

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.r5.largeを24時間起動すると $6.96/day かかります。 serverless を利用することで利用費を6%に抑えることに成功しています。

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

最後に

Amazon Aurora Serverless の利用費を

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

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

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

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

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

それでは。

参考