概要
AWS CDK v2.241.0では、コンストラクトに再利用可能な機能を追加するための新しい仕組み「CDK Mixins」がコアモジュールに導入されました。また、EKSがKubernetes 1.35をサポート、S3バケットで属性ベースアクセス制御(ABAC)が利用可能に、Auto Scaling Groupに削除保護機能が追加されるなど、多くの新機能が含まれています。
新機能
CDK Mixins の導入 (#37055)
CDK Mixinsは、コンストラクトに対して再利用可能な機能を追加するための新しい仕組みです。従来のAspectsとは異なり、Mixinsは適用対象のコンストラクトを細かく制御でき、特定のリソースタイプ、パスパターン、またはIDに基づいて選択的に機能を適用できます。
Mixinsの基本的な使用方法:
import { Mixins, ConstructSelector } from 'aws-cdk-lib';
// 特定のスコープにMixinを適用
Mixins.of(scope).apply(myMixin);
カスタムMixinの作成:
import { Mixin, IConstruct } from 'aws-cdk-lib';
class MyCustomMixin extends Mixin {
// このMixinが適用可能かどうかを判定
supports(construct: IConstruct): boolean {
// 特定のリソースタイプに対してのみtrueを返す
return construct instanceof lambda.Function;
}
// Mixinの実際の処理
applyTo(construct: IConstruct): void {
// ここでコンストラクトに対する処理を実装
const fn = construct as lambda.Function;
// 例: タグの追加、設定の変更など
}
}
ConstructSelectorによるターゲット指定:
import { Mixins, ConstructSelector } from 'aws-cdk-lib';
// リソースタイプで選択
const selector = ConstructSelector.byResourceType('AWS::Lambda::Function');
// パスパターンで選択
const pathSelector = ConstructSelector.byPath('**/MyStack/**');
// IDのglobパターンで選択
const idSelector = ConstructSelector.byId('MyFunction*');
エラーハンドリング:
// 少なくとも1つのコンストラクトにMixinが適用されることを要求
Mixins.of(scope).requireAny().apply(myMixin);
// すべての対象コンストラクトにMixinが適用されることを要求
Mixins.of(scope).requireAll().apply(myMixin);
Aspectsとの違い:
- Aspects: ツリー内のすべてのノードを訪問
- Mixins: 作者が
supports()で対象を細かく制御可能
Auto Scaling Group に削除保護を追加 (#36924)
Auto Scaling GroupにdeletionProtectionプロパティが追加され、誤った削除からAuto Scaling Groupを保護できるようになりました。
import * as autoscaling from 'aws-cdk-lib/aws-autoscaling';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
const asg = new autoscaling.AutoScalingGroup(this, 'ASG', {
vpc,
instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MICRO),
machineImage: ec2.MachineImage.latestAmazonLinux2023(),
// 削除保護を有効化
deletionProtection: true, // trueで削除保護を有効化(デフォルト: false)
});
削除保護が有効な場合、CloudFormationスタックの削除時にAuto Scaling Groupの削除がブロックされます。削除する場合は、先に削除保護を無効にする必要があります。
EKS: Kubernetes 1.35 サポート (#37065)
Amazon EKSでKubernetes 1.35がサポートされました。この更新にはkubectl-v35@2.0.0レイヤー(kubectl 1.35.0とHelm 4.1.0を含む)が使用されます。
import * as eks from 'aws-cdk-lib/aws-eks';
import { KubectlV35Layer } from '@aws-cdk/lambda-layer-kubectl-v35';
// Kubernetes 1.35クラスターの作成
const cluster = new eks.Cluster(this, 'MyCluster', {
version: eks.KubernetesVersion.V1_35, // Kubernetes 1.35を指定
kubectlLayer: new KubectlV35Layer(this, 'KubectlLayer'),
});
aws-eks-v2モジュールでの使用:
import * as eks from 'aws-cdk-lib/aws-eks-v2';
import { KubectlV35Layer } from '@aws-cdk/lambda-layer-kubectl-v35';
const cluster = new eks.Cluster(this, 'MyCluster', {
version: eks.KubernetesVersion.V1_35, // Kubernetes 1.35を指定
kubectlProviderOptions: {
kubectlLayer: new KubectlV35Layer(this, 'KubectlLayer'),
},
});
S3: 属性ベースアクセス制御(ABAC)のサポート (#36229)
S3バケットで属性ベースアクセス制御(ABAC)が利用可能になりました。ABACを使用すると、バケットタグに基づいてアクセス制御ポリシーを定義できます。
import * as s3 from 'aws-cdk-lib/aws-s3';
const bucket = new s3.Bucket(this, 'MyBucket', {
// 属性ベースアクセス制御(ABAC)を有効化
abacStatus: s3.AbacStatus.ENABLED, // ABACを有効化(デフォルト: DISABLED)
});
AbacStatusの値:
AbacStatus.ENABLED: ABACを有効化AbacStatus.DISABLED: ABACを無効化(デフォルト)
ABACを有効にすると、バケットのタグを条件としたIAMポリシーを使用してアクセス制御が可能になります。詳細はAWS S3ドキュメントを参照してください。
L1 CloudFormationリソース定義の更新 (#37103)
最新のAWS CloudFormationリソース仕様に基づいてL1コンストラクトが更新されました。
バグ修正
minimatchのReDoS脆弱性を修正 (#37127)
minimatchパッケージがバージョン^10.2.3にアップグレードされ、2つの高深刻度ReDoS(Regular Expression Denial of Service)脆弱性が解消されました:
- GHSA-7r86-cg39-jmmj:
matchOne()での複数の非隣接GLOBSTARセグメントによる組み合わせ爆発 - GHSA-23c5-xmqv-rm74: ネストされた
*()extglobによる破滅的バックトラッキング
この修正により、npm auditでフラグが立っていた脆弱性が解消されます。
DynamoDB: マルチアカウントグローバルテーブルのSIDを修正 (#37057)
マルチアカウントグローバルテーブルのレプリカ関連付け権限で使用されるSID(Statement ID)に不正な文字(ハイフン)が含まれていた問題が修正されました。
修正前の問題:
AllowMultiAccountReplicaAssociation-490940935144
SIDにハイフンが含まれていたため、DynamoDBがエラーを返していました。
修正後:
AllowMultiAccountReplicaAssociation490940935144
SIDからハイフンが除去され、ASCII大文字・小文字・数字のみで構成されるようになりました。
この修正により、マルチアカウントグローバルテーブルの作成が正常に動作するようになります。
RDS: エンジンバージョンの非推奨タグを修正 (#37080)
PR #36937で誤って非推奨とマークされていた多くのRDSエンジンバージョンが修正されました。AWS RDS APIの実際のステータスに基づいて、非推奨タグが正確に設定されています。
主な変更内容:
| エンジン | 修正内容 |
|---|---|
| PostgreSQL | 13.15-16, 13.18, 13.20-22, 14.12-13等の誤った非推奨を解除。14.21, 15.16, 16.12, 17.8, 18.2を追加 |
| Aurora MySQL | 3.04.6, 3.10.3の誤った非推奨を解除。3.12.0を追加 |
| Aurora PostgreSQL | 13.16, 13.18等の誤った非推奨を解除。16.10-limitless, 16.11-limitlessを追加 |
| MariaDB | 10.5.25, 10.5.26等に不足していた非推奨タグを追加。10.11.16, 11.4.10, 11.8.6を追加 |
| SQL Server | 15.00.4455.2, 16.00.4225.2等を追加 |
また、MariaDB 10.11.7の非推奨メッセージの誤記(「10.11.8」と記載されていた)も修正されました。
破壊的変更
CodeDeploy: DeploymentGroupのId属性が削除 (#37103)
L1リソースの更新により、AWS::CodeDeploy::DeploymentGroupのId属性が削除されました。
影響:
CfnDeploymentGroup.attrIdを使用していた場合、このプロパティが利用できなくなります
対応方法:
- 代替として
Fn::RefまたはCfnDeploymentGroup.refを使用してDeploymentGroup名を取得できます
Alphaモジュール (2.241.0-alpha.0)
mixins-preview: Vended Logs MixinにrecordFieldsとoutputFormatを追加 (#37042)
Vended Logs MixinにrecordFieldsとoutputFormatのサポートが追加されました。
outputFormat:
- ログの出力フォーマットを指定可能
- 配信先やログタイプごとに異なるフォーマットオプションが利用可能
- 注:
toDestination()とtoXRay()ではoutputFormatは未サポート
recordFields:
- 記録するフィールドを配列で指定
- 必須フィールドは内部的に自動で追加される
import { VendedLogsMixin } from '@aws-cdk/mixins-preview';
// outputFormatとrecordFieldsを指定した例
const mixin = new VendedLogsMixin({
// ログ配信の設定
toS3: {
bucket: myBucket,
outputFormat: 'parquet', // 出力フォーマット(json, plain, parquet等)
recordFields: [
'timestamp',
'message',
// 必要なフィールドを指定
],
},
});
mixins-preview: クロスアカウント配信先のサポート (#36827)
Vended Logsでクロスアカウントのログ配信がサポートされました。S3バケットとFirehose Delivery Streamをクロスアカウントの配信先として使用できます。
import { S3Destination, FirehoseDestination } from '@aws-cdk/mixins-preview';
// クロスアカウントS3配信先の設定
const s3Destination = new S3Destination({
bucket: crossAccountBucket,
// クロスアカウント配信に必要な権限は自動的に設定される
});
// クロスアカウントFirehose配信先の設定
const firehoseDestination = new FirehoseDestination({
deliveryStream: crossAccountDeliveryStream,
});
注意:
- CloudWatch Log GroupsとX-Rayはクロスアカウント配信をサポートしていません
- クロスアカウント配信に必要なIAM権限は自動的に設定されます
まとめ
AWS CDK v2.241.0は、CDK Mixinsの導入と多数の新機能追加が特徴的なリリースです。
主なポイント:
- CDK Mixins: コンストラクトに再利用可能な機能を追加する新しい仕組みがコアに導入
- EKS 1.35サポート: 最新のKubernetesバージョンに対応(kubectl 1.35.0、Helm 4.1.0)
- S3 ABAC: 属性ベースアクセス制御でタグに基づくアクセス制御が可能に
- Auto Scaling削除保護: 誤った削除からAuto Scaling Groupを保護
- セキュリティ修正: minimatchのReDoS脆弱性が解消
破壊的変更に注意:
AWS::CodeDeploy::DeploymentGroupのId属性が削除されました。attrIdを使用していた場合はrefへの移行が必要です。