AWS CDK で CloudWatch Contributor Insights for DynamoDB を GSI に対して簡単に設定可能になりました
こんにちは、製造ビジネステクノロジー部の若槻です。
AWS CDK の最近のリリースである v2.163.0 で、下記のアップデートが追加されていました。
dynamodb: enable contributor insights for global secondary index (#30560) (799b541), closes #15671
Amazon DynamoDB には CloudWatch Contributor Insights for DynamoDB というモニタリング機能があり、これによりテーブルやインデックスで頻繁にアクセスやスロットリングが発生しているキーを分析することができます。
そして今回の AWS CDK のアップデートにより、GSI (global secondary index) に対する CloudWatch Contributor Insights for DynamoDB を L2 Construct により簡単に設定可能になりました。
試してみた
GSI で Contributor Insights を設定しない場合
まず、Contributor Insights を設定したテーブルと、設定をしていない GSI を Table Construct Class で作成してみます。
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
export class SampleApp extends cdk.Stack {
constructor(scope: Construct, id: string) {
super(scope, id);
const table = new dynamodb.Table(this, 'Table', {
partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
contributorInsightsEnabled: true,
});
table.addGlobalSecondaryIndex({
indexName: 'test-index',
partitionKey: {
name: 'subId',
type: dynamodb.AttributeType.STRING,
},
});
}
}
上記 CDK コードをデプロイすると、テーブルの Contributor Insights グラフが表示されています。
Manage CloudWatch Contributor Insights メニューを開くと、テーブルに対して Contributor Insights が有効になっており、インデックスに対しては有効になっていないことが確認できます。
CDK パッケージのアップデート
AWS CDK モジュールを v2.163.0 以上にアップデートします。
npm i aws-cdk-lib@latest aws-cdk@latest
GSI で Contributor Insights を設定する
GSI に対しても Contributor Insights を有効にするには、テーブルと同様に contributorInsightsEnabled
プロパティを true
に設定します。
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
export class SampleApp extends cdk.Stack {
constructor(scope: Construct, id: string) {
super(scope, id);
const table = new dynamodb.Table(this, 'Table', {
partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
contributorInsightsEnabled: true,
});
table.addGlobalSecondaryIndex({
indexName: 'test-index',
partitionKey: {
name: 'subId',
type: dynamodb.AttributeType.STRING,
},
contributorInsightsEnabled: true, // 追加されたプロパティ
});
}
}
上記 CDK コードをデプロイすると、テーブルに加えてインデックスの Contributor Insights グラフが表示されるようになりました。
Manage CloudWatch Contributor Insights メニューを開くと、テーブルとインデックスの両方に対して Contributor Insights が有効になっていることが確認できます。
Contributor Insights の動作確認
GSI にクエリを行うと Contributor Insights グラフに反映されることを確認してみます。
テーブルにデータを追加します。
aws dynamodb put-item \
--table-name $TABLE_NAME \
--item '{
"id": {"S": "sample-id"},
"subId": {"S": "sample-subId"},
"attribute1": {"S": "sample-value1"},
"attribute2": {"N": "123"}
}'
GSI に対してクエリを行います。
aws dynamodb query \
--table-name $TABLE_NAME \
--index-name test-index \
--key-condition-expression "subId = :subId" \
--expression-attribute-values '{":subId":{"S":"sample-subId"}}'
1 分ほど待つと、グラフにクエリによるキーへのアクセスが表示されるようになりました。
TableV2 の GSI ではまだ使えない
ちなみに TableV2 Construct Class では、テーブルに対しては contributorInsights
プロパティが利用可能ですが、インデックスに対してはまだ利用不可であるようです。
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
export class SampleApp extends cdk.Stack {
constructor(scope: Construct, id: string) {
super(scope, id);
const tablev2 = new dynamodb.TableV2(this, 'TableV2', {
partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
contributorInsights: true, // プロパティが利用可能
});
tablev2.addGlobalSecondaryIndex({
indexName: 'test-index',
partitionKey: {
name: 'subId',
type: dynamodb.AttributeType.STRING,
},
contributorInsights: true, // プロパティが利用不可
});
}
}
TableV2 に実装されて Table に実装されていないプロパティが多い印象ですが、Contributor Insights に関してはそうはなっていないようです。
おわりに
AWS CDK で CloudWatch Contributor Insights for DynamoDB を GSI に対して簡単に設定可能になったのでご紹介しました。
Contributor Insights 自体は 2020 年に GA されている機能ですが、ようやく CDK の L2 Construct でも利用可能になったというアップデートでした。
以上