概要
AWS CDK v2.196.0 では、API Gateway v2のDualStackドメイン名対応、ALBのLambdaターゲットグループでのマルチバリューヘッダー対応、Route 53のCIDRルーティング設定、Step Functionsの機能拡張など、複数のサービスで新機能が追加されました。また、多くのモジュールでエラーハンドリングが改善され、型付きのValidationErrorがスローされるようになりました。
新機能
API Gateway v2: Dualstackドメイン名のサポート
API Gateway v2のドメイン名で、IPv4とIPv6の両方をサポートするDualStack構成が設定可能になりました。
import * as apigatewayv2 from 'aws-cdk-lib/aws-apigatewayv2';
import * as acm from 'aws-cdk-lib/aws-certificatemanager';
const certificate = acm.Certificate.fromCertificateArn(
this,
'Certificate',
'arn:aws:acm:us-east-1:123456789012:certificate/xxxxx'
);
const domainName = new apigatewayv2.DomainName(this, 'DomainName', {
domainName: 'api.example.com',
certificate: certificate,
// Dualstack (IPv4 + IPv6) を有効化
ipAddressType: apigatewayv2.IpAddressType.DUALSTACK,
});
主なプロパティ:
ipAddressType: IP アドレスタイプを指定(IPV4、DUALSTACK)
Elastic Load Balancing v2: Lambdaターゲットグループのマルチバリューヘッダー対応
ALBのLambdaターゲットグループで、マルチバリューヘッダーを有効化できるようになりました。この機能により、同じヘッダー名で複数の値を持つHTTPヘッダーをLambda関数に渡すことができます。
import * as elbv2 from 'aws-cdk-lib/aws-elasticloadbalancingv2';
import * as lambda from 'aws-cdk-lib/aws-lambda';
const fn = lambda.Function.fromFunctionArn(
this,
'Function',
'arn:aws:lambda:us-east-1:123456789012:function:my-function'
);
const targetGroup = new elbv2.ApplicationTargetGroup(this, 'TargetGroup', {
vpc: vpc,
// Lambdaターゲットグループでマルチバリューヘッダーを有効化
multiValueHeadersEnabled: true,
targets: [new targets.LambdaTarget(fn)],
});
const listener = lb.addListener('Listener', {
port: 80,
defaultAction: elbv2.ListenerAction.forward([targetGroup]),
});
主なプロパティ:
multiValueHeadersEnabled: マルチバリューヘッダーを有効化(デフォルト:false)
Route 53: CIDRルーティング設定のサポート
Route 53のレコードセットで、IPベースのルーティングを設定するためのcidrRoutingConfigプロパティが追加されました。特定のIPアドレス範囲からのトラフィックを指定したエンドポイントにルーティングできます。
import * as route53 from 'aws-cdk-lib/aws-route53';
const hostedZone = route53.HostedZone.fromLookup(this, 'HostedZone', {
domainName: 'example.com',
});
// CIDRルーティングの設定
new route53.RecordSet(this, 'RecordSet', {
zone: hostedZone,
recordName: 'app',
recordType: route53.RecordType.A,
target: route53.RecordTarget.fromIpAddresses('192.0.2.1'),
// CIDR ルーティング設定
cidrRoutingConfig: {
collectionId: 'collection-id', // CIDR コレクション ID
locationName: 'location-name', // ロケーション名
},
});
主なプロパティ:
cidrRoutingConfig.collectionId: Route 53 CIDR コレクション IDcidrRoutingConfig.locationName: CIDR ロケーション名
S3 Tables: TableBucketのKMS暗号化サポート
S3 TablesのTableBucketで、KMSキーを使用したサーバーサイド暗号化がサポートされるようになりました。
import * as s3tables from '@aws-cdk/aws-s3tables-alpha';
import * as kms from 'aws-cdk-lib/aws-kms';
import * as iam from 'aws-cdk-lib/aws-iam';
// ユーザー定義のKMSキーを使用
const key = new kms.Key(this, 'UserKey', {});
const encryptedBucket = new s3tables.TableBucket(this, 'EncryptedTableBucket', {
tableBucketName: 'table-bucket-1',
encryption: s3tables.TableBucketEncryption.KMS, // KMS暗号化を指定
encryptionKey: key, // カスタムKMSキー
});
// grantRead で KMS キーへの復号化権限も自動付与
encryptedBucket.grantRead(
new iam.AccountPrincipal('123456789012'),
'*'
);
// KMSキーを自動作成する場合
const encryptedBucketAuto = new s3tables.TableBucket(this, 'EncryptedTableBucketAuto', {
tableBucketName: 'table-bucket-2',
encryption: s3tables.TableBucketEncryption.KMS, // キーを指定しないと自動作成
});
// S3マネージド暗号化を使用(デフォルト)
const encryptedBucketDefault = new s3tables.TableBucket(this, 'EncryptedTableBucketDefault', {
tableBucketName: 'table-bucket-3',
encryption: s3tables.TableBucketEncryption.S3_MANAGED,
});
主なプロパティ:
encryption: 暗号化タイプ(S3_MANAGEDまたはKMS)encryptionKey: KMS暗号化を使用する場合のカスタムKMSキー(省略時は自動作成)
付与される権限:
grantRead:kms:Decrypt権限が自動的に付与されますgrantWrite:kms:Decrypt,kms:GenerateDataKey*権限が自動的に付与されます
SES: カスタムトラッキングドメインのHTTPSポリシー設定
SESのConfiguration Setで、カスタムトラッキングドメインのHTTPSポリシーを設定できるようになりました。
import * as ses from 'aws-cdk-lib/aws-ses';
const configSet = new ses.ConfigurationSet(this, 'ConfigSet', {
customTrackingRedirectDomain: 'track.example.com',
// カスタムトラッキングドメインの HTTPS ポリシー
customTrackingHttpsPolicy: ses.HttpsPolicy.REQUIRE, // HTTPS必須
});
主なプロパティ:
customTrackingHttpsPolicy: HTTPSポリシー(REQUIREまたはOPTIONAL)
Step Functions: DistributedMapのResultWriterでJSONPath/JSONataバケット対応
Step FunctionsのDistributedMapで、ResultWriterのS3バケット指定にJSONPathやJSONataを使用できるようになりました。実行時の入力データから動的にバケット名を決定できます。
import * as sfn from 'aws-cdk-lib/aws-stepfunctions';
import * as s3 from 'aws-cdk-lib/aws-s3';
const resultBucket = s3.Bucket.fromBucketName(
this,
'ResultBucket',
'my-result-bucket'
);
const distributedMap = new sfn.DistributedMap(this, 'DistributedMap', {
itemsPath: '$.items',
resultWriter: new sfn.ResultWriter({
// JSONPath を使用して実行時にバケット名を決定
bucket: sfn.TaskInput.fromJsonPathAt('$.bucketName').value,
prefix: 'results',
}),
});
注意事項:
- JSONPath/JSONataを使用する場合、以下のS3権限にワイルドカード(
*)が必要です:s3:PutObjects3:GetObjects3:ListMultipartUploadPartss3:AbortMultipartUpload
Step Functions: Parallelステートへのパラメータ追加
Step FunctionsのParallelステートで、parametersプロパティがサポートされ、並列実行される各ブランチに渡すデータを変換できるようになりました。
import * as sfn from 'aws-cdk-lib/aws-stepfunctions';
const parallel = new sfn.Parallel(this, 'ParallelState', {
// Parallel ステートに渡すパラメータを設定
parameters: {
'ExecutionId.$': '$$.Execution.Id', // 実行IDを追加
'InputData.$': '$.data', // 入力データを変換
'Timestamp.$': '$$.State.EnteredTime', // タイムスタンプを追加
},
});
parallel.branch(
new sfn.Pass(this, 'Branch1')
);
parallel.branch(
new sfn.Pass(this, 'Branch2')
);
主なプロパティ:
parameters: 各ブランチに渡すパラメータ(JSONPath対応)
ECS Patterns: QueueProcessingFargateServiceのヘルスチェックGracePeriod対応
ECS PatternsのQueueProcessingFargateServiceで、ヘルスチェックのGracePeriodを設定できるようになりました。デプロイメントサーキットブレーカーを使用する際に有用です。
import * as ecsPatterns from 'aws-cdk-lib/aws-ecs-patterns';
import * as ecs from 'aws-cdk-lib/aws-ecs';
import { Duration } from 'aws-cdk-lib';
const queueService = new ecsPatterns.QueueProcessingFargateService(this, 'Service', {
image: ecs.ContainerImage.fromRegistry('amazon/amazon-ecs-sample'),
// ヘルスチェックの Grace Period を設定
healthCheckGracePeriod: Duration.seconds(60), // 60秒間はヘルスチェック失敗を許容
circuitBreaker: { rollback: true }, // サーキットブレーカーと併用
});
主なプロパティ:
healthCheckGracePeriod: ヘルスチェックの猶予期間(Duration)
CloudWatch Synthetics: Python 5.0 および 5.1 ランタイムのサポート
CloudWatch SyntheticsのCanaryで、Python Selenium 5.0および5.1ランタイムがサポートされました。
import * as synthetics from 'aws-cdk-lib/aws-synthetics';
const canary50 = new synthetics.Canary(this, 'Canary50', {
canaryName: 'my-canary-50',
// Python Selenium 5.0 ランタイム
runtime: synthetics.Runtime.SYNTHETICS_PYTHON_SELENIUM_5_0,
test: synthetics.Test.custom({
handler: 'index.handler',
code: synthetics.Code.fromAsset('canary'),
}),
schedule: synthetics.Schedule.rate(Duration.minutes(5)),
});
const canary51 = new synthetics.Canary(this, 'Canary51', {
canaryName: 'my-canary-51',
// Python Selenium 5.1 ランタイム
runtime: synthetics.Runtime.SYNTHETICS_PYTHON_SELENIUM_5_1,
test: synthetics.Test.custom({
handler: 'index.handler',
code: synthetics.Code.fromAsset('canary'),
}),
schedule: synthetics.Schedule.rate(Duration.minutes(5)),
});
サポートされるランタイム:
Runtime.SYNTHETICS_PYTHON_SELENIUM_5_0Runtime.SYNTHETICS_PYTHON_SELENIUM_5_1
RDS: 新しいAurora MySQLバージョンのサポート
Aurora MySQLの新しいバージョンが追加されました。
import * as rds from 'aws-cdk-lib/aws-rds';
const cluster = new rds.DatabaseCluster(this, 'Cluster', {
engine: rds.DatabaseClusterEngine.auroraMysql({
// 新しくサポートされたバージョン
version: rds.AuroraMysqlEngineVersion.VER_2_11_6,
// version: rds.AuroraMysqlEngineVersion.VER_2_12_5,
// version: rds.AuroraMysqlEngineVersion.VER_3_04_4,
}),
instanceProps: {
vpc,
},
});
追加されたバージョン:
- Aurora MySQL 2.11.6
- Aurora MySQL 2.12.5
- Aurora MySQL 3.04.4
エラーハンドリングの改善
以下のモジュールで、型付きのValidationErrorがスローされるようになりました:
- ECS
- EKS
- Elasticsearch
- EventBridge Targets
- Global Accelerator
- KMS
- OpenSearch Service
- Scheduler
- Service Discovery
- SNS Subscriptions
- Step Functions
これにより、エラーハンドリングがより型安全になり、エディタでのコード補完も改善されます。
Alphaモジュール
MSK: Kafka 3.9.x および 3.9.x Kraft のサポート
MSK Alphaモジュールで、Kafka 3.9.xバージョンとKraftモード(ZooKeeper不要)がサポートされました。
import * as msk from '@aws-cdk/aws-msk-alpha';
// Kafka 3.9.x (ZooKeeper モード)
const cluster39 = new msk.Cluster(this, 'Cluster39', {
clusterName: 'my-cluster',
kafkaVersion: msk.KafkaVersion.V3_9_0,
vpc,
});
// Kafka 3.9.x Kraft モード(ZooKeeper 不要)
const cluster39Kraft = new msk.Cluster(this, 'Cluster39Kraft', {
clusterName: 'my-cluster-kraft',
kafkaVersion: msk.KafkaVersion.V3_9_0_KRAFT,
vpc,
});
追加されたバージョン:
KafkaVersion.V3_9_0: Kafka 3.9.x (ZooKeeper モード)KafkaVersion.V3_9_0_KRAFT: Kafka 3.9.x Kraft モード
EventBridge Pipes Targets: SNSターゲットのサポート
EventBridge Pipes TargetsでSNSがサポートされました。DynamoDB StreamsやSQSなどのソースから直接SNSトピックにメッセージを送信できます。
import * as pipes from '@aws-cdk/aws-pipes-alpha';
import * as targets from '@aws-cdk/aws-pipes-targets-alpha';
import * as sources from '@aws-cdk/aws-pipes-sources-alpha';
import * as sqs from 'aws-cdk-lib/aws-sqs';
import * as sns from 'aws-cdk-lib/aws-sns';
const sourceQueue = new sqs.Queue(this, 'SourceQueue');
const targetTopic = new sns.Topic(this, 'TargetTopic');
// EventBridge Pipes で SQS から SNS へ
new pipes.Pipe(this, 'Pipe', {
source: new sources.SqsSource(sourceQueue),
// SNS ターゲット
target: new targets.SnsTarget(targetTopic, {
inputTransformation: pipes.InputTransformation.fromObject({
message: pipes.DynamicInput.fromEventPath('$.body'),
}),
}),
});
主なプロパティ:
inputTransformation: SNSに送信するメッセージの変換ルール
S3 Tables: カスタマーマネージドKMSキーによるサーバーサイド暗号化(Alpha)
S3 Tables Alphaモジュールでも、カスタマーマネージドKMSキーによるサーバーサイド暗号化がサポートされました(Stable版の機能と同様)。
バグ修正
CloudWatch Actions: Lambda権限の一意なプレフィックスID使用
CloudWatch AlarmのLambdaアクションで、Lambda権限に一意なプレフィックスIDが使用されるようになり、権限の競合が回避されます。
EKS: クラスター名の長さ制限チェック
EKSクラスター名が100文字の制限を超える場合、適切なエラーメッセージが表示されるようになりました。
S3: Block Public Access のデフォルト設定変更(フィーチャーフラグ)
フィーチャーフラグ配下で、S3バケットのblockPublicAccessがデフォルトで有効(すべてのパブリックアクセスをブロック)になりました。
import * as s3 from 'aws-cdk-lib/aws-s3';
// フィーチャーフラグが有効な場合、デフォルトでパブリックアクセスがブロックされる
const bucket = new s3.Bucket(this, 'Bucket', {
// blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, // デフォルト
});
// パブリックアクセスを許可する場合は明示的に設定
const publicBucket = new s3.Bucket(this, 'PublicBucket', {
blockPublicAccess: new s3.BlockPublicAccess({
blockPublicAcls: false,
blockPublicPolicy: false,
ignorePublicAcls: false,
restrictPublicBuckets: false,
}),
});
破壊的変更(実験的機能)
CloudFormation: L1リソースの更新
一部のL1リソースで、CloudFormationリソース定義の更新により破壊的変更が発生しています。各モジュールの詳細を確認してください。
Logs: DeliveryDestinationPolicyの型変更
AWS::Logs::DeliveryDestinationリソースのDeliveryDestinationPolicyプロパティの型が、JSONからDestinationPolicy型に変更されました。
まとめ
AWS CDK v2.196.0 は、API Gateway v2、Elastic Load Balancing、Route 53、Step Functions、ECS Patternsなど、複数のサービスで新機能が追加された充実したリリースとなりました。特に、API Gateway v2のDualStackサポート、ALBのマルチバリューヘッダー対応、Route 53のCIDRルーティング設定は、より柔軟なインフラ構築を可能にします。
また、多くのモジュールで型付きのValidationErrorがスローされるようになり、エラーハンドリングの改善も図られています。S3のBlock Public Accessがデフォルトで有効になる変更(フィーチャーフラグ配下)は、セキュリティ向上に貢献します。
Alphaモジュールでは、MSKのKafka 3.9.xサポートやEventBridge PipesのSNSターゲット対応など、新しいAWSサービス機能がいち早く利用可能になっています。
既存のCDKアプリケーションをアップグレードする際は、破壊的変更(特にL1リソースの更新)に注意し、十分なテストを実施してください。