Amazon Aurora Serverless v2とそれ以外を比較（v1 / v2 / Provisioned）

# はじめに
* Auroraを構成するにあたり、ProvisionedとServerlessを比較検討したのでその内容を記事にしています。
* 記載している制約やサポートバージョンは2023/10/23時点の公式ページを元にしています。

# Auroraの種類
AuroraにはMySQL互換／PostgreSQL互換のそれぞれに対し3種類の稼働方式が存在します。
* 従来からあるサーバーを常時稼働させる「Provisioned」
* アプリからのニーズに応じてサーバーの起動停止／スケールアップダウンが自動化できる「Serverless v1」
* Serverless v1の性能課題を解決し、より使いやすくなったものの新たな制約も発生した「Serverless v2」

# 仕様比較表
|比較項目|Provisioned|Serverless v1|Serverless v2|
|:-:|:-:|:-:|:-:|
|サポートバージョン|MySQL 5.7/8.0<br>PostgreSQL 11～15|MySQL 5.7<br>PostgreSQL 11/13|MySQL 8.0<br>PostgreSQL 13/14/15|
|接続ポート|<font color=blue>MySQL/PostgreSQLと互換性のあるポート|MySQL/PostgreSQLのデフォルトポートのみ|<font color=blue>Provisionedと同一|
|パブリックIPアドレス可否|<font color=blue>可能|不可|<font color=blue>可能|
|パフォーマンスインサイト|<font color=blue>利用可|不可|<font color=blue>利用可</font><br>※ACU2以上推奨|
|性能|インスタンスタイプにより固定db.t4g.medium=vCPU:2,メモリ4GB|<font color=blue>ACUにより可変</font><br>最小0～最大384（1.0単位）<br>※停止していない場合<br>MySQL：最低1ACU<br>PostgreSQL：最低2ACU<br>※1ACU=vCPU:非公開,メモリ2GB|<font color=blue>ACUにより可変</font><br>最小0.5～最大128（0.5単位）<br>※1ACU=vCPU:非公開,メモリ2GB|
|クラスターの停止|手動のみ|手動/自動<br>（未使用時は自動停止=0ACU）<br>※起動には時間を要する|手動のみ<br>（未使用時は自動で0.5ACU稼働）|
|CPU不足による自動拡張|無し|<font color=blue>あり|<font color=blue>あり|
|メモリ不足による自動拡張|無し|無し|<font color=blue>あり|
|ストレージ不足による自動拡張|あり|あり|あり|
|対AZ障害<br>（コンピューティング）|リードレプリカをクラスタリングすることでマルチAZ構成が可能|単一AZでシングル稼働だがAZ障害時には別AZへインスタンスを再作成|リードレプリカをクラスタリングすることでマルチAZ構成が可能※|
|対AZ障害<br>（ストレージ）|3つのAZに各2つの計6つを冗長保存|Provisionedと同一|Provisionedと同一|
|料金(USD/時間)|インスタンスタイプにより固定<br>db.t4g.mediumの場合：0.113|1ACU：0.1|1ACU：0.2|

※Serverless v2のシングル構成ではAZ障害時に別AZへ再作成されません
[公式ページ](https://aws.amazon.com/jp/rds/aurora/faqs/#:~:text=%E3%83%95%E3%82%A7%E3%82%A4%E3%83%AB%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AF%E9%96%8B%E5%A7%8B%E3%81%8B%E3%82%89,%E3%81%AB%E5%86%8D%E4%BD%9C%E6%88%90%E3%81%97%E3%81%BE%E3%81%99%E3%80%82)に下記の記述がありますがv1の記述であり、<font color=red>v2には適用されません</font>（2022/12/15時点、AWSサポート確認済）
> <del>DB インスタンスか AZ が使用不能になった時でも、Aurora Serverless を使用していてれば、別の AZ 内に Aurora が DB インスタンスを自動的に再作成します。

↓[公式ページ](https://aws.amazon.com/jp/rds/aurora/faqs/#:~:text=DB%20%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%81%BE%E3%81%9F%E3%81%AF%20AZ%20%E3%81%8C%E4%BD%BF%E7%94%A8%E4%B8%8D%E8%83%BD%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E6%99%82%E3%81%A7%E3%82%82%E3%80%81Aurora%20Serverless%20v1%20%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%A6%E3%81%84%E3%82%8C%E3%81%B0%E3%80%81%E5%88%A5%E3%81%AE%20AZ%20%E5%86%85%E3%81%AB%20Aurora%20%E3%81%8C%20DB%20%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%82%92%E8%87%AA%E5%8B%95%E7%9A%84%E3%81%AB%E5%86%8D%E4%BD%9C%E6%88%90%E3%81%97%E3%81%BE%E3%81%99%E3%80%82Aurora%20Serverless%20v2%20%E3%81%AF%E3%80%81%E3%83%95%E3%82%A7%E3%82%A4%E3%83%AB%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%82%84%E4%BB%96%E3%81%AE%E9%AB%98%E5%8F%AF%E7%94%A8%E6%80%A7%E6%A9%9F%E8%83%BD%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AB%E3%83%97%E3%83%AD%E3%83%93%E3%82%B8%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0%E3%81%95%E3%82%8C%E3%81%9F%E3%82%88%E3%81%86%E3%81%AB%E6%A9%9F%E8%83%BD%E3%81%97%E3%81%BE%E3%81%99%E3%80%82)が修正されていました（2023/7/4確認）

>DB インスタンスまたは AZ が使用不能になった時でも、Aurora Serverless v1 を実行していれば、別の AZ 内に Aurora が DB インスタンスを自動的に再作成します。Aurora Serverless v2 は、フェイルオーバーや他の高可用性機能のためにプロビジョニングされたように機能します。

# Serverless制限機能
＜v1で利用できない機能＞
* Aurora Global Database
* Aurora レプリカ
* AWS Identity and Access Management (IAM) データベース認証
* Aurora でのバックトラック
* データベースアクティビティストリーミング
* Kerberos 認証
* Performance Insights
* RDS Proxy
* AWS Management Console でログを表示する

＜v2で利用できない機能＞
* データベースアクティビティストリーム (DAS)
* Aurora PostgreSQL のクラスターキャッシュ管理

# 最小構成での性能比較
可用性を担保したうえでAuroraをなるべく安く利用したい場合どうなるかを比較しました。

- 比較条件
  - データベースはMySQL
  - 東京リージョンを利用
  - RLO：AZ障害でも片系で継続稼働
  - RTO：15分以内
  - RPO：1日前
  - 常時稼働状態

|比較項目|Provisioned|Serverless v1|Serverless v2|
|:-:|:-:|:-:|:-:|
|バージョン|MySQL 8.0|<font color=red>MySQL 5.7|MySQL 8.0|
|最小性能|db.t4g.medium|1.0ACU(最低=最大)|最低0.5最大1.0ACU|
|vCPU|2|1?（推測）|0.5～1.0?（推測）|
|メモリ|4GB|2GB|1～2GB|
|必要インスタンス<br>(マルチAZ構成)|2<br>ライター＋レプリカ|1<br>障害時に別AZへ自動再作成|2<br>ライター＋レプリカ|
|料金単価|通常時：0.113USD/時間<br>バースト時：0.203USD/時間|0.1USD/時間|0.1～0.2USD/時間|
|料金合計<br>(単価×インスタンス数)|通常時：0.226USD/時間<br>バースト時：0.406USD/時間|0.1USD/時間|0.2～0.4USD/時間|
|料金合計<br>(為替1$=150円)|通常時：25,222円/月<br>バースト時：<font color=red>45,310</font>円/月|<font color=blue>11,160</font>円/月|22,320～<font color=red>44,640</font>円/月|

最低スペックにおいてはServerless v1の障害時別AZ自動再作成はインスタンス１つで済むためとてもよい機能でした。
v2ではその機能が廃止された代わりに、Provisionedと混在してクラスタ構成が取れるようになっています。

※ストレージ料や通信料は除外しています

# 所感
* Serverless v1はMySQLを前提とした場合、最新バージョンに対応していないため用途が限られます（MySQL5.7のサポート期限が2024年10月31日）
* Serverless v2は単純に単価が高く、パフォーマンスインサイトを有効にするためには2.0ACU以上推奨であることを考慮すると一定以上の性能が要求され、且つスパイクがある場合に有効であると考えられます。
* 実際にv2のパフォーマンスインサイト無効で最低の0.5ACUで構築してみたところアクセスが無くてもCPU使用率が常時50%程度利用されていました。
* Provisionedはリザーブドインスタンスという割引手段（最大55%引き）もあるため、db.t4g.mediumで性能が満たされる限りはServerlessよりも従来通りのProvisionedが有効であると感じました。

# 単体性能測定
比較の続きとして、負荷テストの実測結果を投稿しました↓

https://qiita.com/Chiharu_Tsuboi/items/eff226c20a48be5fb7af

# 参考情報
* Amazon Aurora の料金
https://aws.amazon.com/jp/rds/aurora/pricing/
* Aurora Serverless v2 と Aurora Serverless v1 の要件の比較
https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.upgrade.html#Serverless.v1-v2-requirements