Back to Releases
v2.190.0 2025年4月17日

AWS CDK v2.190.0 リリース解説

API Gateway V2のアクセスロギング対応、RDSのLookup機能追加、S3レプリケーション設定の強化など、多数の機能追加が含まれるリリース

apigatewayv2rdss3elasticloadbalancingv2stepfunctionsbedrockec2

概要

AWS CDK v2.190.0 では、API Gateway V2でのアクセスロギング対応、RDSインスタンスのLookup機能、S3レプリケーション設定の柔軟化、Network Load BalancerのSubnet Mappings対応など、多数の機能追加が行われました。また、Alphaモジュールでは、EC2のIPv6/Dualstackサポートが追加されました。

新機能

API Gateway V2: HttpStageでのアクセスロギング対応

API Gateway HTTP APIのステージで、CloudWatch Logsへのアクセスロギングを設定できるようになりました。API Gateway V1と同様のロジックで実装されています。

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

// CloudWatch Logs ロググループの作成
const logGroup = new logs.LogGroup(this, 'ApiLogs', {
  retention: logs.RetentionDays.ONE_WEEK,
});

// HTTP APIの作成
const httpApi = new apigwv2.HttpApi(this, 'HttpApi');

// アクセスロギングを有効化したステージ
new apigwv2.HttpStage(this, 'Stage', {
  httpApi,
  stageName: 'prod',
  // アクセスロギングの設定
  accessLogSettings: {
    destinationArn: logGroup.logGroupArn,  // ログの出力先
    format: apigwv2.AccessLogFormat.jsonWithStandardFields({
      caller: true,
      httpMethod: true,
      ip: true,
      protocol: true,
      requestTime: true,
      resourcePath: true,
      responseLength: true,
      status: true,
      user: true,
    }),
  },
});

関連PR: #33977

RDS: DatabaseInstance.fromLookup() の追加

既存のRDSインスタンスを識別子から検索し、参照できる新しいメソッド fromLookup() が追加されました。Cloud Control APIを使用してインスタンス情報を取得します。

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

// 既存のRDSインスタンスを検索
const existingDb = rds.DatabaseInstance.fromLookup(this, 'ExistingDB', {
  instanceIdentifier: 'my-database-instance-1',  // RDSインスタンス識別子
});

// 検索したインスタンスのエンドポイント情報を利用可能
console.log(existingDb.dbInstanceEndpointAddress);
console.log(existingDb.dbInstanceEndpointPort);

// IAMロールに接続権限を付与
const role = new iam.Role(this, 'Role', {
  assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
});
existingDb.grantConnect(role, 'dbUser');  // データベースユーザーに接続権限を付与

注意事項:

  • Cloud Control APIの実行権限が必要です
  • デプロイ時にAWS環境から実際のインスタンス情報を取得します

関連PR: #33258

S3: レプリケーション用のカスタムIAMロール指定

S3バケットのレプリケーション設定で、カスタムIAMロールを指定できるようになりました。これにより、外部で管理されているIAMロールを使用したり、複数のスタックやアカウント間でロールを再利用することが可能になります。

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

// レプリケーション先バケット
const destinationBucket = new s3.Bucket(this, 'DestinationBucket', {
  bucketName: 'my-destination-bucket',
});

// カスタムレプリケーションロールの作成
const replicationRole = new iam.Role(this, 'ReplicationRole', {
  assumedBy: new iam.ServicePrincipal('s3.amazonaws.com'),
});

// 必要な権限を手動で付与
replicationRole.addToPolicy(new iam.PolicyStatement({
  actions: [
    's3:GetReplicationConfiguration',
    's3:ListBucket',
  ],
  resources: ['arn:aws:s3:::my-source-bucket'],
}));

replicationRole.addToPolicy(new iam.PolicyStatement({
  actions: [
    's3:GetObjectVersionForReplication',
    's3:GetObjectVersionAcl',
  ],
  resources: ['arn:aws:s3:::my-source-bucket/*'],
}));

replicationRole.addToPolicy(new iam.PolicyStatement({
  actions: [
    's3:ReplicateObject',
    's3:ReplicateDelete',
  ],
  resources: ['arn:aws:s3:::my-destination-bucket/*'],
}));

// ソースバケットにカスタムロールを指定
const sourceBucket = new s3.Bucket(this, 'SourceBucket', {
  bucketName: 'my-source-bucket',
  versioned: true,  // レプリケーションにはバージョニングが必要
  // カスタムレプリケーションロールの指定
  replicationRole: replicationRole,
  // レプリケーションルールの定義
  replicationRules: [{
    destination: destinationBucket,
    priority: 1,
  }],
});

重要な注意事項:

  • カスタムロールを指定した場合、CDKは自動的に権限を付与しません
  • レプリケーションに必要なIAMポリシーは、ユーザーが手動で設定する必要があります
  • replicationRole を指定する場合、replicationRules も必ず定義する必要があります

関連PR: #33978

Elastic Load Balancing V2: Network Load Balancerのサブネットマッピング対応

Network Load Balancerで、より詳細なサブネット設定が可能な subnetMappings プロパティが追加されました。CloudFormationの SubnetMapping プロパティに相当する機能で、IPv4/IPv6アドレスの指定やSource NAT IPv6プレフィックスの設定が可能です。

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

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

// Elastic IPの作成
const eip1 = new ec2.CfnEIP(this, 'EIP1');
const eip2 = new ec2.CfnEIP(this, 'EIP2');

// サブネットマッピングを使用したNLB作成
const nlb = new elbv2.NetworkLoadBalancer(this, 'NLB', {
  vpc,
  internetFacing: true,
  // 詳細なサブネットマッピング設定
  subnetMappings: [
    {
      subnetId: vpc.publicSubnets[0].subnetId,          // サブネットID
      allocationId: eip1.attrAllocationId,              // Elastic IPの割り当てID(オプション)
      privateIPv4Address: '10.0.1.100',                 // プライベートIPv4アドレス(オプション)
      ipv6Address: '2001:db8::1',                       // IPv6アドレス(オプション)
    },
    {
      subnetId: vpc.publicSubnets[1].subnetId,
      allocationId: eip2.attrAllocationId,
      privateIPv4Address: '10.0.2.100',
    },
  ],
});

// Source NAT IPv6プレフィックスを使用した例
const nlbWithSourceNat = new elbv2.NetworkLoadBalancer(this, 'NLBWithSourceNat', {
  vpc,
  internetFacing: true,
  subnetMappings: [
    {
      subnetId: vpc.publicSubnets[0].subnetId,
      // Source NAT IPv6プレフィックスの設定
      sourceNatIpv6Prefixes: [
        elbv2.SourceNatIpv6Prefix.amazonProvided(),     // AWS提供のプレフィックス
      ],
    },
    {
      subnetId: vpc.publicSubnets[1].subnetId,
      sourceNatIpv6Prefixes: [
        elbv2.SourceNatIpv6Prefix.byoip('2001:db8::/64'),  // BYOIP(Bring Your Own IP)プレフィックス
      ],
    },
  ],
});

注意事項:

  • subnetMappingssubnets を同時に指定することはできません
  • 各サブネットに対して1つのマッピングのみ指定可能です

関連PR: #33736

Step Functions: Distributed MapのResultWriterにWriterConfig対応

Step FunctionsのDistributed Mapで、ResultWriterに新しい WriterConfig プロパティが追加され、出力タイプや変換設定をカスタマイズできるようになりました。

import * as sfn from 'aws-cdk-lib/aws-stepfunctions';
import * as s3 from 'aws-cdk-lib/aws-s3';

// 結果出力用バケット
const resultBucket = new s3.Bucket(this, 'ResultBucket');

const distributedMap = new sfn.DistributedMap(this, 'DistributedMap', {
  // ResultWriterV2を使用(フィーチャーフラグが必要)
  resultWriter: sfn.ResultWriterV2.s3({
    bucket: resultBucket,
    prefix: 'results',
    // WriterConfigの設定
    writerConfig: {
      outputType: sfn.OutputType.JSON,          // 出力タイプ: JSON または JSONL(デフォルト: JSON)
      transformation: {
        expression: '$.output',                 // JSONata式による変換(オプション)
      },
    },
  }),
  itemsPath: sfn.JsonPath.stringAt('$.items'),
});

// ItemReaderにJSONL型も追加されました
const mapWithJsonlReader = new sfn.DistributedMap(this, 'MapWithJsonl', {
  itemReader: sfn.S3JsonItemReader.create({
    bucket: resultBucket,
    key: 'input.jsonl',
    inputType: sfn.InputType.JSONL,  // 新規追加: JSONL形式のサポート
  }),
  resultWriter: sfn.ResultWriterV2.s3({
    bucket: resultBucket,
    prefix: 'results',
  }),
});

重要な変更点:

  • 新しい ResultWriterV2 クラスが追加されました(破壊的変更を避けるため)
  • 使用するには、フィーチャーフラグ @aws-cdk/aws-stepfunctions:useDistributedMapResultWriterV2true に設定する必要があります
  • WriterConfig のみを指定した場合、S3への書き込み権限は自動的に付与されません
// cdk.json での設定例
{
  "context": {
    "@aws-cdk/aws-stepfunctions:useDistributedMapResultWriterV2": true
  }
}

関連PR: #33831

Bedrock: Amazon Nova Sonic 1.0 のサポート

Amazon Bedrock で新しいモデル Amazon Nova Sonic 1.0 がサポートされました。

関連PR: #34134

CloudFront: 列挙型値の追加

CloudFrontモジュールで、不足していた列挙型の値が追加されました。

関連PR: #34075

エラーハンドリングの改善

以下のモジュールで、型指定されていないエラーの代わりに ValidationError をスローするように改善されました:

  • cognito-identitypool: より明確なバリデーションエラー(#34109
  • fsx: より明確なバリデーションエラー(#34120
  • ses: より明確なバリデーションエラー(#34098

Alphaモジュールの新機能

EC2: IPv6/Dualstackサポート (Alpha)

EC2モジュールに、IPv6とDualstack(IPv4/IPv6両対応)をサポートする機能が追加されました。XRay、WAFv2、WorkMailなどのサービスでVPCエンドポイントのIPv6サポートが開始されたことに対応します。

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

const vpc = new ec2.VpcV2(this, 'VPC', {
  primaryAddressBlock: ec2.IpAddresses.ipv4('10.0.0.0/16'),
  // IPv6 CIDRブロックの追加
  secondaryAddressBlocks: [
    ec2.IpAddresses.amazonProvidedIpv6({
      cidrBlockName: 'AmazonIpv6',
    }),
  ],
});

// Dualstack対応のVPCエンドポイント
const endpoint = vpc.addInterfaceEndpoint('XRayEndpoint', {
  service: ec2.InterfaceVpcEndpointAwsService.XRAY,
  // IPアドレスタイプの指定
  ipAddressType: ec2.IpAddressType.DUALSTACK,  // DUALSTACK, IPV4, IPV6 から選択
});

// IPv6対応のサブネット
const subnet = new ec2.SubnetV2(this, 'Subnet', {
  vpc,
  availabilityZone: 'us-east-1a',
  ipv4CidrBlock: new ec2.IpCidr('10.0.1.0/24'),
  // IPv6の自動割り当て
  assignIpv6AddressOnCreation: true,  // サブネット内のインスタンスにIPv6アドレスを自動割り当て(デフォルト: false)
  ipv6CidrBlock: new ec2.IpCidr(Fn.select(0, Fn.cidr(
    Fn.select(0, vpc.ipv6CidrBlocks),
    256,
    '64',
  ))),
});

対応しているIPアドレスタイプ:

  • IPV4: IPv4のみ(デフォルト)
  • IPV6: IPv6のみ
  • DUALSTACK: IPv4とIPv6の両方

注意事項:

  • VPCエンドポイントサービスによって対応しているIPアドレスタイプが異なります
  • 詳細はAWSドキュメントを参照してください

関連PR: #33898

Neptune Alpha: エンジンバージョン v1.4.5.0 まで追加

Neptune Alphaモジュールで、エンジンバージョン v1.4.5.0 までがサポートされました。

関連PR: #33989

EC2 Alpha: ValidationErrorsの導入

EC2 Alphaモジュールで、型指定されていないエラーの代わりに ValidationError をスローするように改善されました。

関連PR: #34127

バグ修正

CloudFront: 未解決トークンのwebAclId検証を修正

webAclIdパラメータに未解決のトークンが渡された場合の検証エラーが修正されました。

関連PR: #34102

Core: Aspectの適用順序の修正

暗黙的なAspect適用が、カスタムAspect適用を上書きしない問題が修正されました。

関連PR: #34132

Custom Resources: パラメータ名のタイポ修正

Custom Resource設定の addLogRetentionLifetime パラメータのタイポが修正されました。

関連PR: #34090

ECS: FluentdLogDriverの非推奨オプション更新

FluentdLogDriverで、非推奨の asyncConnect オプションの代わりに async オプションが使用されるようになりました。

関連PR: #34059

S3 Deployment: 大きなファイルのメモリ使用量最適化

S3デプロイメントで、大きなファイルを扱う際のメモリ使用量が最適化されました。

関連PR: #34020

EC2 Alpha: NAT Gatewayの複数追加時の問題を修正

addNatGateway メソッドを使用して複数のNAT Gatewayを追加する際の問題が修正されました。

関連PR: #34094

EC2 Alpha: IPv6アドレス自動割り当てのデフォルト設定を更新

サブネットの assignIpv6AddressOnCreation プロパティのデフォルト設定が更新されました。

関連PR: #34116

破壊的変更(実験的機能)

CloudFormation: L1リソースの更新

CloudFormationリソース定義の更新により、一部のL1リソースで破壊的変更が発生しています:

  • backup: AWS::Backup::RestoreTestingPlan から ScheduleStatus プロパティが削除されました
  • eks: AWS::EKS::PodIdentityAssociation から DisableSessionTagsTargetRoleArn プロパティと ExternalId 属性が削除されました
  • neptune: AWS::Neptune::DBSubnetGroup から Id 属性が削除されました
  • rds: AWS::RDS::DBInstance から CertificateDetailsEndpoint プロパティが削除されました
  • redshiftserverless: AWS::RedshiftServerless::Workgroup から Workgroup.BaseCapacity 属性が削除されました

S3 Deployment: JSONエスケープ動作の変更

Source.jsonData() で自動的に行われていたJSONエスケープが、オプトイン方式になりました。JSONファイル内の特殊文字を扱うためにエスケープ機能を使用していた場合は、第3引数に { escape: true } を明示的に渡す必要があります。

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

// 以前(自動的にエスケープされていた)
s3deploy.Source.jsonData('data.json', { key: 'value with "quotes"' });

// v2.190.0以降(明示的にescapeオプションを指定)
s3deploy.Source.jsonData('data.json', { key: 'value with "quotes"' }, { escape: true });

関連PR: #33698

EC2 Alpha: NAT Gateway追加時の論理ID変更

addNatGateways メソッドで定義されたNAT Gatewayの論理IDが変更され、NAT GatewayとElastic IPが再作成されます。また、EIPのドメインが vpc に設定されるようになりました。

関連PR: #34094

まとめ

AWS CDK v2.190.0 は、API Gateway V2のアクセスロギング、RDSインスタンスのLookup機能、S3レプリケーション設定の柔軟化など、実用的な機能が多数追加されたリリースです。また、Alphaモジュールでは、IPv6/Dualstackサポートが追加され、最新のAWSサービス要件に対応できるようになりました。

一部のL1リソースとS3 Deploymentのエスケープ動作に破壊的変更が含まれているため、アップグレード時には影響範囲を確認してください。