Back to Releases
v2.226.0 2025年11月20日

AWS CDK v2.226.0 リリース解説

DynamoDB のグローバルセカンダリインデックスに複合キー (Compound Keys) のサポートが追加され、Lambda 関数にマルチテナンシーのサポートが追加されました。

dynamodblambda

AWS CDK v2.226.0 では、DynamoDB と Lambda に重要な機能拡張が行われました。DynamoDB のグローバルセカンダリインデックスで複合キーがサポートされ、より柔軟なクエリパターンが可能になりました。また、Lambda 関数にマルチテナンシーのサポートが追加され、テナント間の実行環境の分離が実現できるようになりました。

新機能

DynamoDB: グローバルセカンダリインデックスに複合キーのサポートを追加

DynamoDB のグローバルセカンダリインデックス (GSI) で、複数の属性を組み合わせた複合キー (Compound Keys) がサポートされるようになりました。これにより、より複雑なクエリパターンに対応できるようになります。

主な変更点

  • partitionKeys: 複数のパーティションキーを配列で指定可能(最大4つ)
  • sortKeys: 複数のソートキーを配列で指定可能(最大4つ)
  • 従来の partitionKeysortKey プロパティも後方互換性のためサポート

使用例

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つまで指定可能
  • partitionKeypartitionKeys は排他的(どちらか一方のみ指定)
  • sortKeysortKeys も排他的(どちらか一方のみ指定)

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 のテナント分離機能と組み合わせることで、エンタープライズグレードのマルチテナントアプリケーションの構築が容易になります。