Aurora PostgreSQL メジャーバージョンアップ (11.16 → 14.5)

## はじめに
本手順はシステム停止を前提としたメジャーバージョンアップ手順
Auroraメジャーバージョンアップの事前作業については以下参照。

https://qiita.com/20230420/items/3305ccaa57a600ea3f4b

## 環境
DB クラスター
　エンジン：Aurora postgresql
　キャパシティータイプ：シングルマスター
　リージョン：ap-northeast-1

DB インスタンス
　インスタンスクラス：db.r5.large
　AZ(ライター)：ap-northeast-1c
　AZ(リーダー)：ap-northeast-1d

EC2
　インスタンスタイプ：c5.large
　AZ：ap-northeast-1d
　OS：Red Hat Enterprise Linux 7.7
　導入済みパッケージ：postgresql11-11.10-1PGDG.rhel7.x86_64
　　　　　　　　　　　postgresql11-libs-11.10-1PGDG.rhel7.x86_64

## 作業一覧
1. 業務停止
1. DBスナップショット
1. イベントサブスクリプションの停止
1. メジャーバージョンアップ
1. インスタンス再起動
1. 拡張機能のバージョンアップ
1. 統計情報の更新
1. イベントサブスクリプションの起動
1. クライアントのバージョンアップ
1. 業務起動

## 作業内容
### 1. 業務停止
　WEBサービスの停止やSorryPageの表示等によりシステム利用を停止させる。

### 2. DBスナップショット
:::note
**[2.DBスナップショット] は必須ではない**
メジャーバージョンアップデート内で自動でDBスナップショットが作成されるが、念のため手動でも取得する手順を記載。
:::
> [Aurora のユーザーガイド](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/USER_UpgradeDBInstance.PostgreSQL.html#USER_UpgradeDBInstance.PostgreSQL.MajorVersion "メジャーバージョンのアップグレードを実施する方法")
> 新しいメジャーバージョンへのアップグレードプロセスを開始するとき、Aurora PostgreSQL はクラスターに変更を加える前に Aurora DB クラスターのスナップショットを取得します。


##### ① [RDS]コンソールの左メニューから[スナップショット]を選択し[スナップショットの取得]を押下
![スナップショット_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336399/0c8ebd06-3eff-0cd1-9b55-6c7503eedbc3.png)

##### ② 必要事項を入力し[スナップショットの取得]を押下
　　　DBインスタンス： `作業するDBインスタンス`
　 スナップショット名： `任意の文字列`
![スナップショット_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336399/e3f7eefd-f383-8623-7f67-1251a3d2f152.png)

##### ③ 手動スナップショット一覧にて取得したスナップショットが以下表示であることを確認
　ステータス：`利用可能`
　　進行状況：`完了`
![スナップショット_04-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336399/22079cd2-67fa-6edf-86e1-5ec85547fc30.png)


### 3. イベントサブスクリプションの停止
　RDSのイベントサブスクリプションにてフェイルオーバー時は自動でシステム再起動する設定をしており、誤動作を防ぐために停止
　イベントサブスクリプションが登録されていない場合は不要。

##### ① [RDS]コンソールの左メニューから[イベントサブスクリプション]を選択

##### ② 対象のイベントサブスクリプションを選択し、[編集]を押下
![イベントサブスクリプション停止_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336399/f1da6d3a-1b83-5ea8-2655-d1a6b7b028bb.png)

##### ③ 編集画面にて[有効]にて[なし]を選択し、画面最下部の[保存]を押下
![イベントサブスクリプション停止_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336399/9307fbb9-9731-cb07-8e7f-505a1bb3eb39.png)

##### ④ イベントサブスクリプション一覧にて対象のイベントサブスクリプションの有効列が[なし]と表示されることを確認
![イベントサブスクリプション停止_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336399/5921677e-2675-8aaa-c3f0-38470e8f6ffc.png)

### 4. メジャーバージョンアップ
　AWSコンソールからメジャーバージョンアップを実施

##### ① 対象のDBクラスターを選択し、[変更]を押下
![バージョンアップ_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336399/6764d551-c0b2-df86-01d9-8d47012f2483.png)

##### ② DBエンジンバージョンを変更
![バージョンアップ_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336399/85f23927-bf4b-cddf-645d-3babbc457b56.png)

##### ③ 追加設定にて事前に作成したパラメータグループを選択し、画面下部の[続行]を押下
![バージョンアップ_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336399/15d26fcd-9adf-e5a3-c04b-a7e51072d8ae.png)

##### ④ 変更箇所の確認
![バージョンアップ_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336399/c97f155d-8a24-e7d8-1b5f-7c38614ffdaf.png)

##### ⑤ [すぐに適用]を選択し、[クラスターの変更]を押下
![バージョンアップ_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336399/839a0a1e-80fa-c386-d7b8-979c99c9ab04.png)

##### ⑥ DBのステータスが[利用可能]になったことを確認
![バージョンアップ_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336399/38572659-89c3-dc68-4438-8cef020772bc.png)

### 5. インスタンス再起動
:::note warn
バージョンアップ時にカスタムパラメータを指定した場合
パラメータグループが[再起動を保留中]となるため、手動での再起動が必要。
![バージョンアップ_06-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336399/ac046574-426a-1bea-b8e3-a0e7c84d8d77.png)
:::

##### ① リーダーインスタンスの再起動
![バージョンアップ_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336399/d3e953ec-da98-30b0-0044-836ef52aa347.png)

##### ② 再起動したインスタンスのパラメータグループが[同期中]となっていることを確認
![バージョンアップ_09-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336399/0811fe11-6be9-d2a9-6b65-60dcd5ef0665.png)



##### ③ フェイルオーバー
![バージョンアップ_08-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336399/772fd7a3-3626-1e8a-0024-cb6ce7ac212c.png)

##### ④ ①～③をもう1度実施
:::note warn
元ライター(現リーダー)インスタンスに対して実施
:::


### 6. 拡張機能のバージョンアップ

```SQL:拡張機能の一覧表示
SELECT * FROM pg_extension;
```
アップデート後のメジャーバージョンと現状の拡張機能が対応しているかを確認。
本環境では以下がバージョンアップ対象。
　**・btree_gist　（1.5　→ 1.6）**
　**・pg_stat_statements　（1.6　→ 1.9）**
詳細の対応表は以下参照。

https://docs.aws.amazon.com/AmazonRDS/latest/PostgreSQLReleaseNotes/postgresql-extensions.html


```SQL:バージョンアップ
ALTER EXTENSION ＜拡張機能名＞ UPDATE TO '＜新しいバージョン＞';
```

```SQL:実行例
postgres=> ALTER EXTENSION pg_stat_statements UPDATE TO '1.9';
ALTER EXTENSION
postgres=> ALTER EXTENSION btree_gist UPDATE TO '1.6';
ALTER EXTENSION

postgres=> SELECT * FROM pg_extension;
   oid  |      extname       | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition 
 -------+--------------------+----------+--------------+----------------+------------+-----------+--------------
  14703 | plpgsql            |       10 |           11 | f              | 1.0        |           | 
  19991 | btree_gin          |       10 |           11 | t              | 1.3        |           | 
  19994 | pgstattuple        |       10 |           11 | t              | 1.5        |           | 
  19993 | pg_stat_statements |       10 |         2200 | t              | 1.9        |           | 
  19992 | btree_gist         |       10 |           11 | t              | 1.6        |           | 
 (5 行)
```
:::note warn
全てのデータベースで拡張機能のバージョンアップが必要
:::


### 7. 統計情報の更新
:::note
必須ではないが念のため本環境では実施
:::

```sql:統計情報更新
ANALYZE;
```
```sql:統計情報更新日時確認
\pset pager off
SELECT relname, last_autovacuum,last_autoanalyze,last_analyze FROM pg_stat_user_tables ORDER BY relname;
```
表示された「last_analyze」列の日時が実行開始から終了までとなっていればOK。

### 8.イベントサブスクリプションの起動

　「3. イベントサブスクリプションの停止」を実施していない場合は不要。

##### ① [RDS]コンソールの左メニューから[イベントサブスクリプション]を選択

##### ② 停止していたイベントサブスクリプションを選択し、[編集]を押下
![イベントサブスクリプション起動_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336399/10e88043-d0fd-ede1-f5a7-f66d5e359fd1.png)

##### ③ 編集画面にて[有効]にて[あり]を選択し、画面最下部の[保存]を押下
![イベントサブスクリプション起動_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336399/0c42f8bf-0f4c-1e9b-378c-025352851b15.png)

##### ④ イベントサブスクリプション一覧にて対象のイベントサブスクリプションの有効列が[あり]と表示されることを確認
![イベントサブスクリプション起動_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3336399/354ecb66-2b4f-1842-c766-d263146ba77f.png)


### 9. クライアントのバージョンアップ

##### ① EC2サーバにTeraterm等で接続
##### ② 以下コマンドにてPostgreSQLクライアントのアップデートを実施
```shell
## 現在導入されているPostgresqlパッケージ確認
yum list installed | grep postgresql

## インストール可能パッケージリストにpostgresql14があることを確認
## 何も表示されなかった場合はリポジトリの更新を実施
yum list | grep postgresql14

## リポジトリの更新(pgdg-redhat-repoでインストールする場合)
yum update pgdg-redhat-repo

## postgresql14 パッケージをインストール
yum install postgresql14

## postgresqlクライアントコマンドの優先バージョン確認
## [現在の「最適」バージョンは /usr/pgsql-14/bin/psql です。]と表示されればOK
update-alternatives --display pgsql-psql
```
:::note warn
yum定義情報(/etc/yum.conf)の「exclude=」行にpostgresqlが含まれているとパッケージが表示されないので注意
:::

### 10. 業務起動
　「1. 業務停止」にて停止させたシステムを再開する。


## 作業時間

<table>
  <thead>
    <tr>
      <th>作業名</th> <th>作業時間</th>
    </tr>
  </thead>
  <tr>
    <td> 業務停止 </td> <td> 00:01:00 </td>
  </tr>
  <tr>
    <td> DBスナップショット </td> <td> 00:06:00 </td>
  </tr>
  <tr>
    <td> イベントサブスクリプションの停止 </td> <td> 00:01:00 </td>
  </tr>
  <tr>
    <td> メジャーバージョンアップ </td> <td> 00:31:00 </td>
  </tr>
  <tr>
    <td> インスタンス再起動 </td> <td> 00:25:00 </td>
  </tr>
  <tr>
    <td> 拡張機能のバージョンアップ </td> <td> 00:10:00 </td>
  </tr>
  <tr>
    <td> 統計情報の更新 </td> <td> 01:33:00 </td>
  </tr>
  <tr>
    <td> イベントサブスクリプションの起動 </td> <td> 00:02:00 </td>
  </tr>
  <tr>
    <td> クライアントのバージョンアップ </td> <td> 00:15:00 </td>
  </tr>
  <tr>
    <td> 業務起動 </td> <td> 00:03:00 </td>
  </tr>
</table>