概要
AWS CDK v2.205.0 は、複数のモジュールにわたる新機能とバグ修正を含むリリースです。主な変更点として、Kinesis Firehose での S3 配信先のカスタムタイムゾーン設定サポート、CodeBuild プロジェクト間でのキャッシュ共有機能、RDS Aurora クラスタの fromLookup メソッドの追加、CloudWatch ダッシュボードでのクエリ言語指定などが含まれます。
新機能
Kinesis Firehose: S3 配信先のカスタムタイムゾーン設定
モジュール: @aws-cdk/aws-kinesisfirehose
Amazon Data Firehose で S3 オブジェクトプレフィックスに使用されるタイムスタンプのタイムゾーンを設定できるようになりました。これにより、ログやデータを地域のタイムゾーンに合わせて整理できます。
新しいプロパティ:
timeZone(string, optional): S3 オブジェクトプレフィックスのタイムスタンプに適用するタイムゾーン(例: “America/New_York”, “Asia/Tokyo”)
コード例:
import * as firehose from 'aws-cdk-lib/aws-kinesisfirehose';
import * as s3 from 'aws-cdk-lib/aws-s3';
const bucket = new s3.Bucket(this, 'MyBucket');
const deliveryStream = new firehose.DeliveryStream(this, 'Delivery Stream', {
destinations: [new destinations.S3Bucket(bucket, {
dataOutputPrefix: 'logs/year=!{timestamp:yyyy}/month=!{timestamp:MM}/day=!{timestamp:dd}/',
errorOutputPrefix: 'error-logs/!{firehose:error-output-type}/year=!{timestamp:yyyy}/month=!{timestamp:MM}/day=!{timestamp:dd}/',
// カスタムタイムゾーンを設定(例: 東京時間)
timeZone: 'Asia/Tokyo', // デフォルト: UTC
})],
});
参考リンク: Amazon Data Firehose タイムスタンプの名前空間
PR: #34738
CodeBuild: プロジェクト間でのキャッシュ共有
モジュール: @aws-cdk/aws-codebuild
CodeBuild プロジェクト間で S3 キャッシュを共有できるようになりました。cacheNamespace を使用することで、複数のプロジェクトが同じビルドキャッシュを利用し、ビルド時間を短縮できます。
新しいプロパティ:
cacheNamespace(string, optional): キャッシュの名前空間。同じ名前空間を持つプロジェクト間でキャッシュが共有されます
コード例:
import * as codebuild from 'aws-cdk-lib/aws-codebuild';
import * as s3 from 'aws-cdk-lib/aws-s3';
const cacheBucket = new s3.Bucket(this, 'CacheBucket');
// プロジェクト1: 共有キャッシュを使用
const project1 = new codebuild.Project(this, 'Project1', {
source: codebuild.Source.gitHub({
owner: 'owner',
repo: 'repo1',
}),
cache: codebuild.Cache.bucket(cacheBucket, {
// 共有キャッシュの名前空間を設定
cacheNamespace: 'shared-cache', // 同じ名前空間を使用するプロジェクト間でキャッシュが共有される
}),
});
// プロジェクト2: 同じキャッシュ名前空間を使用して、プロジェクト1とキャッシュを共有
const project2 = new codebuild.Project(this, 'Project2', {
source: codebuild.Source.gitHub({
owner: 'owner',
repo: 'repo2',
}),
cache: codebuild.Cache.bucket(cacheBucket, {
cacheNamespace: 'shared-cache', // プロジェクト1と同じ名前空間
}),
});
参考リンク: CodeBuild S3 キャッシュの共有
PR: #34257
CloudWatch Dashboards: クエリ言語の指定
モジュール: @aws-cdk/aws-cloudwatch
CloudWatch ダッシュボードのログクエリウィジェットで、クエリ言語(CloudWatch Logs Insights、OpenSearch PPL など)を明示的に指定できるようになりました。
新しいプロパティ:
queryLanguage(LogQueryLanguage, optional): ログクエリに使用する言語LogQueryLanguage.CWLI: CloudWatch Logs Insights(デフォルト)LogQueryLanguage.PPL: OpenSearch Pipe Processing Language
コード例:
import * as cloudwatch from 'aws-cdk-lib/aws-cloudwatch';
import * as logs from 'aws-cdk-lib/aws-logs';
const logGroup = logs.LogGroup.fromLogGroupName(this, 'LogGroup', '/aws/lambda/my-function');
const dashboard = new cloudwatch.Dashboard(this, 'Dashboard', {
dashboardName: 'MyDashboard',
});
// CloudWatch Logs Insights クエリを使用(デフォルト)
dashboard.addWidgets(new cloudwatch.LogQueryWidget({
logGroupNames: [logGroup.logGroupName],
queryLines: [
'fields @timestamp, @message',
'filter @message like /ERROR/',
'sort @timestamp desc',
],
// queryLanguage を明示的に指定(省略可能、デフォルトは CWLI)
queryLanguage: cloudwatch.LogQueryLanguage.CWLI,
}));
// OpenSearch PPL クエリを使用
dashboard.addWidgets(new cloudwatch.LogQueryWidget({
logGroupNames: [logGroup.logGroupName],
queryLines: [
'source = \'/aws/lambda/my-function\'',
'| where @message like "ERROR"',
'| sort @timestamp desc',
],
// OpenSearch PPL を指定
queryLanguage: cloudwatch.LogQueryLanguage.PPL,
}));
参考リンク: Amazon CloudWatch と Amazon OpenSearch Service の統合分析
PR: #34547
EC2: C8gn インスタンスクラスの追加
モジュール: @aws-cdk/aws-ec2
AWS Graviton4 プロセッサを搭載した C8gn インスタンスクラスがサポートされました。C8gn インスタンスは、ネットワーク集約型ワークロードに最適化されています。
新しいインスタンスタイプ:
InstanceClass.C8GN: C8gn インスタンスクラス- サポートされるサイズ: MEDIUM, LARGE, XLARGE, XLARGE2, XLARGE4, XLARGE8, XLARGE12, XLARGE16, XLARGE24, XLARGE48, METAL_24XL, METAL_48XL
コード例:
import * as ec2 from 'aws-cdk-lib/aws-ec2';
const vpc = new ec2.Vpc(this, 'VPC');
// C8gn インスタンスを使用
const instance = new ec2.Instance(this, 'Instance', {
vpc,
// C8gn.xlarge インスタンスタイプ(Graviton4 プロセッサ搭載)
instanceType: ec2.InstanceType.of(
ec2.InstanceClass.C8GN, // 新しいインスタンスクラス
ec2.InstanceSize.XLARGE
),
machineImage: ec2.MachineImage.latestAmazonLinux2023({
cpuType: ec2.AmazonLinuxCpuType.ARM_64, // ARM64 アーキテクチャ
}),
});
参考リンク: Amazon EC2 C8gn インスタンス発表
PR: #34866
EventBridge: API Destination の arnForPolicy 属性
モジュール: @aws-cdk/aws-events
EventBridge API Destination で、IAM ポリシーに使用するための ARN(arnForPolicy)が取得できるようになりました。この ARN を使用することで、より細かい権限管理が可能になります。
新しいプロパティ:
apiDestinationArnForPolicy(string): IAM ポリシーで使用するための API Destination ARN
コード例:
import * as events from 'aws-cdk-lib/aws-events';
import * as iam from 'aws-cdk-lib/aws-iam';
// API Destination の作成
const connection = new events.Connection(this, 'Connection', {
authorization: events.Authorization.basic('username', SecretValue.unsafePlainText('password')),
});
const destination = new events.ApiDestination(this, 'Destination', {
connection,
endpoint: 'https://api.example.com/webhook',
});
// IAM ポリシーで arnForPolicy を使用
const role = new iam.Role(this, 'Role', {
assumedBy: new iam.ServicePrincipal('events.amazonaws.com'),
});
role.addToPolicy(new iam.PolicyStatement({
actions: ['events:InvokeApiDestination'],
// IAM ポリシー用の ARN を使用
resources: [destination.apiDestinationArnForPolicy], // より細かい権限管理が可能
}));
// 既存の API Destination を参照する場合
const importedDestination = events.ApiDestination.fromApiDestinationAttributes(
this,
'ImportedDestination',
{
apiDestinationArn: 'arn:aws:events:us-east-1:123456789012:api-destination/my-destination',
// arnForPolicy も指定可能
apiDestinationArnForPolicy: 'arn:aws:events:us-east-1:123456789012:api-destination/my-destination/*',
}
);
PR: #34315
RDS: Aurora クラスタの fromLookup メソッド
モジュール: @aws-cdk/aws-rds
RDS DatabaseInstance に既にある fromLookup メソッドが、Aurora DatabaseCluster にも追加されました。これにより、既存の Aurora クラスタを識別子で検索して参照できます。
新しいメソッド:
DatabaseCluster.fromLookup(): クラスタ識別子を使用して既存の Aurora クラスタを検索
コード例:
import * as rds from 'aws-cdk-lib/aws-rds';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
// 既存の Aurora クラスタを識別子で検索
const cluster = rds.DatabaseCluster.fromLookup(this, 'Cluster', {
// クラスタ識別子を指定
clusterIdentifier: 'my-aurora-cluster',
});
// 接続情報を取得して使用
const vpc = ec2.Vpc.fromLookup(this, 'VPC', {
vpcId: cluster.vpc.vpcId,
});
// クラスタのエンドポイント情報にアクセス
console.log(cluster.clusterEndpoint.hostname);
console.log(cluster.clusterEndpoint.port);
console.log(cluster.clusterReadEndpoint.hostname);
// セキュリティグループの設定
cluster.connections.allowDefaultPortFromAnyIpv4('Allow database access');
注意事項:
fromLookupは CDK のコンテキストキャッシュを使用します- デプロイ時に実際のクラスタ情報を取得します
- 取得した情報は
cdk.context.jsonにキャッシュされます
PR: #34849
Synthetics: Canary の自動リトライ設定
モジュール: @aws-cdk/aws-synthetics
CloudWatch Synthetics Canary で、失敗時の自動リトライ回数を設定できるようになりました。これにより、一時的な障害による誤検知を減らすことができます。
新しいプロパティ:
maxRetries(number, optional): Canary 実行が失敗した場合の最大リトライ回数(0-2、デフォルト: 0)
コード例:
import * as synthetics from 'aws-cdk-lib/aws-synthetics';
const canary = new synthetics.Canary(this, 'MyCanary', {
schedule: synthetics.Schedule.rate(Duration.minutes(5)),
test: synthetics.Test.custom({
code: synthetics.Code.fromAsset(path.join(__dirname, 'canary')),
handler: 'index.handler',
}),
runtime: synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_7_0,
// Canary 失敗時の自動リトライを設定
maxRetries: 2, // 最大2回までリトライ(デフォルト: 0、最大: 2)
});
使用例:
maxRetries: 0: リトライなし(デフォルト)maxRetries: 1: 1回リトライ(合計2回実行)maxRetries: 2: 2回リトライ(合計3回実行)
PR: #34541
Synthetics: タグの自動レプリケーション
モジュール: @aws-cdk/aws-synthetics
CloudWatch Synthetics Canary に付与したタグを、Canary が作成する Lambda 関数に自動的にレプリケートできるようになりました。
新しいプロパティ:
resourcesToReplicateTags(ResourceToTag[], optional): タグをレプリケートするリソースのリストResourceToTag.LAMBDA_FUNCTION: Lambda 関数にタグをコピー
コード例:
import * as synthetics from 'aws-cdk-lib/aws-synthetics';
import * as cdk from 'aws-cdk-lib';
const canary = new synthetics.Canary(this, 'MyCanary', {
schedule: synthetics.Schedule.rate(Duration.minutes(5)),
test: synthetics.Test.custom({
code: synthetics.Code.fromAsset(path.join(__dirname, 'canary')),
handler: 'index.handler',
}),
runtime: synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_7_0,
// Lambda 関数にタグを自動レプリケート
resourcesToReplicateTags: [
synthetics.ResourceToTag.LAMBDA_FUNCTION, // Lambda 関数にタグをコピー
],
});
// Canary にタグを追加(これらのタグが Lambda 関数にもコピーされる)
cdk.Tags.of(canary).add('Environment', 'Production');
cdk.Tags.of(canary).add('Team', 'DevOps');
cdk.Tags.of(canary).add('CostCenter', 'Engineering');
メリット:
- タグ管理の簡素化: Canary にタグを追加するだけで、自動的に Lambda 関数にもタグが付与されます
- コスト配分の改善: タグベースのコスト配分が容易になります
- コンプライアンス: 組織のタグ付けポリシーを簡単に遵守できます
PR: #34830
Core: Cloud Assembly への機能フラグ情報の記録
モジュール: @aws-cdk/core
Cloud Assembly に機能フラグ(feature flags)の情報が記録されるようになりました。これにより、デプロイ時にどの機能フラグが使用されたかを追跡できます。
PR: #34919
バグ修正
Lambda: addToRolePolicy でのトークン解決の修正
モジュール: @aws-cdk/aws-lambda
Lambda 関数の addToRolePolicy メソッドで、トークンの解決に関する問題が修正されました。これにより、動的な値を含むポリシーステートメントが正しく処理されるようになりました。
PR: #34904
Pipelines: 同一ハッシュで異なる配信先のアセットの公開
モジュール: @aws-cdk/pipelines
CDK Pipelines で、同じハッシュを持つが異なる配信先に配置されるアセットが、それぞれ個別に公開されるように修正されました。
PR: #34790
Tags: スタックレベルでの excludeResourceTypes の修正(機能フラグ)
モジュール: @aws-cdk/core
スタックレベルで適用されたタグの excludeResourceTypes オプションが正しく動作しない問題が修正されました。この修正は機能フラグで保護されています。
PR: #31443
L1 リソースの変更
CloudFormation のリソース定義が更新され、以下の L1 リソースに破壊的な変更が含まれています:
削除された属性
以下のリソースから Id 属性が削除されました:
- aws-cdk-lib.aws_ec2.CfnTrafficMirrorFilterRule:
Id属性を削除 - aws-cdk-lib.aws_kinesis.CfnStreamConsumer:
Id属性を削除 - aws-cdk-lib.aws_neptune.CfnDBInstance:
Id属性を削除
これらの属性は、CloudFormation の実際の仕様により正確に反映させるために削除されました。L1 リソースを直接使用している場合は、影響を受ける可能性があります。
Alpha モジュール
v2.205.0-alpha.0 では、特に変更はありません。
まとめ
AWS CDK v2.205.0 は、多くの新機能とバグ修正を含む充実したリリースです。特に以下の機能が注目に値します:
- Kinesis Firehose: S3 配信先でのタイムゾーン設定により、地域に応じたデータ整理が可能に
- CodeBuild: キャッシュ共有機能により、複数プロジェクト間でのビルド効率が向上
- RDS: Aurora クラスタの
fromLookupにより、既存クラスタの参照が容易に - CloudWatch: ログクエリウィジェットで複数のクエリ言語をサポート
- Synthetics: Canary の自動リトライとタグレプリケーションにより、運用性が向上
- EC2: C8gn インスタンス(Graviton4 搭載)のサポート
L1 リソースの一部の属性が削除されているため、L1 リソースを直接使用している場合は影響を確認してください。