概要
AWS CDK v2.193.0 では、AppSync Events API でのデータソース統合サポート、CodePipeline でパイプラインを呼び出すアクションの追加、EKS の AWS Load Balancer Controller への追加の Helm チャート値の渡し方のサポートなどが含まれています。また、Alpha モジュールでは EventBridge Pipes のターゲットとして Amazon Data Firehose がサポートされました。
新機能
AppSync Events API でのデータソース統合のサポート
AWS AppSync Events API でデータソースを使用できるようになりました。この機能により、GraphQL API で利用可能なデータソース(DynamoDB、Lambda、HTTP、EventBridge、OpenSearch、RDS など)を Events API でも使用できます。
実装は既存の GraphQL API のデータソースとほぼ同じで、EventApi にデータソースを追加し、チャネルネームスペースのイベントハンドラー設定で使用できます。以下のデータソースタイプがサポートされています:
- DynamoDB データソース: DynamoDB テーブルへの読み書き
- Lambda データソース: Lambda 関数の呼び出し(直接呼び出し、同期/非同期)
- HTTP データソース: 外部 HTTP エンドポイントの呼び出し
- EventBridge データソース: EventBridge へのイベント送信
- OpenSearch データソース: OpenSearch クラスタへのクエリ
- RDS データソース: RDS データベースへのクエリ
import * as appsync from 'aws-cdk-lib/aws-appsync';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
import * as lambda from 'aws-cdk-lib/aws-lambda';
// Events API の作成
const api = new appsync.EventApi(this, 'EventApi', {
apiName: 'MyEventApi',
});
// DynamoDB データソースの追加
const table = new dynamodb.Table(this, 'Table', {
partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
});
const dynamoDbDataSource = api.addDynamoDbDataSource('DynamoDbDataSource', table);
// Lambda データソースの追加
const handlerFunction = new lambda.Function(this, 'Handler', {
runtime: lambda.Runtime.NODEJS_20_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda'),
});
// 通常の Lambda データソース(AppSync 経由で呼び出し)
const lambdaDataSource = api.addLambdaDataSource('LambdaDataSource', handlerFunction);
// 直接呼び出し Lambda データソース(AppSync が Lambda を直接呼び出し)
const directLambdaDataSource = api.addLambdaDataSource('DirectLambdaDataSource', handlerFunction, {
directLambdaInvoke: true, // 直接呼び出しを有効化
});
// チャネルネームスペースでデータソースを使用
const namespace = api.addChannelNamespace('MyNamespace', {
name: 'myNamespace',
});
// イベントハンドラーでデータソースを使用
namespace.addEventHandler('MyHandler', {
dataSource: dynamoDbDataSource,
// またはその他のデータソース
});
この機能により、Events API でもリアルタイムイベント処理時にさまざまなデータソースと統合できるようになりました。
CodePipeline でパイプライン呼び出しアクションを追加
CodePipeline で別のパイプラインを呼び出すアクション CodePipelineInvokeAction が追加されました。これにより、パイプラインから別のパイプラインを起動し、複雑なワークフローを構築できます。
import * as codepipeline from 'aws-cdk-lib/aws-codepipeline';
import * as codepipeline_actions from 'aws-cdk-lib/aws-codepipeline-actions';
// 呼び出される側のパイプライン
const targetPipeline = new codepipeline.Pipeline(this, 'TargetPipeline', {
pipelineName: 'MyTargetPipeline',
// ... パイプラインの設定
});
// 呼び出す側のパイプライン
const sourcePipeline = new codepipeline.Pipeline(this, 'SourcePipeline', {
pipelineName: 'MySourcePipeline',
});
// パイプライン呼び出しアクションの追加
sourcePipeline.addStage({
stageName: 'InvokeStage',
actions: [
new codepipeline_actions.CodePipelineInvokeAction({
actionName: 'InvokeTargetPipeline',
// 呼び出すパイプライン
pipeline: targetPipeline,
// オプション: 実行モードの指定
// - QUEUED: キューに追加(デフォルト)
// - SUPERSEDED: 既存の実行を上書き
// - PARALLEL: 並列実行
// executionMode: 'QUEUED',
}),
],
});
この機能により、複数のパイプラインを連携させた複雑なデプロイワークフローを構築できます。例えば、共通のビルドパイプラインから複数の環境固有のデプロイパイプラインを呼び出すような構成が可能になります。
EKS: AWS Load Balancer Controller に追加の Helm チャート値を渡す
EKS クラスタの AWS Load Balancer Controller に追加の Helm チャート値を渡せるようになりました。新しく追加された AlbControllerHelmChartOptions インターフェースを使用して、WAF と WAFv2 の有効化を設定できます。
import * as eks from 'aws-cdk-lib/aws-eks';
const cluster = new eks.Cluster(this, 'Cluster', {
version: eks.KubernetesVersion.V1_31,
// ... その他のクラスタ設定
});
// AWS Load Balancer Controller をインストール
eks.AlbController.create(this, 'AlbController', {
cluster,
version: eks.AlbControllerVersion.V2_11_0,
// 追加の Helm チャート値を渡す
helmChartOptions: {
enableWaf: true, // AWS WAF のサポートを有効化(デフォルト: false)
enableWafv2: true, // AWS WAF v2 のサポートを有効化(デフォルト: false)
},
});
これらの設定により、ALB Controller が AWS WAF または WAF v2 と統合して動作するようになります。これは、Application Load Balancer に WAF ルールを適用したい場合に便利です。
サポートされている Helm チャート値の完全なリストを参照してください。
Kinesis: 型付き ValidationErrors のスロー
Kinesis モジュールで、型なしの Error の代わりに ValidationErrors をスローするようになりました。これにより、エラーハンドリングがより予測可能で型安全になります。
import * as kinesis from 'aws-cdk-lib/aws-kinesis';
// 検証エラーが発生した場合、より明確なエラーメッセージが提供される
const stream = new kinesis.Stream(this, 'Stream', {
shardCount: -1, // 無効な値 → ValidationErrors がスローされる
});
この変更により、開発時にエラーの種類を特定しやすくなり、適切なエラーハンドリングが実装しやすくなります。
Alpha モジュール
EventBridge Pipes: Amazon Data Firehose ターゲットのサポート
#33860 - @aws-cdk/aws-pipes-targets-alpha
EventBridge Pipes で Amazon Data Firehose 配信ストリームをターゲットとして使用できるようになりました。
import * as pipes from '@aws-cdk/aws-pipes-alpha';
import * as targets from '@aws-cdk/aws-pipes-targets-alpha';
import * as firehose from '@aws-cdk/aws-kinesisfirehose-alpha';
import * as destinations from '@aws-cdk/aws-kinesisfirehose-destinations-alpha';
import * as s3 from 'aws-cdk-lib/aws-s3';
import * as sqs from 'aws-cdk-lib/aws-sqs';
// S3 バケットの作成
const bucket = new s3.Bucket(this, 'Bucket');
// Firehose 配信ストリームの作成
const deliveryStream = new firehose.DeliveryStream(this, 'DeliveryStream', {
destination: new destinations.S3Bucket(bucket),
});
// SQS キューをソースとして使用
const sourceQueue = new sqs.Queue(this, 'SourceQueue');
// Pipe を作成し、Firehose をターゲットとして指定
new pipes.Pipe(this, 'Pipe', {
source: new sources.SqsSource(sourceQueue),
target: new targets.FirehoseTarget(deliveryStream, {
// オプション: 入力トランスフォーマー
// inputTransformation: pipes.InputTransformation.fromObject({
// data: pipes.DynamicInput.fromEventPath('$.body'),
// }),
}),
});
この機能により、EventBridge Pipes から直接 Firehose にデータをストリーミングし、S3、Redshift、OpenSearch などの宛先にデータを配信できます。Pipe のターゲットロールには、以下の権限が自動的に付与されます:
firehose:PutRecordfirehose:PutRecordBatch
バグ修正
EFS: インポートされたサブネットのサポート
EFS ファイルシステムで、Subnet.fromSubnetAttributes() などを使用してインポートされたサブネットを使用した際にエラーが発生していた問題が修正されました。これにより、既存のサブネットをインポートして EFS マウントターゲットを作成できるようになりました。
import * as efs from 'aws-cdk-lib/aws-efs';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
// 既存のサブネットをインポート
const subnet = ec2.Subnet.fromSubnetAttributes(this, 'ImportedSubnet', {
subnetId: 'subnet-12345678',
availabilityZone: 'us-east-1a',
});
// インポートしたサブネットで EFS を作成
const fileSystem = new efs.FileSystem(this, 'FileSystem', {
vpc,
vpcSubnets: {
subnets: [subnet], // インポートしたサブネットが正しく動作する
},
});
Step Functions: containsTaskToken が null 値を正しく処理
Step Functions の containsTaskToken メソッドが null 値を含むペイロードを正しく処理できるようになりました。以前は null 値が存在するとタスクトークンの検出に失敗していましたが、この修正により正確に動作するようになりました。
import * as stepfunctions from 'aws-cdk-lib/aws-stepfunctions';
// null 値を含むペイロードでも正しくタスクトークンを検出できる
const task = new stepfunctions.Task(this, 'Task', {
parameters: {
TaskToken: stepfunctions.JsonPath.taskToken,
Data: {
value: null, // null 値が含まれていても正しく動作
message: 'test',
},
},
// ...
});
まとめ
AWS CDK v2.193.0 では、AppSync Events API のデータソース統合、CodePipeline のパイプライン間連携、EKS の ALB Controller 設定の柔軟性向上など、複数の重要な機能が追加されました。また、Alpha モジュールでは EventBridge Pipes の Firehose ターゲットサポートが追加され、データストリーミングパイプラインの構築がより簡単になりました。バグ修正により、EFS のインポートされたサブネットのサポートと Step Functions のタスクトークン検出の信頼性も向上しています。