![[小ネタ] Amazon RDSをIaCで作成する際は EnablePerformanceInsights = true にしておいた方が良いはなし](https://devio2024-media.developers.io/image/upload/f_auto,q_auto,w_3840/f_auto,q_auto/v1790869602/eyecatch/q1exussjxzltgdgujrkq.png)
[小ネタ] Amazon RDSをIaCで作成する際は EnablePerformanceInsights = true にしておいた方が良いはなし
しばたです。
タイトルにある通りなのですが、IaCを使ってAmazon RDSインスタンスを作る際に軽くハマったので本記事で共有したいと思います。
事の経緯
本記事の前提として昨年末ごろから今年にかけてRDS Performance InsightsがCloudWatch Database Insightsへ統合された件があります。
私の記憶ではこの統合は予定通りには進まず今年に入ってからもしばらく延期されていた覚えがあります。
とはいえ現在は統合が完了しておりマネジメントコンソール上のRDS設定画面にPerformance Insightsの設定は一切ありません。
そういう状況のなか、今回業務で新たにRDS環境(その時はRDS for PostgreSQL)を用意する必要がありTerraformを使って環境構築しました。
Terraform等のIaCを使ってRDS環境を作る際にかつてのPerformance Insightsに関するパラメーターとして
- performance_insights_enabled (Terraform)
- EnablePerformanceInsights (CloudFormation)
があり、どちらもRDSのREST APIのEnablePerformanceInsightsパラメーターと対になります。
その時に私は『もうPerformance Insightsは無くなったし、この値はfalseでいいだろう。』と判断したのですが、この設定により意図せぬ挙動となってしまいました。
起きた事象
当時はTerraformでハマったのですが、今回はCloudFormationを使って最低限の再現コードを用意しました。
AWSTemplateFormatVersion: "2010-09-09"
Description: Amazon RDS for PostgreSQL Sample
Parameters:
DBSubnetGroupName:
Type: String
Description: DB subnet group name
SecurityGroupID:
Type: AWS::EC2::SecurityGroup::Id
Description: RDS Security group ID
Resources:
# Sample RDS Instance (Single-AZ)
DBInstance:
Type: AWS::RDS::DBInstance
Properties:
DBInstanceIdentifier: "sample-instance"
Engine: postgres
EngineVersion: "18.6"
DBInstanceClass: "db.t4g.medium"
DBName: "mydb"
MasterUsername: "postgres"
ManageMasterUserPassword: true
MultiAZ: false
StorageType: gp3
AllocatedStorage: 20
StorageEncrypted: true
DBSubnetGroupName:
Ref: DBSubnetGroupName
VPCSecurityGroups:
- Ref: SecurityGroupID
PubliclyAccessible: false
DeletionProtection: false
# ここからDatabase Insights関連設定
DatabaseInsightsMode: "standard"
EnablePerformanceInsights: false # もうPerformance Insightsは無効で良いと思っていた...
必要最低限の設定のSingle AZ RDS for PostgreSQLインスタンスを作るテンプレートです。
事前にセキュリティグループとDBサブネットグループを用意しておく必要があります。
このコードで重要なのは最後にある
# ここからDatabase Insights関連設定
DatabaseInsightsMode: "standard"
EnablePerformanceInsights: false # もうPerformance Insightsは無効で良いと思っていた...
の部分で、Database Insightsをスタンダードモードで利用し、使うことのないPerformance Insightsは無効にしたい意図でこの様にしました。
テンプレートから作成された環境はこんな感じです。

このインスタンスの「モニタリング」タブを確認すると
データベース負荷チャートを表示するには、変更からパフォーマンスインサイトを有効にします。
という表示がされ、一部のメトリクスが取れていない状況になってしまいました。

意図しない案内が表示されてしまう
Database Insightsのダッシュボード表示も「データベース負荷」欄がおかしな感じになっています...

データベース負荷の表示がまったくされていない...
対応策
本記事を書くまで把握できていなかったのですが、このEnablePerformanceInsightsはPerformance Insights廃止後に「詳細なデータベースとクエリごとのメトリクスを収集する」設定に役割を変えており、この欄を無効(未チェック)にすると従来からPerformance Insightsで担っていたメトリクス収集を止めてしまう挙動になっていました。

「詳細なデータベースとクエリごとのメトリクスを収集する」が無効になっている
なのでこの「詳細なデータベースとクエリごとのメトリクスを収集する」にチェックを入れてやれば期待した挙動にもどり、これはEnablePerformanceInsights = trueに相当します。

スタンダードモードの場合チェックを付けて有効に
この設定変更はPerformance Insightsの有効化とときと同様に即時可能でRDSインスタンスの再起動も発生しませんでした。

変更後は「モニタリング」タブとDatabase Insightsにデータベース負荷状況が表示される様になります。

データベース負荷欄が期待通り表示された

Database Insightsの表示も期待通りに
ちなみに、役割を変えた「詳細なデータベースとクエリごとのメトリクスを収集する」設定に関する記述は以下のドキュメントにあります。
Database Insightsの仕様としては、
- アドバンスモードを選んだ場合は自動で有効化される
- スタンダードモードの場合にオン・オフ可能で、オンの場合7日保存は無料。7日以上の保存は追加費用が発生
という扱いになっています。
7日以上の保存は追加費用が発生という点がPerformance Insightsから引き継がれている感じですね。
終わりに
簡単ですが以上となります。
AWS側の仕様変更により既存のパラメーター名が役割を変える形になったパターンでした。
このため名前から挙動を推測しにくくなっているのでご注意ください。









