概要
Aurora Serverless for PostgreSQLがGAになって少し経ちました。
AuroraのAutoScaling対応やRDSのストレージ自動拡張等が実装されProvisionedでもどんどん便利になっていますが、それでもServerLess版の手軽さはとても魅力的ですね。
私のチームでも早速Serverless版を利用しようと思いましたが、
ウリの一つである一定時間アクセスが無いと自動で休止する機能が、実際どの程度影響を及ぼすのか気になりましたので調べてみました。
調査方法
Aurora Serverlessが休止状態かどうかは、CloudWatchの「ServerlessDatabaseCapacity」の値で確認できます。
この値を60秒置きにチェックし、0のとき(=休止状態)のみDBに接続、
リクエストが返るまでの時間を記録するシェルスクリプトを作成しました。
Auroraは東京リージョンに作成、接続元は同じ東京リージョン上のEC2からとしました。
結果
|Time|Result(sec)|
|:-----------------|:------------------|:
|2019-07-23T06:51:05|38.095|
|2019-07-23T06:59:36|28.348|
|2019-07-23T07:07:18|23.734|
|2019-07-23T07:15:50|26.829|
|2019-07-23T07:23:20|39.639|
|2019-07-23T07:31:59|27.801|
|2019-07-23T07:40:37|26.824|
|2019-07-23T07:48:11|36.098|
|2019-07-23T07:56:49|34.107|
|2019-07-23T08:04:21|30.995|
|2019-07-23T08:13:51|34.447|
|2019-07-23T08:22:35|28.92|
|2019-07-23T08:30:01|26.74|
|2019-07-23T08:38:35|40.174|
|2019-07-23T08:46:02|22.82|
|2019-07-23T08:54:30|30.375|
|2019-07-23T09:02:55|23.834|
|2019-07-23T09:11:27|24.736|
|2019-07-23T09:20:57|20.693|
|2019-07-23T09:28:23|28.859|
|2019-07-23T09:35:42|26.474|
|2019-07-23T09:48:12|22.746|
|2019-07-23T09:57:45|30.394|
|2019-07-23T10:04:34|29.979|
※環境とスクリプトが適当だったのでUTCだったり実行間隔がバラバラだったりしますがご容赦
結果として、実行時間の平均値は「29.32秒」となりました。
MySQL版登場時に起動に数十秒~数分かかるという記事があがっていたのもあり、
相当悪いと覚悟してましたが、ギリギリ使えるかなという感じですね。
起動時間が気になる場合は、常時起動しておくこともできますが、
「真夜中はほとんど接続が来ないが絶対ではない」 というサービスにとって、
本機能のコストメリットは影響度が非常に高いと思いますので、
キャッシュ等も利用してうまく付き合っていきたいですね。
その他
本稿で調査したとおり、Aurora Serverless for PostgreSQLでは、
一定時間(最短5分最長24時間)未接続だと自動でインスタンスを停止してくれる機能がありますが、
この機能はデフォルトオフなのでご注意ください。(隠れてるので初見時見落とした)
また、Provisionedの感覚でCloudWatch等からヘルスチェック入れると
常時起動状態になってしまうことにも注意してください。
参考
https://dev.classmethod.jp/cloud/aws/aurora-serverless-mysql-generally-available/
https://dev.classmethod.jp/cloud/aws/aurora-postgresql-serverless-ga/