Back to Releases
AWS CDK 2025年9月29日

AWS CDK v2.218.0 リリース解説

CloudFront Originsに IPv6対応、DocumentDBでServerless クラスターのサポート、ElastiCache Serverless L2コンストラクトの追加など

概要

AWS CDK v2.218.0 では、CloudFront Origins での IPv6 サポート、DocumentDB における Serverless クラスター対応、および L1 リソースでの from<Resource>Arn メソッドの自動生成が追加されました。また、Alpha モジュールでは ElastiCache Serverless の L2 コンストラクトが新たに利用可能になりました。

新機能

CloudFront Origins: HTTP Origin での IP アドレスタイプ指定

#35445

CloudFront の HTTP Origin において、IP アドレスタイプ(IPv4 または IPv6)を指定できるようになりました。これにより、IPv6 をサポートするカスタムオリジンを構成できます。

主な変更点

  • OriginIpAddressType enum の追加
    • IPV4: IPv4 のみをサポート(デフォルト)
    • IPV6: IPv6 のみをサポート
  • HttpOriginPropsipAddressType プロパティを追加

コード例

import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
import * as origins from 'aws-cdk-lib/aws-cloudfront-origins';

const distribution = new cloudfront.Distribution(this, 'Distribution', {
  defaultBehavior: {
    origin: new origins.HttpOrigin('example.com', {
      // 新機能: IPv6 アドレスタイプを指定
      ipAddressType: cloudfront.OriginIpAddressType.IPV6,

      // その他のプロパティ
      protocolPolicy: cloudfront.OriginProtocolPolicy.HTTPS_ONLY,
      customHeaders: {
        'X-Custom-Header': 'value',
      },
    }),
  },
});

使用例: IPv4 を明示的に指定する場合

const distribution = new cloudfront.Distribution(this, 'Distribution', {
  defaultBehavior: {
    origin: new origins.HttpOrigin('example.com', {
      ipAddressType: cloudfront.OriginIpAddressType.IPV4, // IPv4 を明示的に指定
    }),
  },
});

DocumentDB: Serverless クラスターのサポート

#35574

DocumentDB において、Serverless クラスターがサポートされました。これにより、使用量に応じて自動的にスケーリングする DocumentDB クラスターを作成できます。

主な変更点

  • ServerlessV2ScalingConfiguration プロパティの追加
    • minCapacity: 最小キャパシティ(ACU)
    • maxCapacity: 最大キャパシティ(ACU)
  • instanceType が必須ではなくなりました(Serverless クラスターではインスタンスタイプは不要)

コード例: Serverless クラスターの作成

import * as docdb from 'aws-cdk-lib/aws-docdb';
import * as ec2 from 'aws-cdk-lib/aws-ec2';

const vpc = new ec2.Vpc(this, 'Vpc');

// Serverless クラスターの作成
const cluster = new docdb.DatabaseCluster(this, 'ServerlessCluster', {
  vpc,
  masterUser: {
    username: 'admin',
  },
  // Serverless V2 スケーリング設定
  serverlessV2ScalingConfiguration: {
    minCapacity: 0.5,    // 最小キャパシティ: 0.5 ACU
    maxCapacity: 4,      // 最大キャパシティ: 4 ACU
  },
  // instanceType は指定しない(Serverless の場合は不要)
});

コード例: 従来のインスタンスベースのクラスター(変更なし)

// 従来通り、instanceType を指定してインスタンスベースのクラスターを作成することも可能
const instanceCluster = new docdb.DatabaseCluster(this, 'InstanceCluster', {
  vpc,
  masterUser: {
    username: 'admin',
  },
  instanceType: ec2.InstanceType.of(
    ec2.InstanceClass.R5,
    ec2.InstanceSize.LARGE,
  ),
  instances: 2,  // インスタンス数
});

CodePipeline: CodeBuildFactory での Docker サーバーサポート

#35584

CDK Pipelines の CodeBuildFactory で Docker サーバーを使用できるようになりました。これにより、カスタムビルド環境での Docker イメージのビルドとプッシュが可能になります。

コード例

import * as pipelines from 'aws-cdk-lib/pipelines';
import * as codebuild from 'aws-cdk-lib/aws-codebuild';

const pipeline = new pipelines.CodePipeline(this, 'Pipeline', {
  synth: new pipelines.ShellStep('Synth', {
    input: pipelines.CodePipelineSource.connection('owner/repo', 'main', {
      connectionArn: 'arn:aws:codeconnections:...',
    }),
    commands: [
      'npm ci',
      'npm run build',
      'npx cdk synth',
    ],
  }),
  // CodeBuildFactory で Docker サーバーを有効化
  codeBuildDefaults: {
    buildEnvironment: {
      buildImage: codebuild.LinuxBuildImage.STANDARD_7_0,
      privileged: true,  // Docker デーモンへのアクセスを有効化
    },
  },
});

L1 リソース: from<Resource>Arn および from<Resource><Prop> メソッドの自動生成

#35470

すべての L1 リソースで from<Resource>Arn および from<Resource><Prop> の静的ファクトリーメソッドが自動生成されるようになりました。これにより、ARN やリソース識別子から既存リソースをインポートする処理が標準化されます。

主な機能

  • from<Resource>Arn: ARN からリソースをインポート

    • ARN テンプレートをパースして変数を抽出
    • リソースリファレンスを生成
  • from<Resource><Prop>: プライマリ識別子からリソースをインポート

    • プロパティ値から ARN を構築
    • リソースリファレンスを生成

コード例: DynamoDB テーブルのインポート

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

// ARN からテーブルをインポート
const table1 = dynamodb.CfnTable.fromTableArn(
  this,
  'ImportedTable1',
  'arn:aws:dynamodb:us-east-1:123456789012:table/MyTable',
);

// テーブル名からテーブルをインポート
const table2 = dynamodb.CfnTable.fromTableName(
  this,
  'ImportedTable2',
  'MyTable',
);

// インポートしたリソースのプロパティにアクセス可能
console.log(table1.tableRef.tableName);  // "MyTable"
console.log(table2.tableRef.tableArn);   // 構築された ARN

技術詳細

  • TemplateStringParser クラスの追加

    • parse: ARN テンプレートと実際の ARN をマッチングし、変数値を抽出
    • interpolate: ARN テンプレートと変数マップから ARN 文字列を構築
  • 制限事項: プライマリ識別子が複数フィールドを持つリソースでは、ファクトリーメソッドの生成がスキップされます

Alpha モジュール

ElastiCache: Serverless ElastiCache L2 コンストラクト

#35424

ElastiCache Serverless の L2 コンストラクトが Alpha モジュールとして追加されました。これにより、Valkey および Redis 互換の Serverless キャッシュを簡単に作成・管理できます。

新しいコンストラクト

ユーザー管理:

  • IamUser: IAM 認証を使用するユーザー
  • PasswordUser: パスワード認証を使用するユーザー
  • NoPasswordUser: 認証なしのユーザー(テスト環境用)

グループとキャッシュ:

  • UserGroup: ユーザーをグループ化して管理
  • ServerlessCache: Serverless ElastiCache キャッシュ

コード例: IAM ユーザーと Serverless キャッシュの作成

import * as elasticache from '@aws-cdk/aws-elasticache-alpha';
import * as ec2 from 'aws-cdk-lib/aws-ec2';

const vpc = new ec2.Vpc(this, 'Vpc');

// IAM 認証ユーザーの作成
const iamUser = new elasticache.IamUser(this, 'IamUser', {
  userId: 'iam-user-1',
  userName: 'iam-cache-user',
  engine: elasticache.UserEngine.VALKEY,  // VALKEY または REDIS
  accessString: 'on ~* &* +@all',          // アクセス権限の定義
});

// ユーザーグループの作成
const userGroup = new elasticache.UserGroup(this, 'UserGroup', {
  userGroupId: 'my-user-group',
  engine: elasticache.UserEngine.VALKEY,
});

// ユーザーをグループに追加
userGroup.addUser(iamUser);

// Serverless キャッシュの作成
const cache = new elasticache.ServerlessCache(this, 'ServerlessCache', {
  serverlessCacheName: 'my-serverless-cache',
  engine: elasticache.Engine.VALKEY,        // VALKEY または REDIS
  userGroup,

  // ネットワーク設定
  vpc,
  vpcSubnets: {
    subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
  },
  securityGroups: [
    new ec2.SecurityGroup(this, 'CacheSecurityGroup', {
      vpc,
      description: 'Security group for ElastiCache',
    }),
  ],

  // 使用制限の設定(オプション)
  dataStorage: {
    maximum: 100,               // 最大データストレージ: 100 GB
    unit: elasticache.DataStorageUnit.GB,
  },
  ecpuPerSecond: {
    maximum: 5000,              // 最大 ECPU/秒: 5000
  },

  // スナップショット設定(オプション)
  snapshotRetentionLimit: 7,    // スナップショット保持日数: 7日
  dailySnapshotTime: '03:00',   // 日次スナップショット時刻: 午前3時
});

// IAM でキャッシュへの接続許可を付与
cache.grantConnect(iamUser);

コード例: パスワードユーザーの作成

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

// Secrets Manager にパスワードを保存
const passwordSecret = new secretsmanager.Secret(this, 'CachePassword', {
  generateSecretString: {
    excludePunctuation: true,
    includeSpace: false,
  },
});

// パスワード認証ユーザーの作成
const passwordUser = new elasticache.PasswordUser(this, 'PasswordUser', {
  userId: 'password-user-1',
  userName: 'cache-user',
  engine: elasticache.UserEngine.REDIS,
  accessString: 'on ~* &* +@all',
  passwords: [passwordSecret],  // 最大2つのパスワードを設定可能
});

// ユーザーグループに追加
userGroup.addUser(passwordUser);

コード例: CloudWatch メトリクスの監視

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

// キャッシュのメトリクスを取得
const bytesUsedMetric = cache.metricBytesUsedForCache({
  statistic: cloudwatch.Stats.AVERAGE,
  period: cdk.Duration.minutes(5),
});

// アラームを作成
new cloudwatch.Alarm(this, 'HighMemoryUsage', {
  metric: bytesUsedMetric,
  threshold: 80 * 1024 * 1024 * 1024,  // 80 GB
  evaluationPeriods: 2,
  comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
});

利用可能なメトリクス

ServerlessCache コンストラクトは以下のメトリクスメソッドを提供します:

  • metricBytesUsedForCache(): キャッシュで使用されているバイト数
  • metricElastiCacheProcesIssingUnits(): ElastiCache 処理ユニット数
  • metricSuccessfulReadRequestLatency(): 読み取りリクエストのレイテンシー
  • metricSuccessfulWriteRequestLatency(): 書き込みリクエストのレイテンシー

まとめ

AWS CDK v2.218.0 では、CloudFront での IPv6 サポート、DocumentDB Serverless クラスターの対応、L1 リソースでのインポートメソッドの標準化など、複数の重要な機能が追加されました。特に Alpha モジュールでの ElastiCache Serverless L2 コンストラクトの追加により、Serverless アーキテクチャでのキャッシュ管理が大幅に簡素化されます。

これらの機能により、より柔軟で効率的なクラウドインフラストラクチャの構築が可能になります。