概要
AWS CDK v2.221.0 では、Amazon Bedrock AgentCore の包括的なL2コンストラクトが追加され、ブラウザツール、コードインタープリター、およびランタイム環境の構築が容易になりました。また、ECR、ECS、Kinesis Firehose などの主要サービスに対する機能強化とバグ修正が含まれています。
新機能
Amazon Bedrock AgentCore - 1Pツールのサポート
新しい alpha パッケージ @aws-cdk/aws-bedrock-agentcore-alpha が追加され、Amazon Bedrock AgentCore のブラウザツールとコードインタープリターのL2コンストラクトが利用可能になりました。
Browser ツール
import * as agentcore from '@aws-cdk/aws-bedrock-agentcore-alpha';
import * as s3 from 'aws-cdk-lib/aws-s3';
const bucket = new s3.Bucket(this, 'BrowserArtifactBucket');
const browserTool = new agentcore.BrowserTool(this, 'BrowserTool', {
// ブラウザセッションのアーティファクトを保存するS3バケット
artifactBucket: bucket,
// ネットワーク設定(オプション)
networkConfiguration: {
vpc, // ブラウザツールを実行するVPC
subnets: {
subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS
},
securityGroups: [securityGroup],
},
// ブラウザ設定(オプション)
browserSettings: {
waitTimeoutSeconds: 30, // ページロード待機時間(デフォルト: 30秒)
maxHistorySize: 5000, // ブラウジング履歴の最大サイズ
},
});
Code Interpreter ツール
const codeInterpreter = new agentcore.CodeInterpreterTool(this, 'CodeInterpreter', {
// コード実行結果を保存するS3バケット
artifactBucket: bucket,
// 実行環境設定(オプション)
executionSettings: {
timeout: cdk.Duration.minutes(5), // タイムアウト時間(デフォルト: 5分)
memorySize: 2048, // メモリサイズ(MB、デフォルト: 1024)
},
// ネットワーク設定(オプション)
networkConfiguration: {
vpc,
subnets: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS },
},
});
これらのツールは、Bedrock Agent と統合して、Webブラウジングやコード実行などの高度なタスクを実行できるようにします。
Amazon Bedrock AgentCore - ランタイムコンストラクト
Bedrock AgentCore のランタイム環境を構築するためのL2コンストラクトが追加されました。
Runtime コンストラクト
import * as ecr_assets from 'aws-cdk-lib/aws-ecr-assets';
// Dockerイメージからランタイムアーティファクトを作成
const artifact = agentcore.RuntimeArtifact.fromDockerBuild(
'./path/to/dockerfile',
{
file: 'Dockerfile',
platform: ecr_assets.Platform.LINUX_AMD64,
}
);
const runtime = new agentcore.Runtime(this, 'AgentRuntime', {
// ランタイムアーティファクト
artifact,
// ネットワーク設定
networkConfiguration: {
vpc,
subnets: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS },
},
// 認証設定(オプション)
authorizerConfiguration: {
authorizerType: 'IAM', // 認証タイプ: IAM または NONE
},
// 環境変数(オプション)
environmentVariables: {
'ENV_VAR_NAME': 'value',
},
});
RuntimeEndpoint コンストラクト
const endpoint = new agentcore.RuntimeEndpoint(this, 'RuntimeEndpoint', {
// ランタイムへの参照
runtime,
// エンドポイント設定
endpointName: 'my-agent-endpoint',
// 認証設定(オプション)
authorizerConfiguration: {
authorizerType: 'IAM',
},
});
// エンドポイントURLを出力
new cdk.CfnOutput(this, 'EndpointUrl', {
value: endpoint.endpointUrl,
});
これらのコンストラクトにより、カスタムエージェントランタイムの構築とデプロイが簡素化されます。
ECR - イメージタグ可変性の除外フィルタ
ECR リポジトリで特定のタグパターンをイメージタグの可変性設定から除外できるようになりました。これにより、本番環境用タグ(prod-*など)は不変に保ちながら、開発用タグは上書き可能にするといった柔軟な運用が可能になります。
import * as ecr from 'aws-cdk-lib/aws-ecr';
const repository = new ecr.Repository(this, 'MyRepository', {
// イメージタグを不変に設定
imageTagMutability: ecr.TagMutability.IMMUTABLE,
// 特定のパターンを除外して可変にする
imageTagMutabilityExclusionFilters: [
// ワイルドカードパターンで開発用タグを除外(可変にする)
ecr.ImageTagMutabilityExclusionFilter.wildcard('dev-*'),
ecr.ImageTagMutabilityExclusionFilter.wildcard('test-*'),
ecr.ImageTagMutabilityExclusionFilter.wildcard('staging-*'),
],
});
ユースケース:
- 本番環境タグ(
prod-*,v1.0.0)は不変に保ち、開発環境タグ(dev-*,test-*)は上書き可能にする latestタグのみ可変にし、他のすべてのタグを不変にする- CI/CD パイプラインで一時的なタグを上書き可能にする
ECS - ManagedInstancesCapacityProvider の IConnectable 実装
ManagedInstancesCapacityProvider が IConnectable インターフェースを実装し、セキュリティグループの管理が容易になりました。
import * as ecs from 'aws-cdk-lib/aws-ecs';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
const cluster = new ecs.Cluster(this, 'Cluster', {
vpc,
});
const capacityProvider = new ecs.ManagedInstancesCapacityProvider(
this,
'CapacityProvider',
{
cluster,
machineImage: ecs.EcsOptimizedImage.amazonLinux2023(),
instanceType: new ec2.InstanceType('t3.medium'),
}
);
// IConnectable を使用してセキュリティグループを管理
capacityProvider.connections.allowFrom(
ec2.Peer.ipv4('10.0.0.0/8'),
ec2.Port.tcp(443),
'Allow HTTPS from private network'
);
// Application Load Balancer からのトラフィックを許可
capacityProvider.connections.allowFrom(
alb,
ec2.Port.tcp(8080),
'Allow traffic from ALB'
);
この変更により、ECS インスタンスのネットワークアクセス制御が一貫した API で管理できるようになりました。
Kinesis Firehose - レコードフォーマット変換のサポート
Kinesis Firehose で AWS Glue テーブルスキーマを使用したレコードフォーマット変換がサポートされました。JSON データを Parquet や ORC などの列指向フォーマットに変換できます。
import * as firehose from 'aws-cdk-lib/aws-kinesisfirehose';
import * as destinations from 'aws-cdk-lib/aws-kinesisfirehose-destinations';
import * as glue from 'aws-cdk-lib/aws-glue';
import * as s3 from 'aws-cdk-lib/aws-s3';
declare const glueDatabase: glue.CfnDatabase;
const bucket = new s3.Bucket(this, 'DestinationBucket');
// Glue テーブルスキーマを定義
const schemaTable = new glue.CfnTable(this, 'SchemaTable', {
databaseName: glueDatabase.ref,
catalogId: this.account,
tableInput: {
name: 'my_schema',
storageDescriptor: {
columns: [
{ name: 'user_id', type: 'string' },
{ name: 'timestamp', type: 'bigint' },
{ name: 'event_type', type: 'string' },
],
// ... その他の設定
},
},
});
const deliveryStream = new firehose.DeliveryStream(this, 'DeliveryStream', {
destination: new destinations.S3Bucket(bucket, {
// レコードフォーマット変換を設定
dataFormatConversion: {
// Glue テーブルからスキーマを取得
schemaConfiguration: firehose.SchemaConfiguration.fromCfnTable(schemaTable),
// 入力フォーマット: OpenX JSON
inputFormat: new firehose.OpenXJsonInputFormat({
lowercaseColumnNames: true, // カラム名を小文字に変換(デフォルト: true)
convertDotsInJsonKeysToUnderscores: false, // ドットをアンダースコアに変換
columnToJsonKeyMappings: { // カラム名とJSONキーのマッピング
'user_id': 'userId',
'event_type': 'eventType',
},
}),
// 出力フォーマット: Parquet
outputFormat: new firehose.ParquetOutputFormat({
compression: firehose.ParquetCompression.SNAPPY, // 圧縮形式(デフォルト: SNAPPY)
blockSize: cdk.Size.mebibytes(256), // ブロックサイズ(デフォルト: 256 MiB)
pageSize: cdk.Size.mebibytes(1), // ページサイズ(デフォルト: 1 MiB)
enableDictionaryCompression: true, // ディクショナリ圧縮を有効化
writerVersion: firehose.ParquetWriterVersion.V1, // Parquet Writer バージョン
}),
},
}),
});
Hive JSON 入力フォーマットの例:
const inputFormat = new firehose.HiveJsonInputFormat({
// Joda Time パターンでタイムスタンプをパース
timestampParsers: [
firehose.TimestampParser.fromFormatString('yyyy-MM-dd'),
firehose.TimestampParser.fromFormatString('yyyy-MM-dd HH:mm:ss'),
],
});
ORC 出力フォーマットの例:
const outputFormat = new firehose.OrcOutputFormat({
formatVersion: firehose.OrcFormatVersion.V0_12, // ORC フォーマットバージョン
compression: firehose.OrcCompression.ZLIB, // 圧縮形式(デフォルト: ZLIB)
blockSize: cdk.Size.mebibytes(256), // ブロックサイズ
bloomFilterColumns: ['user_id', 'event_type'], // Bloom Filter 対象カラム
bloomFilterFalsePositiveProbability: 0.05, // Bloom Filter 偽陽性率(デフォルト: 0.05)
dictionaryKeyThreshold: 0.0, // ディクショナリキー閾値
enablePadding: false, // パディング有効化
paddingTolerance: 0.0, // パディング許容度
rowIndexStride: 10000, // 行インデックス間隔(デフォルト: 10000)
stripeSize: cdk.Size.mebibytes(64), // ストライプサイズ(デフォルト: 64 MiB)
});
この機能により、S3 に保存されるデータを効率的な列指向フォーマットに変換し、Athena や Redshift Spectrum でのクエリパフォーマンスを向上させることができます。
Alphaモジュール
MSK - Kafka 4.1 のサポート
@aws-cdk/aws-msk-alpha パッケージで Apache Kafka バージョン 4.1 がサポートされました。
import * as msk from '@aws-cdk/aws-msk-alpha';
const cluster = new msk.Cluster(this, 'Cluster', {
clusterName: 'myCluster',
kafkaVersion: msk.KafkaVersion.V4_1, // Kafka 4.1 を使用
vpc,
});
Kafka 4.1 には、パフォーマンスの改善、セキュリティの強化、新機能が含まれています。
バグ修正
ECS Patterns - ALB 更新時のターゲットグループ競合を解決
ECS パターンで Application Load Balancer の internetFacing または loadBalancerName を更新する際に発生していたターゲットグループの競合エラーが修正されました。この修正は新しいフィーチャーフラグの下で有効になります。
修正内容:
- ALB のプロパティを変更する際、ターゲットグループが正しく更新されるようになりました
- フィーチャーフラグ
@aws-cdk/aws-ecs-patterns:removeDefaultLoadBalancerNamesで制御されます
Lambda - ESM モジュールシステムでのエントリファイル検出
ESM(ECMAScript Modules)を使用しているプロジェクトで、Lambda 関数のエントリファイルが正しく検出されない問題が修正されました。
影響範囲:
package.jsonに"type": "module"を指定しているプロジェクト- Node.js Lambda 関数のバンドリング処理
Lambda Runtime - 最新ランタイムのフォールバックを Node 22.x に変更
Lambda の最新 Node.js ランタイムとして使用されるフォールバックバージョンが Node 22.x に変更されました。
OpenSearch Service - i8g ノードの EBS 検証を追加
OpenSearch Service の i8g インスタンスタイプで、EBS が不要であるにもかかわらず EBS 設定をしているとエラーが発生していた問題が修正されました。
修正内容:
- i8g インスタンスタイプ(インスタンスストレージを持つ)で EBS 設定が指定された場合に適切な検証エラーを表示
S3 Deployment - Source.data() での空文字列の処理
Source.data() で空文字列を渡した際に発生していたエラーが修正されました。
Step Functions Tasks - apiEndpoint での組み込み関数のサポート
Step Functions Tasks で apiEndpoint パラメータに CloudFormation の組み込み関数(Intrinsic Functions)を渡せるようになりました。この機能は新しいフィーチャーフラグの下で有効になります。
使用例:
import * as tasks from 'aws-cdk-lib/aws-stepfunctions-tasks';
import * as cdk from 'aws-cdk-lib';
new tasks.CallAwsService(this, 'CallService', {
service: 'lambda',
action: 'invoke',
parameters: {
FunctionName: 'myFunction',
},
// 組み込み関数を使用して動的に API エンドポイントを指定
apiEndpoint: cdk.Fn.importValue('ApiEndpointExport'),
});
フィーチャーフラグ: @aws-cdk/aws-stepfunctions-tasks:enableApiEndpointIntrinsicFunctions
ElastiCache Alpha - Redis 7 サーバーレスキャッシュのインポート
@aws-cdk/aws-elasticache-alpha パッケージで、Redis 7 サーバーレスキャッシュを既存のリソースからインポートできない問題が修正されました。
破壊的変更
L1 CloudFormation リソース定義の更新
L1 リソースが最新の CloudFormation スキーマに更新され、一部のプロパティと属性に互換性のない変更が含まれています:
AWS DataZone:
AWS::DataZone::ProjectProfile:Idプロパティが削除されました
AWS CloudWatch Logs:
AWS::Logs::DeliveryDestination:DeliveryDestinationType属性が削除されました
Amazon S3:
AWS::S3::AccessGrantsLocation:IamRoleArnプロパティが必須になりましたAWS::S3::AccessGrantsLocation:LocationScopeプロパティが必須になりました
AWS Service Catalog:
AWS::ServiceCatalog::TagOptionAssociation:Id属性が削除されました
影響を受けるユーザー:
L1 リソース(CfnXxx クラス)を直接使用し、上記のプロパティや属性を参照している場合は、コードの更新が必要です。
対応方法:
- 削除されたプロパティや属性への参照を削除
- 新しく必須になったプロパティに値を設定
まとめ
AWS CDK v2.221.0 は、Amazon Bedrock AgentCore の包括的なL2コンストラクトの追加により、生成 AI アプリケーションの構築が大幅に簡素化されました。ブラウザツール、コードインタープリター、カスタムランタイムのデプロイが、タイプセーフで簡潔な API で実現できるようになりました。
また、ECR のイメージタグ管理の柔軟性向上、Kinesis Firehose のデータ変換機能のサポート、および多数のバグ修正により、より堅牢で使いやすいインフラストラクチャコード環境が提供されています。
L1 リソースの破壊的変更については、該当するリソースを使用している場合は移行対応が必要です。通常、L2 コンストラクトを使用している場合は影響を受けません。
詳細については、公式リリースノートをご覧ください。