概要
このリリースでは、クロスリージョン参照に CloudFormation の Fn::GetStackOutput 組み込み関数のサポートが追加され、SSM パラメータを使用したカスタムリソースなしでクロスリージョン・クロスアカウント参照が可能になりました。また、CloudWatch Synthetics に Playwright 5.1 および 6.0 ランタイムが追加され、EMR インスタンスフリートで優先度ベースのアロケーション戦略がサポートされました。
リリース: v2.253.0
新機能
クロスリージョン参照に Fn::GetStackOutput を追加 (#37724)
この機能でできること:
- CloudFormation の新しい組み込み関数
Fn::GetStackOutputを使用して、クロスリージョン・クロスアカウントのスタック出力を取得できるようになりました - 従来の SSM パラメータとカスタムリソースを使用した方式に比べ、よりシンプルな構成で参照が可能です
使用例:
import { App, Stack, Fn, CfnOutput } from 'aws-cdk-lib';
const app = new App();
// プロデューサースタック(us-east-1)
const producerStack = new Stack(app, 'ProducerStack', {
env: { account: '123456789012', region: 'us-east-1' },
});
const bucket = new s3.Bucket(producerStack, 'MyBucket');
new CfnOutput(producerStack, 'BucketNameOutput', {
value: bucket.bucketName,
exportName: 'SharedBucketName',
});
// コンシューマースタック(us-west-2)- クロスリージョン参照を有効化
const consumerStack = new Stack(app, 'ConsumerStack', {
env: { account: '123456789012', region: 'us-west-2' },
crossRegionReferences: true, // クロスリージョン参照を有効化
});
// Fn::GetStackOutput を使用してプロデューサースタックの出力を取得
// CDK が自動的に Fn::GetStackOutput を生成
const importedBucketName = Fn.importValue('SharedBucketName');
ポイント:
crossRegionReferences: trueを設定したスタックでは、クロスリージョン参照時に自動的にFn::GetStackOutputが使用されます- 従来の SSM パラメータベースの方式では、プロデューサー側に Writer カスタムリソース、コンシューマー側に Reader カスタムリソースが必要でしたが、この新機能ではカスタムリソースが不要になります
- クロスアカウント参照もサポートされています
HttpEventBridgeIntegration で EventBusName を自動設定 (#36780)
この機能でできること:
- API Gateway V2 の EventBridge 統合で、
EventBusNameパラメータがデフォルトのパラメータマッピングに自動的に含まれるようになりました - 冗長な設定を削減し、エラーの可能性を減らします
使用例:
import { HttpApi } from 'aws-cdk-lib/aws-apigatewayv2';
import { HttpEventBridgeIntegration } from 'aws-cdk-lib/aws-apigatewayv2-integrations';
import { EventBus } from 'aws-cdk-lib/aws-events';
const eventBus = new EventBus(this, 'MyEventBus');
// 変更前: EventBusName を明示的に設定する必要があった
// const integration = new HttpEventBridgeIntegration('WebhookInt', {
// eventBusRef: eventBus.eventBusRef,
// parameterMapping: new ParameterMapping()
// .custom('EventBusName', eventBus.eventBusName), // 冗長な設定
// });
// 変更後: EventBusName は自動的に設定される
const integration = new HttpEventBridgeIntegration('WebhookInt', {
eventBusRef: eventBus.eventBusRef,
// EventBusName は eventBusRef から自動的に抽出される
});
const httpApi = new HttpApi(this, 'HttpApi');
httpApi.addRoutes({
path: '/webhook',
methods: [HttpMethod.POST],
integration,
});
ポイント:
eventBusRefからeventBusNameが自動的に抽出され、デフォルトのパラメータマッピングに含まれます- 既存のコードで
parameterMappingを明示的に設定している場合は引き続き動作しますが、EventBusNameの冗長な設定は不要になりました
コンストラクトアノテーションをバリデーションレポートに統合 (#37712)
この機能でできること:
Annotations.of()やValidations.of()で追加された警告・エラーが、ポリシーバリデーションレポートに統合されました- コンプライアンス確認のためにレポートを使用しているユーザーが、アノテーションベースの問題もプラグイン違反と並べて確認できるようになります
使用例:
import { Annotations, Validations, Stack, App } from 'aws-cdk-lib';
const app = new App();
const stack = new Stack(app, 'MyStack');
// Annotations API を使用した警告の追加
Annotations.of(myBucket).addWarningV2(
'@aws-cdk/aws-s3:bucketNotEncrypted',
'This bucket does not have default encryption enabled'
);
// Validations API を使用した警告の追加
Validations.of(myQueue).addWarning('Queue does not have a dead letter queue configured');
// バリデーションレポートには以下のように表示される:
// ╔═══════════════════════════════════╗
// ║ Validation Report ║
// ║ Source: Construct Annotations ║
// ║ Version: N/A ║
// ║ Status: failure ║
// ╚═══════════════════════════════════╝
//
// @aws-cdk/aws-s3:bucketNotEncrypted (1 occurrences)
// Severity: warning
// ...
ポイント:
- レポートヘッダーが「Plugin Report」から「Validation Report」に、「Plugin:」から「Source:」に変更されました
- CI スクリプトやツールでテキストレポート出力をパースしている場合は更新が必要な場合があります
Validations.of().acknowledge()を使用して警告を確認済みとしてマークできます
CloudWatch Synthetics に Playwright 5.1 / 6.0 ランタイムを追加 (#37665)
この機能でできること:
- CloudWatch Synthetics Canary で新しい Playwright ランタイム(5.1 および 6.0)を使用できるようになりました
使用例:
import { Canary, Runtime, Code, Test } from 'aws-cdk-lib/aws-synthetics';
// Playwright 5.1 ランタイムを使用
const canary51 = new Canary(this, 'MyCanary51', {
runtime: Runtime.SYNTHETICS_NODEJS_PLAYWRIGHT_5_1,
test: Test.custom({
code: Code.fromAsset('canary'),
handler: 'index.handler',
}),
schedule: Schedule.rate(Duration.minutes(5)),
});
// Playwright 6.0 ランタイムを使用(最新)
const canary60 = new Canary(this, 'MyCanary60', {
runtime: Runtime.SYNTHETICS_NODEJS_PLAYWRIGHT_6_0,
test: Test.custom({
code: Code.fromAsset('canary'),
handler: 'index.handler',
}),
schedule: Schedule.rate(Duration.minutes(5)),
});
ポイント:
- Playwright は Puppeteer の代替として、よりモダンなブラウザ自動化をサポートします
- 詳細は AWS ドキュメント を参照してください
EMR インスタンスフリートの優先度アロケーション (#35731)
この機能でできること:
- EMR クラスター作成時にインスタンスフリートの優先度ベースのアロケーション戦略を使用できるようになりました
- インスタンスタイプに優先順位を設定し、利用可能なインスタンスを優先度順に割り当てることができます
使用例:
import { EmrCreateCluster } from 'aws-cdk-lib/aws-stepfunctions-tasks';
const createCluster = new EmrCreateCluster(this, 'CreateCluster', {
instances: {
instanceFleets: [{
instanceFleetType: EmrCreateCluster.InstanceRoleType.CORE,
targetOnDemandCapacity: 2,
// 優先度ベースのアロケーション戦略を使用
launchSpecifications: {
onDemandSpecification: {
allocationStrategy: EmrCreateCluster.OnDemandAllocationStrategy.PRIORITIZED,
},
},
instanceTypeConfigs: [
{
instanceType: 'm5.xlarge',
weightedCapacity: 1,
priority: 1, // 最優先
},
{
instanceType: 'm5.2xlarge',
weightedCapacity: 2,
priority: 2, // 次の優先度
},
{
instanceType: 'm4.xlarge',
weightedCapacity: 1,
priority: 3, // 最も低い優先度
},
],
}],
},
name: 'MyCluster',
clusterRole: clusterRole,
serviceRole: serviceRole,
});
ポイント:
OnDemandAllocationStrategy.PRIORITIZEDを使用すると、priorityフィールドで指定した順序でインスタンスタイプが選択されます- 優先度の低い数値がより高い優先度を意味します(1 が最優先)
- 既存の
LOWEST_PRICE戦略も引き続きサポートされます
L1 CloudFormation リソース定義の更新 (#37753)
この機能でできること:
- 最新の CloudFormation リソース仕様に基づいて L1 コンストラクトが更新されました
バグ修正
CloudFront: トークンの cachePolicyName 長さ検証をスキップ (#37751)
cachePolicyNameが CDK トークン(Lazy.string、Aws.STACK_NAMEなど)の場合、128 文字の長さ検証が誤って適用される問題を修正- トークンはデプロイ時に解決されるため、合成時の長さチェックはスキップされるようになりました
CloudWatch: MathExpression での CDK トークンの誤警告を修正 (#36882)
- CloudWatch MathExpression で CDK トークン(
${Token[TOKEN.81]}など)を使用した際に、「oken」という未知の識別子についての誤った警告が表示される問題を修正 - トークンパターンが式から除外されてから識別子が抽出されるようになりました
CodeBuild: S3 ログ暗号化のブール値反転を修正 (#37761)
S3LoggingOptions.encryptedプロパティが CloudFormation のEncryptionDisabledフィールドに直接渡されていたため、意図と逆の動作になっていた問題を修正- 修正前:
encrypted: true→ 暗号化が無効化されていた - 修正後:
encrypted: true→ 暗号化が有効化される
ECS: circuitBreaker の推奨をより強く表示 (#37755)
- ECS サービスで
circuitBreakerが設定されていない場合に警告を表示するようになりました - タスク定義の設定ミスでタスクが起動しない場合、サーキットブレーカーがないとサービスのデプロイ失敗まで 3 時間かかることがあります
EKS: HelmChart カスタムリソースから S3 chartAsset IAM ポリシーへの依存関係を追加 (#37731)
HelmChartをchartAssetで作成した際、kubectl プロバイダー Lambda が S3 読み取り権限を付与する IAM ポリシーの作成前に実行される可能性があった問題を修正- CloudFormation の
DependsOnを追加して、IAM ポリシーが先に作成されることを保証するようになりました
Alpha モジュール
bedrock-agentcore-alpha: OnlineEvaluationConfig と Evaluator L2 コンストラクトを追加 (#37615)
この機能でできること:
- Amazon Bedrock AgentCore の Online Evaluation 機能を使用して、エージェントのパフォーマンスを継続的に監視・評価できます
- 組み込みの評価器とカスタム評価器を組み合わせてエージェントのトレースを評価できます
使用例:
import {
OnlineEvaluationConfig,
Evaluator,
EvaluatorReference,
EvaluatorConfig,
EvaluatorRatingScale,
DataSourceConfig,
BuiltInEvaluator,
ExecutionStatus,
} from '@aws-cdk/aws-bedrock-agentcore-alpha';
// カスタム LLM-as-a-Judge 評価器を作成
const customEvaluator = new Evaluator(this, 'CustomEvaluator', {
evaluatorName: 'my-custom-evaluator',
evaluatorConfig: EvaluatorConfig.llmAsAJudge({
modelId: 'anthropic.claude-3-sonnet-20240229-v1:0',
evaluationInstruction: 'Evaluate the response quality based on helpfulness and accuracy',
ratingScale: EvaluatorRatingScale.categorical([
{ label: 'Good', description: 'Response is helpful and accurate' },
{ label: 'Bad', description: 'Response is unhelpful or inaccurate' },
]),
}),
});
// Online Evaluation 設定を作成
const evaluation = new OnlineEvaluationConfig(this, 'OnlineEvaluation', {
onlineEvaluationConfigName: 'my-evaluation',
executionStatus: ExecutionStatus.ENABLED,
// データソースの設定
dataSourceConfig: DataSourceConfig.fromCloudWatchLogs({
logGroups: ['my-agent-log-group'],
}),
// 組み込み評価器とカスタム評価器を組み合わせ
evaluators: [
EvaluatorReference.builtin(BuiltInEvaluator.HELPFULNESS),
EvaluatorReference.builtin(BuiltInEvaluator.CORRECTNESS),
EvaluatorReference.custom(customEvaluator),
],
});
ポイント:
BuiltInEvaluatorには HELPFULNESS、CORRECTNESS など 13 種類の組み込み評価器がありますEvaluatorConfig.codeBased()を使用して Lambda 関数ベースのカスタム評価も可能ですDataSourceConfig.fromAgentRuntimeEndpoint()を使用すると AgentCore Runtime との統合が簡単です
glue-alpha: PythonShellJob に extraPythonFiles サポートを追加 (#37130)
この機能でできること:
- Glue PythonShellJob で追加の Python ファイル(
.py、.egg、.whl)をextraPythonFilesプロパティで指定できるようになりました
使用例:
import { PythonShellJob, Code, GlueVersion, PythonVersion } from '@aws-cdk/aws-glue-alpha';
const job = new PythonShellJob(this, 'PythonShellJob', {
script: Code.fromAsset('scripts/main.py'),
glueVersion: GlueVersion.V3_0,
pythonVersion: PythonVersion.THREE,
// 追加の Python ファイルを指定
extraPythonFiles: [
Code.fromAsset('lib/utils.py'),
Code.fromAsset('lib/helpers.whl'),
],
});
ポイント:
--extra-py-files引数として AWS Glue に渡されます- 複数のファイルを指定可能で、S3 URL に自動変換されます
bedrock-agentcore-alpha: Self-managed メモリ戦略で未解決トークンの検証をスキップ (#37691)
SelfManagedMemoryStrategyでhistoricalContextWindowSizeやtriggerConditionsフィールドに CDK トークン(CfnParameter.valueAsNumberなど)を渡した際に検証エラーが発生する問題を修正- 合成時に解決できない値の検証はスキップされるようになりました
まとめ
このリリースでは、Fn::GetStackOutput によるクロスリージョン参照の簡素化、Playwright ランタイムの追加、EMR の優先度アロケーションサポートなど、複数の重要な機能が追加されました。また、Alpha モジュールでは Bedrock AgentCore の Online Evaluation 機能が追加され、AI エージェントの評価・監視がより簡単になりました。