概要
AWS CDK v2.201.0では、OpenSearchのセキュリティポリシー更新、CodePipelineのネイティブEC2デプロイサポート、RDS Aurora Serverless v2の自動一時停止機能、Syntheticsの安全な更新機能など、多くの新機能が追加されました。また、CDKコンテキストキャッシュへの追加キー対応やEKSのセルフマネージドアドオンのブートストラップ制御など、開発体験を向上させる機能も含まれています。
新機能
OpenSearch: TLS 1.2をデフォルトのセキュリティポリシーに更新
OpenSearchドメインのデフォルトTLSセキュリティポリシーがTLS 1.2に更新されました。
import * as opensearch from 'aws-cdk-lib/aws-opensearch';
const domain = new opensearch.Domain(this, 'Domain', {
version: opensearch.EngineVersion.OPENSEARCH_2_11,
// TLS 1.2がデフォルトで設定される
capacity: {
dataNodes: 1,
dataNodeInstanceType: 't3.small.search',
},
});
従来の動作を維持したい場合は、明示的にTLSセキュリティポリシーを指定することで変更できます。
AppConfig: Hosted Configurationでカスタマー管理キーをサポート
AppConfigのHosted Configurationで、KMS(カスタマー管理キー)による暗号化がサポートされました。
import * as appconfig from 'aws-cdk-lib/aws-appconfig';
import * as kms from 'aws-cdk-lib/aws-kms';
const kmsKey = new kms.Key(this, 'ConfigKey', {
description: 'KMS key for AppConfig hosted configuration',
});
const application = new appconfig.Application(this, 'MyApp');
const hostedConfig = new appconfig.HostedConfiguration(this, 'MyConfig', {
application,
content: appconfig.ConfigurationContent.fromInlineText('config data'),
// KMSキーを指定して暗号化
kmsKey: kmsKey,
});
CodePipeline: Amazon EC2へのネイティブデプロイサポート
CodePipelineから直接EC2インスタンスへデプロイできる新しいアクションが追加されました。
import * as codepipeline from 'aws-cdk-lib/aws-codepipeline';
import * as codepipeline_actions from 'aws-cdk-lib/aws-codepipeline-actions';
declare const pipeline: codepipeline.Pipeline;
declare const buildOutput: codepipeline.Artifact;
declare const myTargetGroup: elbv2.ApplicationTargetGroup;
pipeline.addStage({
stageName: 'Deploy',
actions: [
new codepipeline_actions.Ec2DeployAction({
actionName: 'EC2Deploy',
input: buildOutput,
// インスタンスタイプ: EC2またはSSM_MANAGED_NODE
instanceType: codepipeline_actions.Ec2InstanceType.EC2,
// タグでデプロイ対象インスタンスを指定
instanceTagKey: 'Environment',
instanceTagValue: 'Production',
// デプロイ仕様(インライン)
deploySpecifications: codepipeline_actions.Ec2DeploySpecifications.inline({
targetDirectory: '/var/www/html', // デプロイ先ディレクトリ(必須)
preScript: 'scripts/pre-deploy.sh', // デプロイ前スクリプト
postScript: 'scripts/post-deploy.sh', // デプロイ後スクリプト(必須)
}),
// ターゲットグループから自動的にデタッチ/アタッチ
targetGroups: [myTargetGroup],
// 並列デプロイ可能なインスタンス数
maxBatch: codepipeline_actions.Ec2MaxInstances.target(2), // 2インスタンスずつ
maxError: codepipeline_actions.Ec2MaxInstances.percent(50), // エラー許容率50%
}),
],
});
主な機能:
- EC2インスタンスまたはSystems Manager管理ノードへのデプロイ
- タグベースのターゲット選択
- インラインまたはファイルベースのデプロイ仕様
- ELBターゲットグループからの自動デタッチ/アタッチ
- バッチ処理とエラー許容の制御
Core: CDKコンテキスト値への追加キャッシュキーサポート
コンテキストプロバイダーのルックアップ時に追加のキャッシュキーを指定できるようになりました。これにより、同じパラメータでも異なるスコープごとに異なる値をキャッシュできます。
import * as ec2 from 'aws-cdk-lib/aws-ec2';
// インスタンス1: 現在の最新AMIを取得してキャッシュ
const instance1 = new ec2.Instance(this, 'Instance1', {
vpc,
instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MICRO),
machineImage: ec2.MachineImage.latestAmazonLinux2023({
cachedInContext: true,
// スコープごとに異なるAMIをキャッシュ(デフォルト: undefined)
additionalCacheKey: 'instance1',
}),
});
// インスタンス2: 別の最新AMIを取得してキャッシュ
const instance2 = new ec2.Instance(this, 'Instance2', {
vpc,
instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.SMALL),
machineImage: ec2.MachineImage.latestAmazonLinux2023({
cachedInContext: true,
// 異なるキャッシュキーで別のAMIをキャッシュ
additionalCacheKey: 'instance2',
}),
});
使用例:
- ステートフルなEC2インスタンスで、各インスタンスが独自のAMIバージョンを維持
- SSMパラメータルックアップで、スコープごとに異なる値をキャッシュ
- ECS最適化AMIのルックアップでキャッシュを細分化
Core: 型付きエラーのスロー
CDKのエラーが型付き(TypeScript)エラークラスになり、エラーハンドリングが改善されました。
EKS: セルフマネージドアドオンのブートストラップ制御
EKSクラスター作成時にデフォルトのネットワーキングアドオンを無効化できるようになりました。
import * as eks from 'aws-cdk-lib/aws-eks';
const cluster = new eks.Cluster(this, 'MyCluster', {
version: eks.KubernetesVersion.V1_31,
// セルフマネージドアドオンのブートストラップを無効化
// デフォルト: true(VPC CNI、kube-proxy、CoreDNSを自動インストール)
bootstrapSelfManagedAddons: false,
});
// カスタムアドオンを手動でインストール可能
cluster.addManifest('custom-cni', {
// カスタムCNIマニフェスト
});
このオプションをfalseに設定すると、以下のデフォルトアドオンがインストールされなくなります:
- VPC CNI
- kube-proxy
- CoreDNS
カスタムネットワーキングソリューションを使用する場合に有用です。
RDS: DatabaseInstanceFromSnapshotでクラスタースナップショットをサポート
DatabaseInstanceFromSnapshotでマルチAZ DBクラスタースナップショットからインスタンスを作成できるようになりました。
import * as rds from 'aws-cdk-lib/aws-rds';
declare const vpc: ec2.Vpc;
// クラスタースナップショットからインスタンスを作成
const instance = new rds.DatabaseInstanceFromSnapshot(this, 'Instance', {
vpc,
engine: rds.DatabaseInstanceEngine.postgres({
version: rds.PostgresEngineVersion.VER_15,
}),
// クラスタースナップショットIDを指定
// snapshotIdentifierとは排他的(どちらか一方のみ指定可能)
clusterSnapshotIdentifier: 'my-cluster-snapshot',
});
注意:
clusterSnapshotIdentifierとsnapshotIdentifierは排他的です- いずれか一方を必ず指定する必要があります
RDS: Aurora Serverless v2の自動一時停止設定をサポート
Aurora Serverless v2で、非アクティブ期間後の自動一時停止が設定できるようになりました。
import * as rds from 'aws-cdk-lib/aws-rds';
import * as cdk from 'aws-cdk-lib';
declare const vpc: ec2.Vpc;
const cluster = new rds.DatabaseCluster(this, 'Database', {
engine: rds.DatabaseClusterEngine.auroraPostgres({
version: rds.AuroraPostgresEngineVersion.VER_16_6,
}),
vpc,
writer: rds.ClusterInstance.serverlessV2('writer'),
serverlessV2MinCapacity: 0.5, // 最小ACU
serverlessV2MaxCapacity: 2, // 最大ACU
// 自動一時停止の設定
// 指定した期間非アクティブ後に自動的に一時停止
serverlessV2AutoPauseDuration: cdk.Duration.minutes(10), // 10分後に自動一時停止
});
設定可能な範囲:
- 最小: 5分
- 最大: 10,080分(7日間)
- デフォルト: 無効(自動一時停止なし)
メリット:
- コスト削減: 非アクティブ時の課金を削減
- 自動再開: 接続時に自動的に再開
Step Functions: MapステートのItemSelectorでJSONata式をサポート
Step FunctionsのMapステートで、ItemSelectorにJSONata式を使用できるようになりました。
import * as stepfunctions from 'aws-cdk-lib/aws-stepfunctions';
const map = new stepfunctions.Map(this, 'Map', {
maxConcurrency: 2,
itemsPath: '$.items',
// JSONata式を使用してアイテムを変換
itemSelector: {
'id.$': '$.id',
'name.$': '$.name',
// JSONata式で複雑な変換を実行
'computed.$': '% $.value * 2 %',
},
});
Synthetics: Playwright 2.0ランタイムのサポート
CloudWatch Syntheticsで、Playwright 2.0ランタイムがサポートされました。
import * as synthetics from 'aws-cdk-lib/aws-synthetics';
const canary = new synthetics.Canary(this, 'MyCanary', {
// Playwright 2.0ランタイムを使用
runtime: synthetics.Runtime.SYNTHETICS_NODEJS_PLAYWRIGHT_2_0,
test: synthetics.Test.custom({
code: synthetics.Code.fromAsset('canary'),
handler: 'index.handler',
}),
schedule: synthetics.Schedule.rate(cdk.Duration.minutes(5)),
});
Synthetics: 安全なCanary更新
Canaryの更新時に、本番適用前にドライランを実行する機能が追加されました。
import * as synthetics from 'aws-cdk-lib/aws-synthetics';
const canary = new synthetics.Canary(this, 'MyCanary', {
runtime: synthetics.Runtime.SYNTHETICS_NODEJS_PLAYWRIGHT_2_0,
test: synthetics.Test.custom({
code: synthetics.Code.fromAsset('canary'),
handler: 'index.handler',
}),
schedule: synthetics.Schedule.rate(cdk.Duration.minutes(5)),
// 安全な更新: 更新前にドライランを実行
// デフォルト: false
dryRunAndUpdate: true,
});
対応ランタイム:
- syn-nodejs-puppeteer-10.0以降
- syn-nodejs-playwright-2.0以降
- syn-python-selenium-5.1以降
動作:
- Canary更新時、まずドライランが実行される
- ドライランが成功すると、本番に適用される
- ドライランが失敗すると、更新は適用されない
Alphaモジュール
Bedrock: L2コンストラクトの追加
Amazon Bedrock用のL2コンストラクト(@aws-cdk/aws-bedrock-alpha)が追加されました。
import * as bedrock from '@aws-cdk/aws-bedrock-alpha';
// Bedrockエージェントの作成
const agent = new bedrock.Agent(this, 'MyAgent', {
foundationModel: bedrock.BedrockFoundationModel.ANTHROPIC_CLAUDE_V2_1,
instruction: 'You are a helpful assistant that answers questions about AWS.',
// エージェント削除時にリソースを強制削除
forceDelete: true,
});
// アクショングループの追加
agent.addActionGroup({
actionGroupName: 'UserActions',
description: 'Actions related to user management',
apiSchema: bedrock.ApiSchema.fromAsset('schema/api-schema.json'),
});
// エージェントエイリアスの作成
const alias = agent.addAlias({
aliasName: 'production',
description: 'Production alias',
});
提供される機能:
- Agent: Bedrockエージェントの作成と管理
- Agent Aliases: エージェントのバージョン管理
- Action Groups: Lambda関数やAPIスキーマの統合
- Agent Collaboration: 複数エージェントの連携
- Memory Configuration: エージェントのメモリ設定
- Prompt Overrides: カスタムプロンプトの設定
Amplify: ブランチのスキュー保護機能
Amplifyブランチで、デプロイ中のスキュー保護機能が設定できるようになりました。
import * as amplify from '@aws-cdk/aws-amplify-alpha';
declare const amplifyApp: amplify.App;
const branch = amplifyApp.addBranch('main', {
// スキュー保護を有効化
// デフォルト: undefined(無効)
skewProtection: true,
});
スキュー保護を有効にすると、デプロイ中に新旧のバージョンが混在することによる問題を防ぎます。
EC2: DSQLのインターフェースVPCエンドポイント追加
Amazon DSQL(Distributed SQL)用のインターフェースVPCエンドポイントがサポートされました。
import * as ec2 from '@aws-cdk/aws-ec2-alpha';
declare const vpc: ec2.Vpc;
// DSQLのVPCエンドポイント作成
vpc.addInterfaceEndpoint('DsqlEndpoint', {
service: ec2.InterfaceVpcEndpointAwsService.DSQL,
});
EC2: EBSボリュームの初期化レート設定
EBSボリュームの初期化レートを指定できるようになりました。
import * as ec2 from '@aws-cdk/aws-ec2-alpha';
const volume = new ec2.Volume(this, 'Volume', {
availabilityZone: 'us-east-1a',
size: cdk.Size.gibibytes(100),
// ボリューム初期化レート(IOPS)を指定
// デフォルト: undefined(標準レート)
volumeInitializationRate: 1000, // 1000 IOPS
});
初期化レートを指定することで、スナップショットからの復元やボリューム作成時のパフォーマンスを向上させることができます。
バグ修正
API Gateway: JsonSchema.additionalItemsプロパティの型を修正
JsonSchema.additionalItemsプロパティの型が正しく修正されました。
CloudFront: 権限付与時のワイルドカード使用
一部のCloudFront権限で、リソースARNにワイルドカードを使用するように修正されました。
Lambda: CDK管理ロググループ機能フラグのデフォルト動作修正
aws-lambda:useCdkManagedLogGroup機能フラグが未設定の場合、正しく無効化されるようになりました。
Logs: メトリックフィルターのディメンションマップ
メトリックフィルターから公開されるメトリックに、ディメンションマップが正しく含まれるようになりました。
OpenSearch: 既存統合テストの修正
OpenSearchサービスの既存統合テストが修正されました。
S3: noncurrentVersionTransitionsプロパティのJSDocタイポ修正
ドキュメント内のタイプミスが修正されました。
Region Info: エラーのエクスポート
region-info/lib/fact.tsでエラーが利用可能になるよう、エクスポートが追加されました。
まとめ
AWS CDK v2.201.0では、CodePipelineのEC2デプロイサポートやRDS Aurora Serverless v2の自動一時停止など、実用的な新機能が多数追加されました。AppConfigのKMS暗号化サポートやSyntheticsの安全な更新機能など、セキュリティと安定性の向上にも注力されています。
Alphaモジュールでは、Amazon BedrockのL2コンストラクトが大幅に拡充され、AIエージェントの構築がより簡単になりました。また、Amplifyのスキュー保護やEBSボリュームの初期化レート設定など、細かな改善も含まれています。
バグ修正では、Lambda機能フラグの動作修正やメトリックフィルターのディメンション問題など、既存機能の安定性が向上しています。