Amazon Aurora Serverlessの利用費を試算してみた
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 を利用したほうがより運用の手離れが良いと思います。
それでは。