Back to Releases
v2.200.0 2025年6月2日

AWS CDK v2.200.0 リリース解説

IAM OidcProviderNative、EC2 PrefixListのIPeerサポート、Lambda LogGroupへのタグ伝播、SNS Firehoseサブスクリプション、Step Functions RedriveExecutionなど、多数の新機能とバグ修正が含まれています。

iamec2lambdas3sns-subscriptionsstepfunctionscustom-resourcessecretsmanagerservicecatalogmsk

概要

AWS CDK v2.200.0では、IAMでネイティブCloudFormationリソースを使用したOIDCプロバイダーコンストラクトの追加、EC2 PrefixListの接続ピアとしての使用サポート、Lambda関数タグのログループへの伝播、SNS Amazon Data Firehoseサブスクリプション、Step FunctionsのRedriveExecution権限付与API、S3レプリケーション権限の付与メソッドなど、多数の新機能が追加されました。

新機能

IAM: OidcProviderNativeコンストラクトの追加 (PR #28634)

ネイティブCloudFormationリソース(AWS::IAM::OIDCProvider)を使用した新しいOidcProviderNativeコンストラクトが追加されました。既存のOpenIdConnectProviderはLambdaベースのカスタムリソースを使用していますが、新しいOidcProviderNativeはCloudFormationネイティブリソースを使用するため、より安定したデプロイが可能です。

既存のOpenIdConnectProviderは非推奨となり、今後はOidcProviderNativeの使用が推奨されます。

import * as iam from 'aws-cdk-lib/aws-iam';

// OIDCプロバイダーの作成
const provider = new iam.OidcProviderNative(this, 'Provider', {
  // OIDCプロバイダーの名前(オプション)
  oidcProviderName: 'MyProvider',
  // OIDCプロバイダーのURL(必須)
  url: 'https://oidc.eks.us-east-1.amazonaws.com/id/EXAMPLE',
  // クライアントID(オプション)
  clientIds: ['foo', 'bar'],
  // サーバー証明書のサムプリント(必須)
  // CloudFormationネイティブリソースでは少なくとも1つのサムプリントが必要
  thumbprints: [
    'aa00aa1122aa00aa1122aa00aa1122aa00aa1122',
    'aa00aa1122aa00aa1122aa00aa1122aa00aa1111',
  ],
});

// OIDCプロバイダーのARNを取得
const providerArn = provider.oidcProviderArn;

// OIDCプロバイダーのIssuerを取得
const providerIssuer = provider.oidcProviderIssuer;

// 最小構成のOIDCプロバイダー
const minimal = new iam.OidcProviderNative(this, 'Minimal', {
  url: 'https://oidc.eks.us-east-1.amazonaws.com/id/EXAMPLE2',
  // 最低1つのサムプリントが必須
  thumbprints: ['aa00aa1122aa00aa1122aa00aa1122aa00aa1122'],
});

// OIDCプロバイダーを使用したロールの作成
const role = new iam.Role(this, 'Role', {
  assumedBy: new iam.FederatedPrincipal(
    provider.oidcProviderArn,
    {
      StringEquals: {
        [`${provider.oidcProviderIssuer}:aud`]: 'foo',
      },
    },
    'sts:AssumeRoleWithWebIdentity'
  ),
});

EC2: PrefixListをIPeerとして使用可能に (PR #33617)

EC2のPrefixListIPeerインターフェースを実装し、セキュリティグループの接続ピアとして直接使用できるようになりました。これにより、より簡潔なコードでセキュリティグループルールを定義できます。

import * as ec2 from 'aws-cdk-lib/aws-ec2';

const vpc = new ec2.Vpc(this, 'Vpc');

// Prefix Listの作成
const prefixList = new ec2.PrefixList(this, 'PrefixList', {
  maxEntries: 10,
  entries: [
    { cidr: '10.0.0.0/16', description: 'VPC CIDR' },
    { cidr: '172.16.0.0/12', description: 'Private Network' },
  ],
});

const instance = new ec2.Instance(this, 'Instance', {
  vpc,
  instanceType: ec2.InstanceType.of(
    ec2.InstanceClass.T3,
    ec2.InstanceSize.MICRO
  ),
  machineImage: ec2.MachineImage.latestAmazonLinux2023(),
});

// 以前の書き方: 冗長なprefixListの繰り返し
// instance.connections.allowFrom(
//   ec2.Peer.prefixList(prefixList.prefixListId),
//   ec2.Port.tcp(443)
// );

// 新しい書き方: PrefixListを直接使用
instance.connections.allowFrom(
  prefixList,  // IPeerとして直接使用可能
  ec2.Port.tcp(443),
  'Allow HTTPS from Prefix List'
);

// セキュリティグループでも使用可能
const securityGroup = new ec2.SecurityGroup(this, 'SecurityGroup', { vpc });
securityGroup.addIngressRule(
  prefixList,  // IPeerとして直接使用
  ec2.Port.tcp(22),
  'Allow SSH from Prefix List'
);

Lambda: 関数タグのログループへの伝播 (PR #34556)

Lambda関数に設定されたタグをCloudWatch Logsのログループに伝播できるようになりました。これにより、タグベースのコスト配分やリソース管理がより容易になります。

import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as cdk from 'aws-cdk-lib';

const myFunction = new lambda.Function(this, 'MyFunction', {
  runtime: lambda.Runtime.NODEJS_20_X,
  handler: 'index.handler',
  code: lambda.Code.fromAsset('lambda'),
  // 関数にタグを設定
  tags: {
    Environment: 'Production',
    Application: 'MyApp',
    CostCenter: 'Engineering',
  },
  // タグをログループに伝播(デフォルト: false)
  logGroupTagPropagation: true,
});

// または、既存の関数にタグを追加
cdk.Tags.of(myFunction).add('Team', 'Backend');

// この場合、ログループにも以下のタグが自動的に設定されます:
// - Environment: Production
// - Application: MyApp
// - CostCenter: Engineering
// - Team: Backend

S3: grantReplicationPermissionメソッドの追加 (PR #34138)

S3バケットのレプリケーション用IAMロールに必要な権限を付与するgrantReplicationPermissionメソッドが追加されました。これにより、カスタムレプリケーションロールを使用する場合の権限設定が簡素化されます。

import * as s3 from 'aws-cdk-lib/aws-s3';
import * as iam from 'aws-cdk-lib/aws-iam';

const sourceBucket = new s3.Bucket(this, 'SourceBucket', {
  versioned: true,
});

const destinationBucket = new s3.Bucket(this, 'DestinationBucket', {
  versioned: true,
});

// カスタムレプリケーションロールの作成
const replicationRole = new iam.Role(this, 'ReplicationRole', {
  assumedBy: new iam.ServicePrincipal('s3.amazonaws.com'),
});

// レプリケーション権限の付与(新機能)
sourceBucket.grantReplicationPermission(replicationRole, destinationBucket);

// レプリケーション設定
sourceBucket.addReplicationConfiguration({
  role: replicationRole,
  rules: [
    {
      id: 'ReplicateAll',
      status: s3.ReplicationRuleStatus.ENABLED,
      destination: {
        bucket: destinationBucket,
      },
    },
  ],
});

// 以前は、以下のような手動での権限設定が必要でした:
// replicationRole.addToPolicy(new iam.PolicyStatement({
//   actions: ['s3:GetReplicationConfiguration', 's3:ListBucket'],
//   resources: [sourceBucket.bucketArn],
// }));
// replicationRole.addToPolicy(new iam.PolicyStatement({
//   actions: ['s3:GetObjectVersionForReplication', 's3:GetObjectVersionAcl'],
//   resources: [`${sourceBucket.bucketArn}/*`],
// }));
// replicationRole.addToPolicy(new iam.PolicyStatement({
//   actions: ['s3:ReplicateObject', 's3:ReplicateDelete'],
//   resources: [`${destinationBucket.bucketArn}/*`],
// }));

SNS: Amazon Data Firehoseサブスクリプションのサポート (PR #33811)

SNSトピックのサブスクライバーとしてAmazon Data FirehoseデリバリーストリームをサポートするFirehoseSubscriptionが追加されました。これにより、SNSメッセージをS3、Redshift、OpenSearchなどに直接配信できます。

import * as sns from 'aws-cdk-lib/aws-sns';
import * as subs from 'aws-cdk-lib/aws-sns-subscriptions';
import * as firehose from 'aws-cdk-lib/aws-kinesisfirehose';
import * as s3 from 'aws-cdk-lib/aws-s3';
import * as sqs from 'aws-cdk-lib/aws-sqs';
import * as cdk from 'aws-cdk-lib';

const topic = new sns.Topic(this, 'Topic');

// Firehoseの配信先バケット
const bucket = new s3.Bucket(this, 'Bucket', {
  removalPolicy: cdk.RemovalPolicy.DESTROY,
  autoDeleteObjects: true,
});

// Firehoseデリバリーストリームの作成
const deliveryStream = new firehose.DeliveryStream(this, 'DeliveryStream', {
  destination: new firehose.S3Bucket(bucket, {
    // バッファリング間隔(秒)
    bufferingInterval: cdk.Duration.seconds(60),
    // バッファリングサイズ(MB)
    bufferingSize: cdk.Size.mebibytes(5),
    loggingConfig: { logging: false },
  }),
});

// デッドレターキュー(オプション)
const deadLetterQueue = new sqs.Queue(this, 'DeadLetterQueue', {
  retentionPeriod: cdk.Duration.days(14),
});

// FirehoseサブスクリプションをSNSトピックに追加
topic.addSubscription(new subs.FirehoseSubscription(deliveryStream, {
  // SNSメタデータを除去してメッセージのみを配信
  rawMessageDelivery: true,
  // 配信失敗時のデッドレターキュー
  deadLetterQueue,
  // カスタムロールの指定(オプション)
  // role: customRole,
}));

// SNSメッセージは自動的にFirehose経由でS3に配信される

Step Functions: RedriveExecution権限付与APIの追加 (PR #34554)

Step Functionsステートマシンの実行を再実行するための権限を付与するgrantRedriveExecutionメソッドが追加されました。これは、分散マップやエラーハンドリングで特に有用です。

import * as sfn from 'aws-cdk-lib/aws-stepfunctions';
import * as tasks from 'aws-cdk-lib/aws-stepfunctions-tasks';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as iam from 'aws-cdk-lib/aws-iam';

// Lambda関数の作成
const processFunction = new lambda.Function(this, 'ProcessFunction', {
  runtime: lambda.Runtime.NODEJS_20_X,
  handler: 'index.handler',
  code: lambda.Code.fromAsset('lambda'),
});

// ステートマシンの定義
const definition = new tasks.LambdaInvoke(this, 'ProcessTask', {
  lambdaFunction: processFunction,
});

const stateMachine = new sfn.StateMachine(this, 'StateMachine', {
  definitionBody: sfn.DefinitionBody.fromChainable(definition),
});

// 再実行を行うロールまたはユーザー
const redriveRole = new iam.Role(this, 'RedriveRole', {
  assumedBy: new iam.AccountPrincipal(this.account),
});

// RedriveExecution権限の付与(新機能)
stateMachine.grantRedriveExecution(redriveRole);

// これにより、以下のIAM権限が付与されます:
// - states:RedriveExecution: 失敗した実行を再実行
// - states:DescribeExecution: 実行状態の確認
// - states:GetExecutionHistory: 実行履歴の取得

// 分散マップでの使用例
const map = new sfn.Map(this, 'DistributedMap', {
  maxConcurrency: 10,
  itemsPath: sfn.JsonPath.stringAt('$.items'),
});

map.itemProcessor(definition);

const mapStateMachine = new sfn.StateMachine(this, 'MapStateMachine', {
  definitionBody: sfn.DefinitionBody.fromChainable(map),
});

// マップ実行の再実行権限を付与
mapStateMachine.grantRedriveExecution(redriveRole);

ValidationErrorの導入によるエラーハンドリングの改善

複数のモジュールで、型付けされていないエラーの代わりにValidationErrorをスローするように改善されました。これにより、エラーハンドリングがより予測可能になり、TypeScriptの型システムを活用できます。

対象モジュール:

import { ValidationError } from 'aws-cdk-lib';
import * as lambda from 'aws-cdk-lib/aws-lambda';

try {
  const fn = new lambda.Function(this, 'Function', {
    runtime: lambda.Runtime.NODEJS_20_X,
    handler: 'index.handler',
    code: lambda.Code.fromAsset('lambda'),
    timeout: cdk.Duration.seconds(-1), // 無効な値
  });
} catch (error) {
  if (error instanceof ValidationError) {
    // ValidationErrorとして適切に処理
    console.error('Validation failed:', error.message);
  }
}

Alphaモジュールの新機能

MSK: Kafka 4.0のサポート (PR #34501)

Amazon MSKでApache Kafka 4.0がサポートされました。Kafka 4.0はKRaft(Apache Kafka Raft)のみをサポートし、ZooKeeperは使用しません。

import * as msk from '@aws-cdk/aws-msk-alpha';
import * as ec2 from 'aws-cdk-lib/aws-ec2';

const vpc = new ec2.Vpc(this, 'Vpc');

// Kafka 4.0クラスターの作成
const cluster = new msk.Cluster(this, 'Cluster', {
  clusterName: 'MyKafka40Cluster',
  // Kafka 4.0を指定(KRaftモード)
  kafkaVersion: msk.KafkaVersion.V4_0_0,
  vpc,
  // Kafka 4.0ではZooKeeperは使用されない(KRaftのみ)
});

// 既存バージョンも引き続き利用可能
const kafka37Cluster = new msk.Cluster(this, 'Kafka37Cluster', {
  clusterName: 'MyKafka37Cluster',
  kafkaVersion: msk.KafkaVersion.V3_7_0,
  vpc,
});

バグ修正

EC2: ブロックデバイスのスループットプロパティのバリデーション (PR #34571)

EC2インスタンスのブロックデバイスで、スループットプロパティのバリデーションが追加されました。これにより、無効な設定値による実行時エラーを防ぐことができます。

ELBv2: minimumCapacityUnitの最大値の修正 (PR #34586)

Application Load BalancerのminimumCapacityUnitプロパティの最大値が正しく設定されるように修正されました。

CloudFormation L1リソースの更新

L1 CloudFormationリソース定義が最新のCloudFormation仕様に更新されました (PR #34594)。

まとめ

AWS CDK v2.200.0は、IAMのOIDCプロバイダーのネイティブCloudFormationサポート、EC2 PrefixListの使いやすさの向上、Lambda関数タグのログループへの伝播、SNS Firehoseサブスクリプション、Step Functions RedriveExecution権限付与など、多数の実用的な新機能を提供しています。特にValidationErrorの導入により、エラーハンドリングがより型安全になり、開発者体験が向上しています。Alphaモジュールでは、MSKでのKafka 4.0サポートが追加され、最新のKafka機能を活用できるようになりました。