[PostgreSQL] Aurora Serverless v1→v2へのアップグレード [AWS/RDS]




## 概要
Aurora Serverless v1(PostgreSQL 10.XX) → Aurora Serverless v2(PostgreSQL 13.7)へ
アップグレードする手順の紹介です。

【本記事の参考ページ】
 [・Aurora PostgreSQL の PostgreSQL DB エンジンのアップグレード（aws.amazon.com）](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/USER_UpgradeDBInstance.PostgreSQL.html#USER_UpgradeDBInstance.PostgreSQL.MajorVersion) 
 [・Aurora Serverless v2で開始（aws.amazon.com）](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.upgrade.html#aurora-serverless-v2.move-from-serverless-v1) 


## Serverless v1→v2 は直接アップグレードできない
PostgreSQL 10のサポート終了発表に伴い、V1→V2へアップグレードしようとしましたが
通常通り`RDS`→`変更`からバージョンを変更しようとしても
プルダウンメニューに10以外のバージョンが表示されませんでした。


色々調べてみると、Serverlessの場合、メジャーバージョンのアップグレードを行うためには
以下の手順を踏む必要があります。

<br>

■ v1（PostgreSQL 10.XX）のスナップショットを取得
↓
■ スナップショットを元に、プロビジョニング済みクラスターを作成 （この時点ではバージョンは10.XXのまま作成）
↓
■作成したプロビジョニング済みインスタンスを、v2対応のPostgreSQL 13.7へアップグレード
↓
■プロビジョニング済みクラスターにServerless v2のリーダーインスタンスを追加
↓
■作成したリーダーインスタンスをフェイルオーバーし、ライターインスタンスへ変更

<br>

**次の項目から、実際の作業手順を詳しくご紹介します。**


<br>


## 作業手順

### 手順1. Serverless v1（PostgreSQL 10.XX）のスナップショットを取得


既存のV1（PostgreSQL 10.XX）のスナップショットを取得します。
`アクション`→`スナップショットの取得`から取得可能です。

<br>

### 手順2. スナップショットを元に、プロビジョニング済みクラスターを作成

手順1で作成したスナップショットを選択し
`アクション`→`スナップショットを復元`から、以下のように設定します。


![スクリーンショット (34).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668111/3cee1ac3-6682-5f72-2160-2a33236b486f.png)

暗号化やネットワークの設定等は必要に応じて行ってください。
このDBはあくまでアップグレードのための踏み台として一時的に使うものため
インスタンスクラスは必要最低限で問題ありません。

設定が完了したら、`クラスターの復元`をクリックしてプロビジョニング済みクラスターを作成します。

<br>

## 手順3. プロビジョニング済みクラスターを13.7へアップグレード

作成したプロビジョニング済みクラスターを選択し、`変更`をクリック。

DBインスタンスエンジンは、Serverless v2に対応しているバージョンであるPostgreSQL 13.7を選択します。
![スクリーンショット (37).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668111/249ccbae-37c0-44a4-c832-a240abaca226.png)

その他の設定項目は任意で設定し、`続行`をクリック。


![スクリーンショット (35).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668111/ea13bbd9-e35a-80f4-9d07-08a532cb0cc2.png)

DBエンジンとパラメータグループが13.7へ変更されている事を確認したら
`クラスターの変更を適用`を選択して、アップグレードします。

<br>

### 手順4. リーダーインスタンス(Serverless v2)を追加

プロビジョニング済みクラスターを選択し、`アクション`→`リーダーの追加`で
以下のように設定し、Serverless V2をリーダーインスタンスとして追加します。

![スクリーンショット (38).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668111/df459c61-acfb-0053-18c5-88537e53b128.png)

その他の項目は任意で設定し、`Add Reader`をクリックして作成します。

以下のように
プロビジョニング済みインスタンスがライター、Serverless V2がリーダーという状態になっているかと思います。
![スクリーンショット (40).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668111/eb2deca0-6a54-9945-ad5d-61e69d5fa2ad.png)

<br>

### 手順5. Serverless v2をフェイルオーバー

Serverlss V2をライターインスタンスへ昇格させます。
プロビジョニング済みインスタンスを選択して、`アクション`→`フェイルオーバー`をクリック
![スクリーンショット (41).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668111/8b3b5f9e-17fa-e4a5-089f-aed8aed50064.png)


以下のようにServerless v2がライターインスタンスへ切り替わっていれば、OKです。
![スクリーンショット (42).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668111/c74367f0-a7dd-c049-daef-1add4d4aab7f.png)

最後に不要となったプロビジョニング済みインスタンスを削除して、本作業は完了です。

<br>

## 最後に
2023年1月にはPostgreSQL10のサポートが終了するため、早めに対応しましょう！

<br>

## おまけ
以下では、PostgreSQLのパラメータをバックアップする方法をご紹介します。

アップグレード手順とは直接的には関係ありませんが
実際の作業ではバックアップも必要になることがあるかと思いますので、参考までにどうぞ。



 - vimでSQLの実行ファイル`config.sql`を作成

```
$ vim config.sql

# config.sql
// Postgressのパラメータの確認コマンド
select name, setting, unit from pg_settings;
```

 - `config.sql`を実行し、`config-backup.txt`に出力

```
psql -f config.sql -U ユーザ名 -d データベース名 -h ホスト > config-backup-before.txt
```

`-f`はファイルからコマンドを読み込んで実行するオプションです。
これを使用することで、psqlに入らずとも、外部からpsqlコマンドを実行し、テキストファイルなどにバックアップする事ができます。