Amazon Aurora Serverless v2 の Database Insights を AWS CDK で設定する
こんにちは、製造ビジネステクノロジー部の若槻です。
Amazon Aurora の Database Insights 機能を使用すると、CloudWatch を通じて提供される統合的なダッシュボードで、データベースのパフォーマンスを詳細に分析できます。
この Database Insights には2つのモード スタンダード(Standard) と アドバンスド(Advanced) があり、スタンダードモードは無料で利用できます。アドバンスドモードでは、より詳細な分析機能が提供されますが、追加料金が発生します。
それぞれのモードでサポートされる機能の違いについては、以下のドキュメントを参照してください。
今回は、AWS CDK で構築した Aurora Serverless v2 クラスターで Database Insights のそれぞれのモードを有効化してみました。
やってみた
VPC は予め作成したものを使用します。
VPC 実装 CDK コード
import * as ec2 from "aws-cdk-lib/aws-ec2";
import { Construct } from "constructs";
/**
* VPC 実装
*/
export class VpcConstruct extends Construct {
public readonly vpc: ec2.Vpc;
constructor(scope: Construct, id: string) {
super(scope, id);
this.vpc = new ec2.Vpc(this, "VPC", {
natGateways: 0, // NAT Gateway は不要のため省略
subnetConfiguration: [
// NAT Gateway の配置が不要となる Private Isolated サブネットを作成
{
name: "PrivateIsolated",
subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
},
],
});
}
}
スタンダードモード有効化(デフォルト)
まずは、Database Insights のスタンダードモードを有効化する場合の CDK コード例です。スタンダードモードはデフォルトで有効化されるため、特に追加の設定は不要です。
import * as cdk from "aws-cdk-lib";
import * as rds from "aws-cdk-lib/aws-rds";
import * as ec2 from "aws-cdk-lib/aws-ec2";
import { Construct } from "constructs";
import { VpcConstruct } from "./constructs/vpc";
export class MainStack extends cdk.Stack {
constructor(scope: Construct, id: string) {
super(scope, id);
/**
* VPC 作成
*/
const vpcConstruct = new VpcConstruct(this, "VpcConstruct");
const vpc = vpcConstruct.vpc;
/**
* Aurora DB クラスター作成
*/
new rds.DatabaseCluster(this, "DatabaseCluster", {
engine: rds.DatabaseClusterEngine.auroraPostgres({
version: rds.AuroraPostgresEngineVersion.VER_17_5,
}),
writer: rds.ClusterInstance.serverlessV2("Writer"),
vpc,
vpcSubnets: {
subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
},
serverlessV2MaxCapacity: 1, // 検証簡易化のため、最小値を指定
serverlessV2MinCapacity: 0, // 検証簡易化のため、最小値を指定
removalPolicy: cdk.RemovalPolicy.DESTROY, // 検証簡易化のため、削除時に DB クラスターも削除する
});
}
}
上記をデプロイ後、クラスターの設定を確認すると、Database Insights のスタンダードモードが有効化されていることがわかります。

CloudWatch の Database Insights ダッシュボードも確認してみます。インスタンスごとにダッシュボードが作成されていることがわかります。

インスタンスに関する様々なメトリクスが一元的に確認可能となっています。

スロークエリなどアドバンスドモードでないと確認できない情報は表示されていません。

アドバンスドモード有効化
続いて、Database Insights のアドバンスドモードを有効化する場合の CDK コード例です。
import * as cdk from "aws-cdk-lib";
import * as rds from "aws-cdk-lib/aws-rds";
import * as ec2 from "aws-cdk-lib/aws-ec2";
import { Construct } from "constructs";
import { VpcConstruct } from "./constructs/vpc";
export class MainStack extends cdk.Stack {
constructor(scope: Construct, id: string) {
super(scope, id);
/**
* VPC 作成
*/
const vpcConstruct = new VpcConstruct(this, "VpcConstruct");
const vpc = vpcConstruct.vpc;
/**
* Aurora DB クラスター作成
*/
new rds.DatabaseCluster(this, "DatabaseCluster", {
engine: rds.DatabaseClusterEngine.auroraPostgres({
version: rds.AuroraPostgresEngineVersion.VER_17_5,
}),
writer: rds.ClusterInstance.serverlessV2("Writer"),
/**
* Database Insights の Advanced モードを有効化
*/
databaseInsightsMode: rds.DatabaseInsightsMode.ADVANCED, // Database Insights の Advanced モードを有効化
performanceInsightRetention: rds.PerformanceInsightRetention.MONTHS_15, // Advanced モード利用時は 15 ヶ月間の指定が必須
vpc,
vpcSubnets: {
subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
},
serverlessV2MaxCapacity: 1, // 検証簡易化のため、最小値を指定
serverlessV2MinCapacity: 0, // 検証簡易化のため、最小値を指定
removalPolicy: cdk.RemovalPolicy.DESTROY, // 検証簡易化のため、削除時に DB クラスターも削除する
});
}
}
次のように、databaseInsightsMode プロパティで advanced を指定し、さらに performanceInsightRetention プロパティで 465(15 ヶ月間)を指定する必要があります。アドバンスドモードではメトリクスの保持期間が 15 ヶ月間固定となるためです。
databaseInsightsMode: rds.DatabaseInsightsMode.ADVANCED, // Database Insights の Advanced モードを有効化
performanceInsightRetention: rds.PerformanceInsightRetention.MONTHS_15, // Advanced モード利用時は 15 ヶ月間の指定が必須
上記をデプロイする際に CDK CLI で次の警告が表示されました。Performance Insights も同時に有効化されるんですね。
[Warning at /Main/DatabaseCluster] Performance Insights is enabled on cluster 'DatabaseCluster' at cluster level, but disabled for instance 'Writer'. However, Performance Insights for this instance will also be automatically enabled if enabled at cluster level. [ack: @aws-cdk/aws-rds:instancePerformanceInsightsOverridden]
デプロイ後にクラスターの設定を確認すると、Database Insights のアドバンスドモードが有効化されていることがわかります。保持期限も 15 ヶ月間となっています。加えて、Performance Insights も有効化されていますね。

Database Insights ダッシュボードを確認すると、アドバンスドモードへの切り替えを促すメッセージが表示されなくなっています。

また、スロークエリ情報などアドバンスドモードでないと確認できない情報も表示されていますが、これらはパラメーターや CloudWatch Logs 出力の明示的なセットアップが必要です。


ドキュメントを参考に、スロークエリログおよび CloudWatch Logs 出力を有効化するためのパラメータグループを作成し、DB クラスターに適用します。
import * as cdk from "aws-cdk-lib";
import * as rds from "aws-cdk-lib/aws-rds";
import * as ec2 from "aws-cdk-lib/aws-ec2";
import { Construct } from "constructs";
import { VpcConstruct } from "./constructs/vpc";
export class MainStack extends cdk.Stack {
constructor(scope: Construct, id: string) {
super(scope, id);
/**
* VPC 作成
*/
const vpcConstruct = new VpcConstruct(this, "VpcConstruct");
const vpc = vpcConstruct.vpc;
/**
* パラメータグループ作成(スロークエリログ有効化)
*/
const parameterGroup = new rds.ParameterGroup(this, "ParameterGroup", {
engine: rds.DatabaseClusterEngine.auroraPostgres({
version: rds.AuroraPostgresEngineVersion.VER_17_5,
}),
parameters: {
/**
* スロークエリログの設定
* @see https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/USER_DatabaseInsights.SlowSQL.html
*/
log_min_duration_statement: "1000",
log_statement: "none",
log_destination: "stderr",
},
});
/**
* Aurora DB クラスター作成
*/
new rds.DatabaseCluster(this, "DatabaseCluster", {
engine: rds.DatabaseClusterEngine.auroraPostgres({
version: rds.AuroraPostgresEngineVersion.VER_17_5,
}),
writer: rds.ClusterInstance.serverlessV2("Writer"),
databaseInsightsMode: rds.DatabaseInsightsMode.ADVANCED, // Database Insights の Advanced モードを有効化
performanceInsightRetention: rds.PerformanceInsightRetention.MONTHS_15, // Advanced モード利用時は 15 ヶ月間の指定が必須
/**
* パラメータグループの適用、ログエクスポートの有効化
*/
parameterGroup,
cloudwatchLogsExports: ["postgresql"],
vpc,
vpcSubnets: {
subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
},
serverlessV2MaxCapacity: 1, // 検証簡易化のため、最小値を指定
serverlessV2MinCapacity: 0, // 検証簡易化のため、最小値を指定
removalPolicy: cdk.RemovalPolicy.DESTROY, // 検証簡易化のため、削除時に DB クラスターも削除する
});
}
}
すると、CloudWatch の Database Insights ダッシュボードでスロークエリ情報および CloudWatch Logs 出力が確認できるようになりました。


トラブルシュート
performanceInsightRetention で 15 ヶ月間を指定しないと、次のようなエラーが発生してデプロイに失敗します。
ValidationError: DatabaseCluster2 initialization failed due to the following validation error(s):
performanceInsightRetentionmust be set to '{PerformanceInsightRetention.MONTHS_15}' whendatabaseInsightsModeis set to '${DatabaseInsightsMode.ADVANCED}'
忘れずに指定するようにしましょう。
おわりに
AWS CDK で構築した Aurora Serverless v2 クラスターで Database Insights のそれぞれのモードを有効化してみました。DB アクセス上のパフォーマンスやボトルネックを可視化でき、より効果的なチューニングを行える機能となっているのでぜひ活用していきたいですね。
Database Insights の機能自体は昨年の re:Invent で発表され、今年 11 月での EOL が発表された Performance Insights の代替となる機能としてリリースされた機能です。
Database Insights の詳細な機能やモードの違いについては、以下の記事が参考になるので併せてご覧ください。
以上







