概要
AWS CDK v2.229.0では、Route53にホストゾーン権限管理のための新しいHostedZoneGrantsクラスが追加され、Bedrock AgentCoreにランタイムとブラウザの新機能が追加されました。さらに、alphaモジュールとしてImageBuilderの包括的なL2コンストラクト群(Container Recipe、Image Recipe、Workflow)、そしてCDK Mixinsのプレビュー機能が追加されています。
新機能
Route53: HostedZoneGrants クラスの追加
Route53に新しいHostedZoneGrantsクラスが追加され、ホストゾーンに関する権限管理が統一的に行えるようになりました。これにより、IHostedZoneインターフェースの実装間で一貫性のある権限管理が可能になります。
HostedZoneGrantsクラスは、すべてのIHostedZone実装で共通して利用できる権限付与メソッドを提供します。既存のgrantDelegation()メソッドもこのクラスに委譲されるようになりました。
import * as route53 from 'aws-cdk-lib/aws-route53';
import * as iam from 'aws-cdk-lib/aws-iam';
// ホストゾーンの取得
const hostedZone = route53.HostedZone.fromLookup(this, 'Zone', {
domainName: 'example.com',
});
// ロールを作成
const role = new iam.Role(this, 'DelegationRole', {
assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
});
// HostedZoneGrantsを使用してゾーン委譲権限を付与
hostedZone.grantDelegation(role);
// 内部的にHostedZoneGrants.grantDelegation()が呼び出される
この変更により、将来的に新しい権限タイプが追加された際も、一貫したAPIで管理できるようになります。
関連PR: #36109
Bedrock AgentCore: Runtime と Browser の新プロパティ
Bedrock AgentCoreのalphaモジュールに、ランタイムとブラウザの新しい設定オプションが追加されました。
Runtime の新機能
- Code Configuration(コード設定): S3バケットから直接デプロイパッケージを指定できるようになりました
- Lifecycle Configuration(ライフサイクル設定): ランタイムセッションのアイドルタイムアウトと最大ライフタイムを設定可能
- Request Header Configuration(リクエストヘッダー設定): 許可するカスタムヘッダーのホワイトリストを設定可能
import * as agentcore from '@aws-cdk/aws-bedrock-agentcore-alpha';
import { Duration } from 'aws-cdk-lib';
// S3からデプロイパッケージを読み込むランタイム設定
const agentArtifact = agentcore.AgentRuntimeArtifact.fromS3(
{
bucketName: 'my-deployment-bucket',
objectKey: 'deployment_package.zip',
},
agentcore.AgentCoreRuntime.PYTHON_3_13, // Pythonランタイム指定
['main.py'] // エントリーポイントファイル
);
const runtime = new agentcore.Runtime(this, 'MyRuntime', {
runtimeName: 'my-custom-runtime',
agentRuntimeArtifact: agentArtifact,
// リクエストヘッダーのホワイトリスト設定
requestHeaderConfiguration: {
allowList: [
'X-Amzn-Bedrock-AgentCore-Runtime-Custom-H1',
'X-Custom-Header',
],
},
// ライフサイクル設定
lifecycleConfiguration: {
idleRuntimeSessionTimeout: Duration.minutes(10), // アイドルタイムアウト
maxLifetime: Duration.hours(4), // 最大ライフタイム
},
});
Browser の新機能
ブラウザカスタムツールに**Browser Signing(ブラウザ署名)**のサポートが追加されました。署名を有効にすることで、ブラウザリクエストの信頼性とセキュリティを向上できます。
import * as agentcore from '@aws-cdk/aws-bedrock-agentcore-alpha';
const browser = new agentcore.BrowserCustom(this, 'MyBrowser', {
browserCustomName: 'my-secure-browser',
description: 'Signed browser instance',
// ブラウザ署名を有効化
browserSigning: agentcore.BrowserSigning.ENABLED, // デフォルト: DISABLED
});
関連PR: #36003
Alphaモジュール
ImageBuilder: Container Recipe, Image Recipe, Workflow L2コンストラクト
EC2 Image Builder向けの包括的なL2コンストラクトが新しいalphaモジュール(@aws-cdk/aws-imagebuilder-alpha)として追加されました。この実装はRFC #789に基づいています。
Container Recipe コンストラクト
コンテナイメージのビルドレシピを定義するための高レベルコンストラクトです。
import * as imagebuilder from '@aws-cdk/aws-imagebuilder-alpha';
import * as ecr from 'aws-cdk-lib/aws-ecr';
const containerRecipe = new imagebuilder.ContainerRecipe(this, 'ContainerRecipe', {
containerRecipeName: 'my-container-recipe',
containerRecipeVersion: '1.0.0',
description: 'My container image recipe',
// ベースイメージをECRから指定
baseImage: imagebuilder.BaseImage.fromEcr(
this,
'BaseImage',
ecr.Repository.fromRepositoryName(this, 'SourceRepo', 'source-repository'),
'latest', // イメージタグ
),
// Dockerfileを直接インラインで定義
dockerfile: imagebuilder.DockerfileData.fromInline(`
FROM {{{ imagebuilder:parentImage }}}
CMD ["echo", "Hello, world!"]
{{{ imagebuilder:environments }}}
{{{ imagebuilder:components }}}
`),
// ビルド後の出力先リポジトリ
targetRepository: imagebuilder.Repository.fromEcr(
ecr.Repository.fromRepositoryName(this, 'TargetRepo', 'output-repository'),
),
// 適用するコンポーネント
components: [
{
// AWS管理コンポーネント
component: imagebuilder.AwsManagedComponent.fromAwsManagedComponentName(
this,
'UpdateLinux',
'update-linux',
),
},
{
// カスタムコンポーネント(パラメータ付き)
component: imagebuilder.Component.fromComponentAttributes(this, 'CustomComp', {
componentName: 'my-custom-component',
}),
parameters: {
CUSTOM_PARAM: imagebuilder.ComponentParameterValue.fromString('value'),
},
},
],
workingDirectory: '/var/tmp', // 作業ディレクトリ
// ビルドに使用するEC2インスタンス設定
instanceImage: imagebuilder.ContainerInstanceImage.fromSsmParameterName(
this,
'InstanceImage',
'/aws/service/ecs/optimized-ami/amazon-linux-2023/recommended',
),
// ブロックデバイス設定
instanceBlockDevices: [
{
deviceName: '/dev/sda1',
mappingEnabled: true, // デバイスマッピング有効化
volume: ec2.BlockDeviceVolume.ebs(50, {
deleteOnTermination: true, // 終了時に削除
volumeType: ec2.EbsDeviceVolumeType.GP3,
encrypted: true, // 暗号化有効
}),
},
],
});
関連PR: #36091
Image Recipe コンストラクト
EC2 AMIのビルドレシピを定義するための高レベルコンストラクトです。
import * as imagebuilder from '@aws-cdk/aws-imagebuilder-alpha';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
const imageRecipe = new imagebuilder.ImageRecipe(this, 'ImageRecipe', {
imageRecipeName: 'my-ami-recipe',
imageRecipeVersion: '1.0.0',
description: 'My AMI build recipe',
// ベースイメージをSSMパラメータから指定
baseImage: imagebuilder.BaseImage.fromSsmParameterName(
this,
'AL2023Image',
'/aws/service/ami-amazon-linux-latest/al2023-ami-minimal-kernel-default-x86_64',
),
// AWS管理コンポーネントとカスタムコンポーネントを組み合わせ
components: [
{
// AWS管理のOSアップデートコンポーネント
component: imagebuilder.AwsManagedComponent.updateOS(this, 'UpdateOS', {
platform: imagebuilder.Platform.LINUX,
}),
},
{
// Marketplaceコンポーネント
component: imagebuilder.AwsMarketplaceComponent.fromAwsMarketplaceComponentAttributes(
this,
'MarketplaceComp',
{
name: 'marketplace-component-name',
marketplaceProductId: '12345678-1234-1234-1234-123456789012',
},
),
},
],
workingDirectory: '/var/tmp',
// SSMエージェントをビルド後も保持
uninstallSsmAgentAfterBuild: false, // デフォルト: true
// カスタムUserDataを適用
userDataOverride: ec2.UserData.forLinux(),
// ブロックデバイス設定
blockDevices: [
{
deviceName: '/dev/sda1',
mappingEnabled: true,
volume: ec2.BlockDeviceVolume.ebs(50, {
volumeType: ec2.EbsDeviceVolumeType.GP3,
encrypted: true,
}),
},
],
// 出力AMIに適用するタグ
amiTags: {
Environment: 'production',
ManagedBy: 'CDK',
},
});
関連PR: #36092
Workflow コンストラクト
Image Builderのビルド・テストワークフローを定義するための高レベルコンストラクトです。
import * as imagebuilder from '@aws-cdk/aws-imagebuilder-alpha';
import * as kms from 'aws-cdk-lib/aws-kms';
const workflow = new imagebuilder.Workflow(this, 'BuildWorkflow', {
workflowName: 'custom-build-workflow',
workflowType: imagebuilder.WorkflowType.BUILD, // または TEST, DISTRIBUTION
workflowVersion: '1.0.0',
description: 'Custom AMI build workflow',
changeDescription: 'Initial version',
// 暗号化キー
kmsKey: kms.Key.fromLookup(this, 'WorkflowKey', {
aliasName: 'alias/workflow-encryption-key',
}),
// ワークフロー定義をJSONオブジェクトで指定
data: imagebuilder.WorkflowData.fromJsonObject({
name: 'custom-build-workflow',
description: 'EC2インスタンスからAMIを作成',
schemaVersion: imagebuilder.WorkflowSchemaVersion.V1_0, // スキーマバージョン
// ワークフローパラメータ
parameters: [
{
name: 'instanceId',
type: imagebuilder.WorkflowParameterType.STRING,
},
],
// ワークフローステップ
steps: [
{
name: 'CreateOutputAMI',
action: imagebuilder.WorkflowAction.CREATE_IMAGE, // AMI作成アクション
onFailure: imagebuilder.WorkflowOnFailure.ABORT, // 失敗時は中断
inputs: { instanceId: 'i-123' },
},
{
name: 'TerminateBuildInstance',
action: imagebuilder.WorkflowAction.TERMINATE_INSTANCE, // インスタンス終了
onFailure: imagebuilder.WorkflowOnFailure.CONTINUE, // 失敗しても継続
inputs: { instanceId: 'i-123' },
},
],
// 出力値
outputs: [
{ name: 'ImageId', value: 'ami-123' },
],
}),
});
ワークフロー定義は、S3バケットやアセットからも読み込むことができます:
// アセットから読み込み
data: imagebuilder.WorkflowData.fromAsset('./workflow-definition.yaml'),
// S3から読み込み
data: imagebuilder.WorkflowData.fromS3({
bucket: s3.Bucket.fromBucketName(this, 'WorkflowBucket', 'my-bucket'),
key: 'workflows/build-workflow.yaml',
}),
関連PR: #36007
CDK Mixins (Developer Preview)
CDK Mixinsのプレビュー版が新しいalphaモジュール(@aws-cdk/mixins-preview)として追加されました。Mixinsは、任意のコンストラクト(L1、L2、カスタム)に適用可能な、再利用可能な抽象化機能です。
Mixinsを使用すると、特定の実装に縛られることなく、高度な機能を組み合わせることができます。従来のコンストラクトレベルの境界を越えた柔軟な機能拡張が可能になります。
主な機能変更:
validate()メソッドを削除し、エラーを直接スローする方式に変更.with()、.apply()、.mustApply()メソッドを可変長引数対応に変更
import * as mixins from '@aws-cdk/mixins-preview';
import * as s3 from 'aws-cdk-lib/aws-s3';
// カスタムMixinの定義例
class EncryptionMixin extends mixins.Mixin<s3.CfnBucket> {
apply(target: s3.CfnBucket): void {
// バケットに暗号化設定を適用
target.bucketEncryption = {
serverSideEncryptionConfiguration: [{
serverSideEncryptionByDefault: {
sseAlgorithm: 'AES256',
},
}],
};
}
}
// Mixinを適用
const bucket = new s3.Bucket(this, 'MyBucket');
mixins.with(bucket).apply(new EncryptionMixin());
// または複数のMixinを一度に適用
// mixins.with(bucket).apply(mixin1, mixin2, mixin3);
詳細はRFC #824を参照してください。
関連PR: #36136
バグ修正
Step Functions: 複数行JSONata文字列のサポート
Step Functionsで複数行のJSONata文字列が正しく処理されるようになりました。これまで、改行を含むJSONata式を使用すると、構文エラーが発生する可能性がありました。
import * as sfn from 'aws-cdk-lib/aws-stepfunctions';
const state = new sfn.Pass(this, 'Transform', {
parameters: {
// 複数行のJSONata式が正常に動作するように修正
result: sfn.JsonPath.jsonata(`
$map(items, function($item) {
{
"id": $item.id,
"name": $item.name
}
})
`),
},
});
Bedrock AgentCore: 空のサブモジュール公開とランタイム検証の修正
誤って公開されていた空のサブモジュールが削除され、ランタイム検証ロジックが修正されました。
関連PR: #36148
まとめ
AWS CDK v2.229.0では、Route53の権限管理の改善、Bedrock AgentCoreの機能拡張、そしてImageBuilderの包括的なL2コンストラクト群が追加されました。特にalphaモジュールとして追加されたImageBuilderのコンストラクト(Container Recipe、Image Recipe、Workflow)により、コンテナイメージやAMIのビルドパイプラインをより簡潔に記述できるようになります。
また、CDK Mixinsのプレビュー機能により、コンストラクトの柔軟な拡張方法が提供されました。これらの新機能は、CDKのエコシステムをさらに拡張し、より効率的なIaC開発を可能にします。
alphaモジュールの機能は実験的なものであり、今後の変更が予想されるため、本番環境での使用には注意が必要です。フィードバックや機能改善の提案は、GitHub Issuesで受け付けています。