概要
AWS CDK v2.213.0では、DynamoDB TableにContributor Insights Modeの設定機能が追加されました。また、Alphaモジュールでは、S3 TablesのTablePolicy L2コンストラクトと、テーブルへの権限付与メソッドが追加されました。
新機能
DynamoDB: Contributor Insights Mode の追加
DynamoDB TableとTableV2に、Contributor Insights Modeを設定できる機能が追加されました。Contributor Insightsは、テーブルやグローバルセカンダリインデックス(GSI)に対する読み書きのトラフィックパターンを分析し、最も頻繁にアクセスされるアイテムや、スロットルされているリクエストを特定するのに役立ちます。
使用方法
Table (V1) の場合:
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
const table = new dynamodb.Table(this, 'MyTable', {
partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
// Contributor Insights を有効化(デフォルト: 無効)
contributorInsightsMode: dynamodb.ContributorInsightsMode.ENABLED,
});
TableV2 の場合:
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
const tableV2 = new dynamodb.TableV2(this, 'MyTableV2', {
partitionKey: { name: 'pk', type: dynamodb.AttributeType.STRING },
// テーブルレベルでContributor Insights Modeを設定
contributorInsightsMode: dynamodb.ContributorInsightsMode.ENABLED,
// GSIごとにも個別に設定可能
globalSecondaryIndexes: [
{
indexName: 'GSI1',
partitionKey: { name: 'gsi1pk', type: dynamodb.AttributeType.STRING },
// このGSIのみContributor Insightsを有効化
contributorInsightsMode: dynamodb.ContributorInsightsMode.ENABLED,
},
],
});
ContributorInsightsMode の値
ContributorInsightsMode.ENABLED: Contributor Insightsを有効化ContributorInsightsMode.DISABLED: Contributor Insightsを無効化(デフォルト)
この機能により、DynamoDBテーブルのアクセスパターンを詳細に分析し、パフォーマンスの最適化やコスト管理に役立てることができます。
参考: AWS CloudFormation - ContributorInsightsSpecification
Alphaモジュール
S3 Tables: TablePolicy L2コンストラクトと権限管理メソッドの追加
S3 TablesのTableにIAMポリシーを付与するための新しいL2コンストラクト TablePolicy が追加されました。また、Table コンストラクトに権限管理のための便利なメソッドが追加されました。
新しいL2コンストラクト: TablePolicy
TablePolicyは、S3 TablesのTableにリソースベースのIAMポリシーを定義するためのコンストラクトです。
import * as s3tables from '@aws-cdk/aws-s3tables-alpha';
import * as iam from 'aws-cdk-lib/aws-iam';
declare const table: s3tables.Table;
// TablePolicyを使用して、テーブルにIAMポリシーを定義
const tablePolicy = new s3tables.TablePolicy(this, 'MyTablePolicy', {
table: table, // 対象のテーブル
});
// ポリシーステートメントを追加
tablePolicy.document.addStatements(
new iam.PolicyStatement({
actions: ['s3tables:GetTableData'],
principals: [new iam.AccountPrincipal('123456789012')],
resources: [table.tableArn],
}),
);
Table コンストラクトに追加された権限管理メソッド
Table コンストラクトに、より簡単に権限を付与できる以下のメソッドが追加されました。
1. addToResourcePolicy
テーブルのIAMポリシーにステートメントを追加します。
import * as s3tables from '@aws-cdk/aws-s3tables-alpha';
import * as iam from 'aws-cdk-lib/aws-iam';
declare const table: s3tables.Table;
// テーブルのリソースポリシーにステートメントを直接追加
table.addToResourcePolicy(
new iam.PolicyStatement({
actions: ['s3tables:GetTableData'],
principals: [new iam.AccountPrincipal('123456789012')],
resources: [table.tableArn],
}),
);
2. grantRead
特定のプリンシパルにテーブルへの読み取り権限を付与します。
import * as s3tables from '@aws-cdk/aws-s3tables-alpha';
import * as iam from 'aws-cdk-lib/aws-iam';
declare const table: s3tables.Table;
declare const user: iam.User;
// ユーザーに読み取り権限を付与(s3tables:Get* アクション)
table.grantRead(user);
付与されるIAMアクション:
s3tables:Get*
3. grantWrite
特定のプリンシパルにテーブルへの書き込み権限を付与します。
import * as s3tables from '@aws-cdk/aws-s3tables-alpha';
import * as iam from 'aws-cdk-lib/aws-iam';
declare const table: s3tables.Table;
declare const role: iam.Role;
// ロールに書き込み権限を付与
table.grantWrite(role);
付与されるIAMアクション:
s3tables:PutTableDatas3tables:UpdateTableMetadataLocations3tables:RenameTable
4. grantReadWrite
特定のプリンシパルにテーブルへの読み取りと書き込み権限の両方を付与します。
import * as s3tables from '@aws-cdk/aws-s3tables-alpha';
import * as iam from 'aws-cdk-lib/aws-iam';
declare const table: s3tables.Table;
declare const lambdaFunction: iam.Role;
// Lambda関数に読み取りと書き込みの両方の権限を付与
table.grantReadWrite(lambdaFunction);
付与されるIAMアクション:
s3tables:Get*s3tables:PutTableDatas3tables:UpdateTableMetadataLocations3tables:CreateTable
実用的な使用例
Lambda関数からS3 Tablesにアクセスする場合の例:
import * as s3tables from '@aws-cdk/aws-s3tables-alpha';
import * as lambda from 'aws-cdk-lib/aws-lambda';
declare const tableBucket: s3tables.TableBucket;
// S3 Tableを作成
const table = new s3tables.Table(this, 'MyTable', {
tableBucket: tableBucket,
tableName: 'my-analytics-table',
dataLake: s3tables.DataLake.ICEBERG,
columns: [
{ name: 'id', type: s3tables.ColumnType.STRING },
{ name: 'timestamp', type: s3tables.ColumnType.TIMESTAMP },
{ name: 'value', type: s3tables.ColumnType.DOUBLE },
],
partitionKeys: [{ name: 'id', type: s3tables.ColumnType.STRING }],
});
// Lambda関数を作成
const dataProcessor = new lambda.Function(this, 'DataProcessor', {
runtime: lambda.Runtime.NODEJS_20_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda'),
});
// Lambda関数に読み取り権限を付与
table.grantRead(dataProcessor);
これらの新機能により、S3 Tablesのアクセス制御がより簡単かつ柔軟に設定できるようになりました。
まとめ
AWS CDK v2.213.0では、DynamoDB TableへのContributor Insights Mode設定機能と、S3 TablesのTablePolicy L2コンストラクトが追加されました。これにより、DynamoDBのアクセスパターン分析とS3 Tablesの権限管理がより簡単に実装できるようになりました。
関連PR: