Back to Releases
v2.212.0 2025年8月20日

AWS CDK v2.212.0 リリース解説

WebSocket API向けのUsagePlanとApiKeyのL2コンストラクトが追加され、API使用量制限の管理が可能になりました。また、API GatewayのStep Functions統合のバグ修正など、複数の改善が含まれています。

apigatewayv2apigateways3-deploymentsignerrdssagemakercloudfront

概要

AWS CDK v2.212.0 では、AWS API Gateway v2(WebSocket API)向けの重要な新機能として、UsagePlanApiKey のL2コンストラクトサポートが追加されました。これにより、WebSocket APIに対してもレート制限やクォータ管理が可能になります。また、API GatewayのStep Functions統合におけるエラーレスポンスのバグ修正や、S3デプロイメントでのトークン解決の問題修正など、複数の重要なバグ修正も含まれています。

新機能

WebSocket API向けUsagePlanとApiKeyのサポート

PR: #35060

従来、UsagePlanとApiKeyは REST API(API Gateway v1)でのみサポートされていましたが、今回のリリースで WebSocket API(API Gateway v2) でも利用可能になりました。これにより、WebSocket APIに対してもレート制限、バースト制限、クォータ管理が実装できるようになります。

UsagePlanの作成

UsagePlanを使用することで、APIへのアクセス制限を設定できます:

import * as apigwv2 from 'aws-cdk-lib/aws-apigatewayv2';

const usagePlan = new apigwv2.UsagePlan(this, 'MyUsagePlan', {
  usagePlanName: 'WebSocketBasicPlan',           // 使用量プラン名
  description: 'Basic usage plan for WebSocket API',  // プランの説明

  // スロットリング設定(リクエストレート制限)
  throttle: {
    rateLimit: 10,      // 1秒あたりの平均リクエスト数
    burstLimit: 2,      // 瞬間的なバーストリクエスト数
  },

  // クォータ設定(期間あたりの最大リクエスト数)
  quota: {
    limit: 10000,                    // 最大リクエスト数
    period: apigwv2.Period.MONTH,    // 期間(DAY, WEEK, MONTH)
    offset: 0,                       // 初期期間のオフセット(デフォルト: 0)
  },
});

UsagePlanとWebSocket Stageの関連付け

UsagePlanを特定のWebSocket APIステージに関連付けます:

const api = new apigwv2.WebSocketApi(this, 'MyWebSocketApi', {
  routeSelectionExpression: '$request.body.action',
});

const stage = new apigwv2.WebSocketStage(this, 'ProductionStage', {
  webSocketApi: api,
  stageName: 'prod',
  autoDeploy: true,
});

// UsagePlanにステージを追加
usagePlan.addApiStage({
  api: api,     // WebSocket API
  stage: stage, // 関連付けるステージ
});

ApiKeyの作成と管理

APIキーを作成してクライアントアクセスを管理できます:

// 自動生成される名前と値
const autoGeneratedKey = new apigwv2.ApiKey(this, 'AutoKey', {
  description: 'Auto-generated API key',
  enabled: true,  // APIキーを有効化(デフォルト: true)
});

// カスタム名と値を指定
const customKey = new apigwv2.ApiKey(this, 'CustomKey', {
  apiKeyName: 'MyWebSocketApiKey',                    // カスタム名
  value: 'MyApiKeyThatIsAtLeast20Characters',         // カスタム値(20文字以上)
  description: 'Custom API key for partner integration',
  enabled: true,
  customerId: 'customer-12345',                       // AWS Marketplace顧客ID(オプション)
  generateDistinctId: false,                          // 個別IDの生成(デフォルト: false)
});

// UsagePlanにApiKeyを関連付け
usagePlan.addApiKey(customKey);

複数のApiKeyの管理

1つのUsagePlanに複数のApiKeyを関連付けることができます。CloudFormationの論理IDを明示的に指定することで、デプロイ間での一貫性を保つことができます:

declare const usagePlan: apigwv2.UsagePlan;

const apiKey1 = new apigwv2.ApiKey(this, 'ApiKey1');
const apiKey2 = new apigwv2.ApiKey(this, 'ApiKey2');

// CloudFormation論理IDを明示的に指定
usagePlan.addApiKey(apiKey1, {
  overrideLogicalId: 'FirstApiKey',
});

usagePlan.addApiKey(apiKey2, {
  overrideLogicalId: 'SecondApiKey',
});

RateLimitedApiKeyによる簡単なレート制限

単一のAPIキーに対してレート制限を設定する場合、RateLimitedApiKeyを使用することで簡単に実装できます:

declare const api: apigwv2.WebSocketApi;
declare const stage: apigwv2.WebSocketStage;

const rateLimitedKey = new apigwv2.RateLimitedApiKey(this, 'RateLimitedKey', {
  apiKeyName: 'PremiumCustomerKey',
  customerId: 'premium-customer-123',

  // このAPIキーが適用されるステージ
  apiStages: [{
    api: api,
    stage: stage,
  }],

  // クォータ設定
  quota: {
    limit: 50000,                     // 月間50,000リクエスト
    period: apigwv2.Period.MONTH,
  },

  // スロットリング設定
  throttle: {
    rateLimit: 100,    // 1秒あたり100リクエスト
    burstLimit: 200,   // バースト最大200リクエスト
  },
});

IAM権限の付与

ApiKeyに対するIAM権限を簡単に付与できます:

import * as iam from 'aws-cdk-lib/aws-iam';

const user = new iam.User(this, 'ApiUser');
const apiKey = new apigwv2.ApiKey(this, 'MyApiKey');

// 読み取り権限を付与
apiKey.grantRead(user);

// 書き込み権限を付与
apiKey.grantWrite(user);

// 読み書き両方の権限を付与
apiKey.grantReadWrite(user);

既存リソースのインポート

既存のUsagePlanやApiKeyをインポートして使用することもできます:

// 既存のUsagePlanをインポート
const importedUsagePlan = apigwv2.UsagePlan.fromUsagePlanId(
  this,
  'ImportedUsagePlan',
  'usage-plan-id-12345'
);

// 既存のApiKeyをインポート
const importedApiKey = apigwv2.ApiKey.fromApiKeyId(
  this,
  'ImportedApiKey',
  'api-key-id-67890'
);

// インポートしたWebSocket APIステージの使用
declare const webSocketApi: apigwv2.IWebSocketApi;

const importedStage = apigwv2.WebSocketStage.fromWebSocketStageAttributes(
  this,
  'ImportedStage',
  {
    stageName: 'prod',
    api: webSocketApi,
  }
);

// インポートしたリソースを使用してUsagePlanを作成
const usagePlan = new apigwv2.UsagePlan(this, 'UsagePlanForImported', {
  apiStages: [{ api: webSocketApi, stage: importedStage }],
});

const apiKey = new apigwv2.ApiKey(this, 'NewApiKey');
usagePlan.addApiKey(apiKey);

L1リソースの更新

PR: #35256

最新のCloudFormationリソース定義に基づいて、L1コンストラクト(CfnXxx)が更新されました。

バグ修正

API Gateway: Step Functions統合のエラーレスポンス修正

PR: #34787 Issue: #34777

API GatewayのStep Functions統合において、エラーレスポンスの無効なJSON構造が500エラーを引き起こす問題が修正されました。これにより、Step Functionsからのエラーレスポンスが正しく処理されるようになりました。

影響: API Gateway + Step Functions統合を使用しているアプリケーションで、エラーハンドリングが改善されます。

aws-cdk-lib: Feature Flagレポートの不要なフラグ表示を修正

PR: #35227

Feature Flagレポートに不要なフラグが含まれていた問題が修正されました。これにより、実際に関連するFeature Flagのみが表示されるようになります。

影響: cdk diffcdk deploy時のFeature Flag表示がより明確になります。

S3 Deployment: Source.jsonDataでのトークン解決の問題修正

PR: #35169 Issue: #35145

Source.jsonData内のリストトークンが正しく解決されない問題が修正されました。これにより、動的な値を含むJSONデータを正しくS3にデプロイできるようになります。

import * as s3deploy from 'aws-cdk-lib/aws-s3-deployment';
import * as s3 from 'aws-cdk-lib/aws-s3';

declare const bucket: s3.Bucket;
declare const dynamicList: string[];

// リストトークンが正しく解決されるようになりました
new s3deploy.BucketDeployment(this, 'DeployConfig', {
  sources: [
    s3deploy.Source.jsonData('config.json', {
      items: dynamicList,  // トークン化されたリストが正しく処理される
    }),
  ],
  destinationBucket: bucket,
});

影響: CDKトークンを含むJSONデータのS3デプロイメントが正しく動作します。

Signer: SigningProfileNameの引き渡しエラー修正

PR: #35033 Issue: #35030

CfnSigningProfilesigningProfileNameが正しく渡されない問題が修正されました。

影響: AWS Signerを使用したコード署名プロファイルが正しく作成されます。

L1リソースの変更

CloudFormationスキーマの更新に伴い、以下のL1リソースに破壊的変更が含まれています:

AWS RDS

  • AWS::RDS::DBInstance: StatusInfosプロパティが削除されました

AWS SageMaker

  • AWS::SageMaker::Domain: SingleSignOnApplicationArnプロパティが削除されました

AWS CloudFront

  • AWS::CloudFront::Function: Nameプロパティが不変(immutable)に変更されました

これらの変更は、CloudFormationの実際の動作をより正確に反映するためのものです。

リバート(取り消し)

ECS/Fargateサービスのドキュメント変更の取り消し

PR: #35233 元のPR: #35156

ECSとFargateサービスに関する新しいAZリバランシングのデフォルト値に関するドキュメント変更が取り消されました。

Alphaモジュール

このリリースには、バージョン 2.212.0-alpha.0 のAlphaモジュールが含まれています。Alphaモジュールは実験的な機能であり、今後のリリースで破壊的変更が行われる可能性があります。

まとめ

AWS CDK v2.212.0 は、WebSocket API向けのUsagePlanとApiKeyサポートという重要な新機能を追加しました。これにより、WebSocket APIに対してもREST APIと同様の使用量管理とレート制限が実装できるようになります。

また、API Gateway + Step Functions統合のエラーハンドリング改善や、S3 Deploymentでのトークン解決の問題修正など、複数の重要なバグ修正が含まれており、既存のアプリケーションの安定性が向上します。

L1リソースの変更については、CloudFormationスキーマの更新に伴うものであり、より正確なリソース定義が提供されています。該当するプロパティを使用している場合は、デプロイ前に影響を確認することをお勧めします。

WebSocket APIを使用しているアプリケーションで使用量管理が必要な場合、このリリースのUsagePlanとApiKey機能を活用することで、簡単にレート制限とクォータ管理を実装できます。