Aurora for PostgreSQL の Blue/Green の（Readerの）ダウンタイムを確認してみた

この記事は [AWS Community Builders(※) Advent Calendar 2023 シリーズ2](https://qiita.com/advent-calendar/2023/aws-community-builders) の三日目の記事になります。元々は 「[Amazon Aurora Optimized Reads for Aurora PostgreSQLを試してみた](https://qiita.com/asahide/items/2ad8c17a3b320280de42)」 の記事をPostgreSQL アドベントカレンダーとクロスポストする予定でしたが、Qiitaの仕様上クロスポストができなかったため、本記事を作成してみました。

# はじめに
以前、「[Aurora for PostgreSQL の フルマネージド Blue/Green デプロイを試してみた](https://qiita.com/asahide/items/0914ac4132169220ae5f)」という記事を投稿しました。その際は、Blue/Greenの切替を行う間に Writer エンドポイントのタイムアウトを待っていました。そのため、今回は実際に Reader 側のダウンタイムがどのくらいになるのか、確認してみました。

# Blue/Green 切替の流れ

今回は以下のような構成です。bgdb01という 13.12 のエンジンバージョンを持つ Blue 環境に対して、 15.14 のエンジンバージョンを持つ Green 環境があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/94c3ac74-fc26-375c-5082-168cd1667a5d.png)

ここで、Blue/Green の切り替えを行うと、以下のような確認画面が表示されますので、切り替えを実施します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/14542968-5a3d-67c4-62df-d927e61c2ec6.png)

- 切替開始

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/8973b3d8-4365-c586-2076-5a6cabf4f2be.png)

- 切替中

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/81fa5aec-a601-738f-a392-c9515cb506de.png)


- 切替完了

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/dc8d86f9-8d1c-6a60-6050-57b38ed006bc.png)



# Blue/Green 切替時のReaderのダウンタイム

#### Writerエンドポイント

Writerは前回と同様、11:46:15 ～ 11:48:26 でInsertが止まってます。

```SHELL:Writerエンドポイント
INSERT 0 1
WARNING:  there is no transaction in progress
COMMIT
48
Sun Dec  3 11:46:14 UTC 2023

INSERT 0 1
WARNING:  there is no transaction in progress
COMMIT
49
Sun Dec  3 11:46:15 UTC 2023

psql: error: could not connect to server: Connection timed out
        Is the server running on host "bgdb01.cluster-xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com" (xx.xx.xx.xx) and accepting
        TCP/IP connections on port 5432?
50
Sun Dec  3 11:48:26 UTC 2023

INSERT 0 1
WARNING:  there is no transaction in progress
COMMIT
51
Sun Dec  3 11:48:27 UTC 2023

INSERT 0 1
WARNING:  there is no transaction in progress
COMMIT
52
Sun Dec  3 11:48:28 UTC 2023
```

#### Readerエンドポイント

ReaderはWriterと同様に11:46:15でいったん止まりますが、11:46:56 に再開されています。**約40秒間**のダウンタイムとなっていることがわかります。


```SHELL:Readerエンドポイント
 id |            date
----+----------------------------
 48 | 2023-12-03 11:46:14.190202
(1 row)

Sun Dec  3 11:46:14 UTC 2023
 id |            date
----+----------------------------
 49 | 2023-12-03 11:46:15.230224
(1 row)

Sun Dec  3 11:46:15 UTC 2023
^C
$ ./bgreadtest.sh

<<中略>>

$ ./bgreadtest.sh
 id |            date
----+----------------------------
 49 | 2023-12-03 11:46:15.230224
(1 row)

Sun Dec  3 11:46:56 UTC 2023
```

# まとめ
突貫で確認したため、一部画面がとれてなかったりとか、Writer側もタイムアウトを待たずに実施してみたらどうなの？というところはありますが、いったんReader側のダウンタイムとしては40秒程度であることが確認できました。
一般的なレプリケーションツールでの移行でも、5分くらいの切り替えとなるため、だいぶ短い時間で切り替えることができると考えてます。
現時点では Blue/Green Deploy は RDS Proxy対応してませんが、その辺が対応してくるとさらに短い時間で切替できるようになるかもしれません。

#### おまけ
今回、13.12 → 15.4 ではなく、 13.12 → 14.9 をチャレンジしようとして、何回か失敗しました[^1]。Blue/Green Deploy自体は作成できるのですが、作成した後に以下のように「無効な設定」となってしまいます。Blue/Greenが利用できないバージョン(13.11等)[^2]をソースにしようとする場合には、Blue/Green Deployを作成しようとするときにエラーがでるので、同じようにしてほしいですね。（Blue/Green Deploy作成には結構時間がかかるため、、）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/9d13f858-7c78-6c38-c11b-5eb918b73ef3.png)

[^1]: [Getting a list of available upgrade targets](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_UpgradeDBInstance.PostgreSQL.html#USER_UpgradeDBInstance.PostgreSQL.UpgradeVersion)
[^2]: [Blue/Green Deployments with Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.Aurora_Fea_Regions_DB-eng.Feature.BlueGreenDeployments.html#Concepts.Aurora_Fea_Regions_DB-eng.Feature.BlueGreenDeployments.apg)