概要
AWS CDK v2.182.0では、Auto Scalingの複数ヘルスチェックタイプ対応、ECSマネージドストレージの暗号化、RDSのレプリケーションソース識別子サポートなど、複数のサービスで重要な機能追加が行われました。また、OpenSearch ServiceのNodeOptions対応、Inspector L2インターフェースの追加、assertionsモジュールの改善も含まれています。
新機能
Auto Scaling: 複数ヘルスチェックタイプのサポート
Auto Scalingグループで複数のヘルスチェックタイプを同時に指定できるようになりました。従来のEC2とELBに加え、EBSとVPC_LATTICEタイプが追加されました。
新しいHealthChecksクラスを使用することで、複数のヘルスチェックタイプを組み合わせて設定できます。
import * as autoscaling from 'aws-cdk-lib/aws-autoscaling';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
const autoScalingGroup = new autoscaling.AutoScalingGroup(this, 'ASG', {
vpc,
instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MICRO),
machineImage: ec2.MachineImage.latestAmazonLinux2(),
// 新機能: 複数のヘルスチェックタイプを指定可能
healthChecks: autoscaling.HealthChecks.of(
autoscaling.HealthCheckType.ELB, // ELBヘルスチェック
autoscaling.HealthCheckType.EBS, // EBSボリュームヘルスチェック(新規)
),
healthCheckGracePeriod: Duration.minutes(5),
});
従来のhealthCheckプロパティは非推奨となりました。新規プロジェクトではhealthChecksを使用してください。
関連PR: #31286
ECS: マネージドストレージの暗号化サポート
ECSクラスターのマネージドストレージをKMSキーで暗号化できるようになりました。セキュリティ要件が厳しい環境で、ECSクラスターのデータ保護を強化できます。
import * as ecs from 'aws-cdk-lib/aws-ecs';
import * as kms from 'aws-cdk-lib/aws-kms';
const kmsKey = new kms.Key(this, 'EcsStorageKey', {
description: 'KMS key for ECS managed storage encryption',
enableKeyRotation: true, // キーローテーションを有効化
});
const cluster = new ecs.Cluster(this, 'Cluster', {
vpc,
// 新機能: マネージドストレージの暗号化設定
managedStorageConfiguration: {
kmsKey: kmsKey, // カスタマーマネージドKMSキー
},
});
関連PR: #33535
RDS: レプリケーションソース識別子のサポート
DatabaseClusterでレプリケーションソース識別子を指定できるようになり、リードレプリカやクロスリージョンレプリケーションの設定が簡単になりました。
import * as rds from 'aws-cdk-lib/aws-rds';
// レプリケーションソースのARNを指定してレプリカクラスターを作成
const replicaCluster = new rds.DatabaseCluster(this, 'ReplicaCluster', {
engine: rds.DatabaseClusterEngine.auroraMysql({
version: rds.AuroraMysqlEngineVersion.VER_3_04_0,
}),
vpc,
// 新機能: レプリケーションソース識別子
replicationSourceIdentifier: 'arn:aws:rds:us-east-1:123456789012:cluster:source-cluster',
// 注意: replicationSourceIdentifierを使用する場合、credentialsは指定できません
// credentials: ..., // エラーになります
});
注意事項: replicationSourceIdentifierを指定する場合、credentialsプロパティは使用できません。レプリカはソースクラスターの認証情報を継承します。
関連PR: #33471
OpenSearch Service: NodeOptionsのサポート
OpenSearchドメインでnodeOptionsを設定できるようになりました。コーディネーターノードの構成など、より細かいノード設定が可能になります。
import * as opensearch from 'aws-cdk-lib/aws-opensearchservice';
const domain = new opensearch.Domain(this, 'Domain', {
version: opensearch.EngineVersion.OPENSEARCH_2_11,
vpc,
// 新機能: ノードオプションの設定
nodeOptions: {
dedicatedMasterEnabled: true, // 専用マスターノードを有効化
dedicatedMasterInstanceType: 'r6g.large.search',
dedicatedMasterCount: 3, // マスターノード数
warmEnabled: true, // ウォームノードを有効化
warmInstanceType: 'ultrawarm1.medium.search',
warmCount: 2, // ウォームノード数
coldStorageEnabled: true, // コールドストレージを有効化
},
capacity: {
dataNodes: 2,
dataNodeInstanceType: 'r6g.large.search',
},
});
関連PR: #32936
Inspector: L2インターフェースの追加
Amazon Inspector評価テンプレートのL2インターフェースIAssessmentTemplateが追加されました。これにより、他のL2コンストラクト(特にscheduler-targets-alpha)でInspector評価テンプレートをより適切に扱えるようになります。
import * as inspector from 'aws-cdk-lib/aws-inspector';
import * as cdk from 'aws-cdk-lib';
// L1からL2インターフェースを取得
const cfnTemplate = new inspector.CfnAssessmentTemplate(this, 'Template', {
assessmentTargetArn: 'arn:aws:inspector:us-east-1:123456789012:target/0-abc123',
durationInSeconds: 3600,
rulesPackageArns: [
'arn:aws:inspector:us-east-1:316112463485:rulespackage/0-gEjTy7T7',
],
});
// 新機能: L1をL2インターフェースに変換
const template: inspector.IAssessmentTemplate =
inspector.AssessmentTemplate.fromCfnAssessmentTemplate(cfnTemplate);
// L2インターフェースとして使用可能
const templateArn = template.assessmentTemplateArn;
この機能により、EventBridge Schedulerのターゲットなど、L2インターフェースを期待する他のコンストラクトとの統合が改善されます。
関連PR: #33614
Assertions: getResourceIdメソッドの追加
テストアサーションモジュールにgetResourceIdメソッドが追加され、CloudFormationテンプレート内のリソースIDを簡単に取得できるようになりました。
import { Template } from 'aws-cdk-lib/assertions';
const template = Template.fromStack(stack);
// 従来の方法(冗長)
const resources = template.findResources('AWS::S3::Bucket', {
Properties: {
BucketName: 'my-bucket',
}
});
const keys = Object.keys(resources);
const bucket = keys[0]; // エラーハンドリングが必要
// 新機能: getResourceIdメソッド(シンプル)
const bucket = template.getResourceId('AWS::S3::Bucket', {
Properties: {
BucketName: 'my-bucket',
}
});
// リソース間の参照を検証
template.hasResourceProperties('AWS::S3::BucketPolicy', {
Bucket: {
Ref: bucket, // 取得したリソースIDを使用
},
PolicyDocument: {
// ...
},
});
getResourceIdは以下の場合にエラーをスローします:
- リソースが見つからない場合
- 複数のリソースがマッチする場合(一意でない)
関連PR: #33521
その他の更新
- L1 CloudFormationリソース定義の更新 (#33676)
- cloud-assembly-schemaをv40にアップグレード (#33620)
Alphaモジュール (2.182.0-alpha.0)
Pipes: カスタマーマネージドKMSキーのサポート
EventBridge Pipesで、カスタマーマネージドKMSキーを使用したパイプデータの暗号化がサポートされました。Amazon管理キーの代わりに独自のKMSキーを使用できます。
import * as pipes from '@aws-cdk/aws-pipes-alpha';
import * as kms from 'aws-cdk-lib/aws-kms';
import * as sqs from 'aws-cdk-lib/aws-sqs';
const kmsKey = new kms.Key(this, 'PipeKey', {
description: 'KMS key for EventBridge Pipes encryption',
enableKeyRotation: true, // キーローテーションを有効化
});
const sourceQueue = new sqs.Queue(this, 'SourceQueue');
const targetQueue = new sqs.Queue(this, 'TargetQueue');
const pipe = new pipes.Pipe(this, 'Pipe', {
source: new SqsSource(sourceQueue),
target: new SqsTarget(targetQueue),
// 新機能: カスタマーマネージドKMSキーの指定
kmsKey: kmsKey, // パイプデータの暗号化に使用
});
KMSキーを指定すると、必要なキーポリシーが自動的に追加され、Pipesサービスがキーにアクセスできるようになります。
関連PR: #33546
その他のAlpha修正
- cognito-identitypool-alpha: スタックが正しくデプロイされない問題を修正 (#33609)
- eks-v2-alpha: Fargateクラスターが削除できない問題を修正 (#33573)
- scheduler-targets: Kinesis Firehoseインポートの更新 (#33615)
バグ修正
API Gateway: endpointConfigurationの移動
endpointConfigurationプロパティがRestApiBasePropsに移動され、すべてのREST APIタイプで一貫して使用できるようになりました。
関連PR: #33514
CloudWatch: 警告メッセージの正規表現を更新
CloudWatch:Mah:UnknownIdentifier警告を防ぐための正規表現が更新されました。
関連PR: #33592
IAM: 組織IDパターン検証の追加
組織IDの形式検証が追加され、無効な形式の検出が改善されました。
関連PR: #33555
Lambda Node.js: Bunのロックファイル要件を緩和
Bunパッケージマネージャー使用時に、フリーズされたロックファイルが不要になりました。
関連PR: #32908
S3: 複数のレプリケーションソースバケットのデプロイ問題を修正
フィーチャーフラグ使用時に、複数のレプリケーションソースバケットをデプロイできない問題が修正されました。
関連PR: #33360
SNS: SSEトピックのgrantPublishにKMS権限を追加
SSE(サーバー側暗号化)が有効なSNSトピックでgrantPublishを呼び出した際に、KMS権限が自動的に付与されるようになりました。
import * as sns from 'aws-cdk-lib/aws-sns';
import * as kms from 'aws-cdk-lib/aws-kms';
import * as iam from 'aws-cdk-lib/aws-iam';
const kmsKey = new kms.Key(this, 'TopicKey');
const topic = new sns.Topic(this, 'Topic', {
masterKey: kmsKey, // SSEを有効化
});
const publisher = new iam.User(this, 'Publisher');
// バグ修正: KMS権限も自動的に付与されるようになりました
topic.grantPublish(publisher);
関連PR: #32794
まとめ
AWS CDK v2.182.0は、Auto Scaling、ECS、RDS、OpenSearch Serviceなど、複数のサービスで重要な機能拡張が行われたリリースです。特に、Auto Scalingの複数ヘルスチェックタイプサポートとECSマネージドストレージの暗号化は、本番環境での柔軟性とセキュリティを向上させる重要な機能です。
また、Inspector L2インターフェースの追加により、EventBridge Schedulerなど他のサービスとの統合が改善され、アサーションモジュールの改善によりテストの記述が簡単になりました。
Alphaモジュールでは、EventBridge PipesでのカスタマーマネージドKMSキーサポートが追加され、データ暗号化の制御が強化されました。
これらの新機能により、より安全で柔軟なインフラストラクチャをCDKで構築できるようになりました。