AWS Auroraのアップグレード方針

AWS AuroraとはMySQLおよびPostgreSQLと互換性のあるAWS独自のRDMSです。優れた性能と拡張性をはじめとした理由からAWSを利用した開発では利用されることが多いと思います。  
オンプレでの開発の場合は業務影響回避のために「バージョンを塩漬け」しているシステムもあると思います。  
ただ、AWSをはじめとするパブリッククラウドでは、ある一定期間を過ぎると、データベースのEOLが計画され強制的なバージョンアップ/既存エンジンバージョンの廃止が行われるためユーザは今までより綿密な準備が必要となります。
AWS Auroraのアップグレード戦略について整理しました。

# TL;DR
- Auroraのアップグレード戦略は3通り
  1. **Aurora長期サポートバージョン(LTSバージョン)を利用する**  
LTSバージョンを利用する場合は、少なくとも3年間は利用できます。期間の終了通知は6ヶ月前のため余裕を持ってアップグレードの影響調査含む対応ができる。ただし、パッチレベルのバグフィックス（機能の追加ではなく累積的なセキュリティおよび安定性に関する修正のみ）は年次で想定しておく必要があります。
  2. **通常バージョンを利用する（定期アップグレード）**  
年2回リリースされるデフォルトバージョンを追いかける（Auto minor version upgradeを有効とする場合は自動で追従してくれます）
  3. **通常バージョンを利用する（不定期アップグレード）**   
通常バージョンを利用したいができるだけアップグレードをしたくない場合は、該当マイナーバージョンのEOLが通知されるまで使い続ける。原則通常バージョンのサポート期限は12ヶ月だが、セキュリティ的な問題から12ヶ月を待たずに必須アップグレードが入る可能性があります。

- LTSバージョンを採用する場合、マイナーバージョンアップ頻度とEOL通知のリードタイムなど、運用面で負担が少なくなるが、通常バージョンを採用する場合は新機能が利用できるなど機能面でメリットがある。Auroraの使い方や、マイナーバージョンアップ工数の工数（影響調査やデグレ試験）をもとにどちらかを選択する検討する必要がある

# Auroraバージョンとライフサイクル
AWS  Auroraでは`major.minor.patch`というセマンティック・バージョニングを採用しています。

## Auroraメジャーバージョン
Auroraメジャーバージョンは、Auroraと互換性のあるMySQLまたはPostgreSQLコミュニティ版のメジャーバージョンを指します。

通常、Amazon Auroraのメジャーバージョンは以下のサポート期間よりも先にサポート終了することはありません。Auroraメジャーバージョンが終了する前にユーザ側が計画をたてやすくするために、少なくとも12ヶ月前に通知を行います。  
この12ヶ月経過後は、古いバージョンが稼働しているデータベースクラスタに対して、後続のメジャーバージョンへ自動アップグレードが適用される場合があります。

|コミュニティメジャーバージョン|Auroraメジャーバージョン|最低サポート期間(202304時点)|
|:--|:--:|:--:|
|MySQL 5.7|Aurora MySQL 2|Aurora MySQL 2|
|MySQL 5.8|Aurora MySQL 3|
|PostgreSQL 12|Aurora PostgreSQL 4|2025 年 2 月 28 日
|PostgreSQL 13|Aurora PostgreSQL 13|2026 年 1 月 31 日
|PostgreSQL 14|Aurora PostgreSQL 14.3以降|2027 年 1 月 31 日


:point_up: Auroraメジャーバージョンのサポート終了日は、最低でも12ヶ月前には通知されるのでメジャーバージョンアップグレードは余裕を持って計画できる。


## Auroraマイナーバージョン
Aurora マイナーバージョンは、新機能や修正など、コミュニティと Aurora のサービス固有の改善を段階的に提供します。

通常、Amazon Aurora マイナーバージョンは四半期ごとにリリースされます。このリリーススケジュールは、追加の機能または修正を取り入れる目的で、変更される場合があります。

利用期限は通常12ヶ月となり、この機関が終了するとAuroraは、後続のデフォルトマイナーバージョンに、自動マイナーバージョンアップグレードを適用する可能性がある。
Auroraのマイナーバージョンが終了する前に、通常3か月前に通知を行います。
※ただし、マイナーバージョンのEOLやセキュリティの問題などで利用期限は12か月よりも早くなることがあります。

### デフォルトバージョンとAuto minor version upgrade
新しい Aurora マイナーバージョンに、以前のバージョンと比較して大幅な改善が含まれている場合、このバージョンが、新しい DB クラスターのデフォルトとしてマークされます。通常、メジャーバージョンごとに 2 つのデフォルトバージョンが、年ごとにリリースされます。
セキュリティと機能に関する最新の修正を利用するためには、DB クラスターを最新のデフォルトマイナーバージョンに維持することをお勧めします。
Aurora クラスターのすべての DB インスタンスに対して、Auto minor version upgradeを有効にすることで、Auroraのマイナーバージョンアップを自動で最新に保つことができます。

### Aurora長期サポートポリシー（LTS）の考え方
Aurora メジャーバージョンごとに、一部のマイナーバージョンを長期サポート (LTS) バージョンとして少なくとも 3 年間の利用が可能です。つまり、メジャーバージョンごとに少なくとも 1 つのマイナーバージョンが、通常の 12 か月よりも長く利用可能になります。
この期間の終了の 6 か月前にリマインダーを送信します。

|Auroraメジャーバージョン|2023.4時点のLTSバージョン|
|:--|:--:|
|Aurora MySQL 2|Aurora MySQL バージョン 2.07.*|
|Aurora PostgreSQL 12|Aurora PostgreSQL 12.9|
|PostgreSQL 3|Aurora PostgreSQL 11.9|

:point_up: Auroraマイナーバージョンは常にデフォルトバージョンになっていることが推奨。Auto minor version upgradeを有効にすることで、Auroraのマイナーバージョンを自動で最新のデフォルトバージョンに追従することができる（年2回程度のアップグレード頻度）
:point_up: Auroraマイナーバージョンは通常12か月程度でEOLを迎える。終了日の通知も3か月前となっており、影響調査をちゃんとやるとなると運用負荷が高い（設定自体は上記Auto minor version upgradeで自動化できる）
:point_up: そこで長期サポート(LTS)の出番。Auroraは一部のマイナーバージョンを長期サポートバージョン(LTSバージョン)とし、3年間の提供保証およびEOLも6ヶ月前に通知がもらえる。計画を伴った準備が可能になる。※ただしパッチバージョンアップは年次で対応することが推奨


## Auroraパッチバージョン　　
Aurora パッチバージョンには、最初のリリース後にマイナーバージョンに追加された重要なバグフィックスを含みます。

 - 例) Aurora MySQL 2.10.0、2.10.1、...、2.10.3
 - それぞれの新しいマイナーバージョンは、新しい Aurora 機能を提供するものですが、特定のマイナーバージョン内の新しいパッチバージョンは、主に重要な問題を修正するために提供されています。


# AuroraマイナーバージョンはLTS VS 通常バージョンどちらを採用すべき？
バージョンアップ頻度を考えるとLTSバージョンを採用した方が良いように思えるが必ずしもそうではありません。  

例えば、AWS Auroraのコスト削減のために以下の機能を利用したいとします
- [コストパフォーマンスの高いGraviton2ベースのインスタンスクラス](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Concepts.DBInstanceClass.html)
- [データベースサイズストレージスペースの動的なサイズ変更](https://aws.amazon.com/jp/about-aws/whats-new/2020/10/amazon-aurora-enables-dynamic-resizing-database-storage-space/) 

どちらも、対応しているバージョンはAurora MySQL 2.09.X以上のためAurora MySQL 2でLTS運用している場合利用することができません

LTSバージョンを採用する場合と比べて、通常バージョンを採用する場合は機能の恩恵が得られる反面、マイナーバージョンアップグレード頻度は多くなります。