AWS CDK v2.226.0 では、DynamoDB と Lambda に重要な機能拡張が行われました。DynamoDB のグローバルセカンダリインデックスで複合キーがサポートされ、より柔軟なクエリパターンが可能になりました。また、Lambda 関数にマルチテナンシーのサポートが追加され、テナント間の実行環境の分離が実現できるようになりました。
新機能
DynamoDB: グローバルセカンダリインデックスに複合キーのサポートを追加
DynamoDB のグローバルセカンダリインデックス (GSI) で、複数の属性を組み合わせた複合キー (Compound Keys) がサポートされるようになりました。これにより、より複雑なクエリパターンに対応できるようになります。
主な変更点
partitionKeys: 複数のパーティションキーを配列で指定可能(最大4つ)sortKeys: 複数のソートキーを配列で指定可能(最大4つ)- 従来の
partitionKeyとsortKeyプロパティも後方互換性のためサポート
使用例
import { Table, AttributeType, ProjectionType } from 'aws-cdk-lib/aws-dynamodb';
import { RemovalPolicy } from 'aws-cdk-lib';
const table = new Table(this, 'Table', {
tableName: 'my-compound-key-table',
partitionKey: { name: 'id', type: AttributeType.STRING },
removalPolicy: RemovalPolicy.DESTROY,
});
// 複合キーを使用したグローバルセカンダリインデックス
table.addGlobalSecondaryIndex({
indexName: 'CompoundKeyIndex',
// 複数のパーティションキーを指定
partitionKeys: [
{ name: 'tenantId', type: AttributeType.STRING },
{ name: 'customerId', type: AttributeType.STRING },
],
// 複数のソートキーを指定
sortKeys: [
{ name: 'timestamp', type: AttributeType.NUMBER },
{ name: 'eventType', type: AttributeType.STRING },
],
projectionType: ProjectionType.INCLUDE,
nonKeyAttributes: ['data', 'metadata'],
});
// 単一のパーティションキーと複数のソートキーも可能
table.addGlobalSecondaryIndex({
indexName: 'SinglePartitionMultiSort',
partitionKey: { name: 'category', type: AttributeType.STRING },
sortKeys: [
{ name: 'priority', type: AttributeType.NUMBER },
{ name: 'createdAt', type: AttributeType.NUMBER },
],
projectionType: ProjectionType.ALL,
});
制約
- パーティションキーは最低1つ、最大4つまで指定可能
- ソートキーは0個から最大4つまで指定可能
partitionKeyとpartitionKeysは排他的(どちらか一方のみ指定)sortKeyとsortKeysも排他的(どちらか一方のみ指定)
Lambda: マルチテナンシーのサポートを追加
Lambda 関数にマルチテナンシーのサポートが追加され、テナント間で実行環境を分離できるようになりました。これにより、マルチテナントアプリケーションでのセキュリティとパフォーマンスの最適化が可能になります。
TenancyConfig の設定
新しい TenancyConfig クラスを使用して、テナント分離モードを設定できます。
import { Function, Runtime, Code, TenancyConfig } from 'aws-cdk-lib/aws-lambda';
const multiTenantFunction = new Function(this, 'MultiTenantFunction', {
runtime: Runtime.NODEJS_18_X,
handler: 'index.handler',
code: Code.fromAsset('lambda'),
// テナントごとに専用の実行環境を割り当て
tenancyConfig: TenancyConfig.PER_TENANT,
});
テナント分離モード
TenancyConfig.PER_TENANT: 各テナントに専用の実行環境を割り当て- 実行環境は異なるテナント間で共有されない
- 同じテナントの場合は実行環境を再利用してコールドスタートを回避
- テナント間のデータ漏洩リスクを最小化
互換性の制約
テナント分離モードは以下の機能と互換性がありません:
- SnapStart: SnapStart を有効にした関数では使用不可
- Provisioned Concurrency: プロビジョニングされた同時実行数との併用不可
- Function URLs: Lambda 関数 URL との併用不可
- イベントソース: ほとんどのイベントソースと互換性なし(API Gateway のみサポート)
使用例(API Gateway との統合)
import { Function, Runtime, Code, TenancyConfig } from 'aws-cdk-lib/aws-lambda';
import { RestApi, LambdaIntegration } from 'aws-cdk-lib/aws-apigateway';
// マルチテナント対応のLambda関数
const tenantIsolatedFunction = new Function(this, 'TenantFunction', {
runtime: Runtime.NODEJS_20_X,
handler: 'index.handler',
code: Code.fromAsset('lambda'),
tenancyConfig: TenancyConfig.PER_TENANT, // テナント分離を有効化
});
// API Gateway と統合(サポート対象)
const api = new RestApi(this, 'TenantApi');
api.root.addMethod('POST', new LambdaIntegration(tenantIsolatedFunction));
まとめ
AWS CDK v2.226.0 では、DynamoDB のグローバルセカンダリインデックスで複合キーがサポートされ、より複雑なクエリパターンに対応できるようになりました。また、Lambda 関数にマルチテナンシーのサポートが追加され、テナント間での実行環境の分離が可能になりました。これらの機能により、マルチテナントアプリケーションのセキュリティとパフォーマンスを向上させることができます。
特に DynamoDB の複合キー機能は、マルチテナントやマルチカスタマーのアプリケーションで、より柔軟なデータモデリングとクエリの最適化を実現します。Lambda のテナント分離機能と組み合わせることで、エンタープライズグレードのマルチテナントアプリケーションの構築が容易になります。