概要
AWS CDK v2.194.0では、L1 CloudFormationリソース定義の大規模な更新が行われ、CloudFront、ECR、RDS、API Gatewayなど多数のAWSサービスで新しいリソースやプロパティが追加されました。また、EventBridgeモジュールでは、型安全性を向上させるためにValidationErrorsが導入され、エラーハンドリングが改善されています。
新機能
L1 CloudFormationリソース定義の更新 (#34278)
このリリースでは、@aws-cdk/aws-service-spec の最新変更に基づき、多数のL1 CloudFormationリソースが更新されました。主な変更点は以下の通りです:
CloudFront: 新しいリソースの追加
AWS::CloudFront::ConnectionGroup
CloudFrontに新しい接続グループリソースが追加されました。このリソースは、CloudFrontディストリビューションの接続設定を管理するために使用されます。
import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
// ConnectionGroupの作成例(L1コンストラクト)
const connectionGroup = new cloudfront.CfnConnectionGroup(this, 'ConnectionGroup', {
name: 'my-connection-group', // 接続グループ名(必須、変更不可)
enabled: true, // 接続グループを有効化
ipv6Enabled: true, // IPv6サポートを有効化
anycastIpListId: 'anycast-ip-list-id', // AnycastIPリストID(オプション)
tags: [{ // タグ(オプション)
key: 'Environment',
value: 'Production',
}],
});
// 接続グループのIDとARNを参照
const connectionGroupId = connectionGroup.attrId;
const connectionGroupArn = connectionGroup.attrArn;
主要な属性:
id: 接続グループのIDarn: 接続グループのARNroutingEndpoint: ルーティングエンドポイントstatus: 接続グループのステータスisDefault: デフォルト接続グループかどうか
AWS::CloudFront::DistributionTenant
CloudFrontディストリビューションのテナント設定を管理する新しいリソースです。マルチテナント環境でディストリビューションをカスタマイズする際に使用します。
// DistributionTenantの作成例(L1コンストラクト)
const distributionTenant = new cloudfront.CfnDistributionTenant(this, 'Tenant', {
distributionId: 'E1234EXAMPLE', // 関連付けるディストリビューションID(必須)
name: 'tenant-name', // テナント名(必須、変更不可)
enabled: true, // テナントを有効化
domains: [ // ドメイン名のリスト(必須)
'example.com',
'www.example.com',
],
connectionGroupId: connectionGroup.attrId, // 接続グループID(オプション)
customizations: { // カスタマイズ設定(オプション)
certificate: {
arn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',
},
webAcl: {
action: 'ALLOW', // WAF アクションタイプ
arn: 'arn:aws:wafv2:us-east-1:123456789012:global/webacl/example/a1b2c3d4',
},
geoRestrictions: {
restrictionType: 'whitelist', // 'whitelist' または 'blacklist'
locations: ['US', 'CA', 'GB'], // 国コードのリスト
},
},
parameters: [ // パラメータのリスト(オプション)
{
name: 'param1',
value: 'value1',
},
],
managedCertificateRequest: { // マネージド証明書リクエスト(変更不可)
primaryDomainName: 'example.com',
validationTokenHost: 'validation.example.com',
certificateTransparencyLoggingPreference: 'ENABLED',
},
tags: [{
key: 'Tenant',
value: 'Customer1',
}],
});
// テナントの属性を参照
const tenantId = distributionTenant.attrId;
const tenantStatus = distributionTenant.attrStatus;
const domainResults = distributionTenant.attrDomainResults; // ドメイン検証結果
Distribution: 接続モードとテナント設定のサポート
既存の AWS::CloudFront::Distribution リソースに、新しい接続モードとテナント設定が追加されました。
const distribution = new cloudfront.CfnDistribution(this, 'Distribution', {
distributionConfig: {
enabled: true,
// ... 他の設定 ...
// 新機能: 接続モード
connectionMode: 'DIRECT', // 接続モード(オプション)
// 新機能: テナント設定
tenantConfig: {
parameterDefinitions: [ // パラメータ定義(オプション)
{
name: 'cacheTtl',
definition: {
stringSchema: {
comment: 'キャッシュTTLの設定',
defaultValue: '3600', // デフォルト値
required: false, // 必須かどうか
},
},
},
],
},
},
});
ECR: レジストリスキャン設定の追加
Amazon ECRに新しいレジストリスキャン設定リソースが追加されました。
AWS::ECR::RegistryScanningConfiguration
ECRレジストリ全体のイメージスキャン設定を管理できます。
import * as ecr from 'aws-cdk-lib/aws-ecr';
// レジストリスキャン設定の作成例(L1コンストラクト)
const scanningConfig = new ecr.CfnRegistryScanningConfiguration(this, 'ScanConfig', {
scanType: 'ENHANCED', // スキャンタイプ(必須): 'BASIC' または 'ENHANCED'
rules: [ // スキャンルール(必須)
{
repositoryFilters: [ // リポジトリフィルター
{
filter: 'prod-*', // フィルターパターン(必須)
filterType: 'WILDCARD', // フィルタータイプ(必須): 'WILDCARD'
},
],
scanFrequency: 'SCAN_ON_PUSH', // スキャン頻度(必須): 'SCAN_ON_PUSH', 'CONTINUOUS_SCAN', 'MANUAL'
},
{
repositoryFilters: [
{
filter: 'test-*',
filterType: 'WILDCARD',
},
],
scanFrequency: 'CONTINUOUS_SCAN', // 継続的なスキャン
},
],
});
// レジストリIDを参照
const registryId = scanningConfig.attrRegistryId;
RDS: Database Insights Mode の追加
Amazon RDS DBインスタンスに新しい DatabaseInsightsMode プロパティが追加されました。
import * as rds from 'aws-cdk-lib/aws-rds';
// L2コンストラクトでの使用例は今後のバージョンでサポート予定
// L1コンストラクトでの設定例
const dbInstance = new rds.CfnDBInstance(this, 'Database', {
engine: 'postgres',
dbInstanceClass: 'db.t3.micro',
allocatedStorage: '20',
// 新機能: Database Insights Mode
databaseInsightsMode: 'STANDARD', // 'STANDARD' または 'ADVANCED'(オプション)
// ... 他の設定 ...
});
// Database Insights Modeの値を参照
const insightsMode = dbInstance.attrDatabaseInsightsMode;
AppSync: Channel Namespace のハンドラー設定
AWS AppSync の Channel Namespace リソースに、新しいハンドラー設定が追加されました。
import * as appsync from 'aws-cdk-lib/aws-appsync';
const channelNamespace = new appsync.CfnChannelNamespace(this, 'Namespace', {
apiId: 'api-id',
name: 'namespace-name',
// 新機能: ハンドラー設定
handlerConfigs: {
onPublish: { // パブリッシュ時のハンドラー(オプション)
behavior: 'ALLOW', // 'ALLOW' または 'DENY'(必須)
integration: {
dataSourceName: 'MyDataSource', // データソース名(必須)
lambdaConfig: { // Lambda設定(オプション)
invokeType: 'REQUEST_RESPONSE', // 'REQUEST_RESPONSE' または 'EVENT'(必須)
},
},
},
onSubscribe: { // サブスクライブ時のハンドラー(オプション)
behavior: 'ALLOW',
integration: {
dataSourceName: 'MyDataSource',
lambdaConfig: {
invokeType: 'REQUEST_RESPONSE',
},
},
},
},
});
その他の主要な更新
- Auto Scaling: AutoScalingGroupに
autoScalingGroupARN属性が追加されました - Route 53 Resolver: ResolverRuleに
delegationRecordプロパティが追加されました - MediaPackage V2: HLS Manifestに
urlEncodeChildManifestオプションが追加されました - Redshift Serverless: Workgroupに
baseCapacityとmaxCapacity属性が追加されました
詳細なリソース定義の変更については、PR #34278を参照してください。
EventBridge: ValidationErrorsの導入 (#34316)
EventBridgeモジュール(aws-events)で、型安全なエラーハンドリングが導入されました。従来の型なしErrorの代わりに、ValidationErrorクラスを使用するようになりました。
変更内容
以下のクラスとメソッドで、エラーハンドリングが改善されています:
ApiDestination: API宛先の検証Connection: 接続設定の検証EventBus: イベントバスの検証EventPattern: イベントパターンの検証Input: 入力変換の検証Rule: ルールの検証Schedule: スケジュール式の検証
コード例
import * as events from 'aws-cdk-lib/aws-events';
import { ValidationError } from 'aws-cdk-lib/core';
// 以前: 型なしErrorがスローされていた
// 現在: ValidationErrorがスローされる
try {
const rule = new events.Rule(this, 'Rule', {
schedule: events.Schedule.expression('invalid-expression'),
});
} catch (error) {
// ValidationErrorとして型安全にキャッチ可能
if (error instanceof ValidationError) {
console.error('Validation failed:', error.message);
}
}
// イベントパターンの検証
try {
const pattern = {
source: ['aws.ec2'],
detailType: ['EC2 Instance State-change Notification'],
detail: {
state: ['running'],
},
};
// 無効なパターンの場合、ValidationErrorがスローされる
events.EventPattern.fromObject(pattern);
} catch (error) {
if (error instanceof ValidationError) {
// 型安全なエラーハンドリング
console.error('Invalid event pattern:', error.message);
}
}
利点
- 型安全性の向上: エラーハンドリングが型安全になり、IDEの補完やTypeScriptの型チェックが機能します
- コードの可読性: エラーの種類が明確になり、適切なエラーハンドリングが容易になります
- デバッグの改善: ValidationErrorには詳細なコンテキスト情報が含まれます
この変更は既存のコードに対して後方互換性があります。ValidationErrorはErrorを継承しているため、既存のtry-catchブロックは引き続き動作します。
詳細については、PR #34316およびIssue #32569を参照してください。
まとめ
AWS CDK v2.194.0は、L1 CloudFormationリソース定義の大規模な更新により、最新のAWSサービス機能がCDKで利用可能になりました。特に、CloudFrontの新しいリソース(ConnectionGroupとDistributionTenant)、ECRのレジストリスキャン設定、RDSのDatabase Insights Modeなどが注目に値します。
また、EventBridgeモジュールでのValidationErrorsの導入により、型安全性が向上し、より堅牢なコードを書くことができるようになりました。これらの改善により、AWS CDKはより強力で使いやすいインフラストラクチャ定義ツールとなっています。
これらの新機能を活用することで、より柔軟で保守性の高いインフラストラクチャコードを構築できます。