概要
AWS CDK v2.237.0では、EKSにL1コンストラクトベースの新しいOIDCプロバイダーOidcProviderNativeが追加され、カスタムリソースを使用しない形でのOIDCプロバイダー管理が可能になりました。また、Lambda Kafkaイベントソースマッピングのメトリクスとロギング設定、OpenSearchのOI2インスタンスタイプサポートなど、複数の機能強化が含まれています。
新機能
EKS: L1ベースのOidcProviderNativeを追加 (#36589)
EKSクラスターのOIDCプロバイダー管理において、カスタムリソースではなくCloudFormation L1コンストラクトを使用する新しいOidcProviderNativeが追加されました。これにより、v1からv2への移行時にOIDCプロバイダーのインポートが可能になります。
従来のOpenIdConnectProviderはカスタムリソースベースでインポートができませんでしたが、OidcProviderNativeを使用することで、既存のOIDCプロバイダーの管理と移行が容易になります。
import * as eks from 'aws-cdk-lib/aws-eks';
import * as iam from 'aws-cdk-lib/aws-iam';
declare const cluster: eks.Cluster;
// 新しいOidcProviderNativeを使用してOIDCプロバイダーを作成
const oidcProvider = new eks.OidcProviderNative(this, 'OidcProvider', {
cluster, // EKSクラスターを指定
});
// サービスアカウントでの使用例
const serviceAccountRole = new iam.Role(this, 'ServiceAccountRole', {
assumedBy: new iam.FederatedPrincipal(
oidcProvider.openIdConnectProviderArn,
{
StringEquals: {
[`${oidcProvider.openIdConnectProviderIssuer}:sub`]: 'system:serviceaccount:default:my-service-account',
[`${oidcProvider.openIdConnectProviderIssuer}:aud`]: 'sts.amazonaws.com',
},
},
'sts:AssumeRoleWithWebIdentity'
),
});
従来のOpenIdConnectProviderからの移行
既存のカスタムリソースベースのOpenIdConnectProviderから移行する場合は、以下の手順を推奨します:
- 既存の
OpenIdConnectProviderにremovalPolicy: RemovalPolicy.RETAINを設定 - デプロイして既存リソースを保持
OidcProviderNativeに切り替え- 再度デプロイ
EKS: ServiceAccountにoverwriteServiceAccountプロパティを追加 (#36751)
EKSのServiceAccountコンストラクトにoverwriteServiceAccountプロパティが追加されました。これにより、既存のサービスアカウントが存在する場合でもデプロイが失敗せず、上書きできるようになります。v1からv2への移行時に、サービスアカウントを一時的に失うことなく移行できます。
import * as eks from 'aws-cdk-lib/aws-eks';
declare const cluster: eks.Cluster;
const serviceAccount = new eks.ServiceAccount(this, 'MyServiceAccount', {
cluster,
name: 'my-service-account',
namespace: 'default',
// 既存のサービスアカウントを上書き
overwriteServiceAccount: true, // trueの場合、既存リソースが存在しても失敗せずに上書き
});
このプロパティはAlbControllerでも使用可能です:
import * as eks from 'aws-cdk-lib/aws-eks';
declare const cluster: eks.Cluster;
eks.AlbController.create(this, 'AlbController', {
cluster,
version: eks.AlbControllerVersion.V2_8_2,
// ALB Controllerのサービスアカウントを上書き
overwriteServiceAccount: true,
});
KMS: KeyGrantsのtrustAccountIdentitiesパラメータをオプション化 (#36786)
KeyGrants.fromKey()メソッドのtrustAccountIdentitiesパラメータがオプションになりました。これにより、プリンシパルとリソースの両方に権限を追加するか、プリンシパルのみに追加するかの決定が簡素化されます。
デフォルト値は@aws-cdk/aws-kms:defaultKeyPoliciesフィーチャーフラグの値に従います。
import * as kms from 'aws-cdk-lib/aws-kms';
import * as iam from 'aws-cdk-lib/aws-iam';
// 従来は trustAccountIdentities の指定が必須だった
const key = new kms.Key(this, 'MyKey');
const grants = kms.KeyGrants.fromKey(key); // trustAccountIdentities を省略可能に
// 明示的に指定する場合
const grantsExplicit = kms.KeyGrants.fromKey(key, {
trustAccountIdentities: true, // プリンシパルにのみ権限を付与
});
Lambda: Kafkaイベントソースマッピングのオブザーバビリティサポート (#36808)
Lambda関数のKafkaイベントソースマッピングに、メトリクスとロギングの設定機能が追加されました。これにより、Kafkaベースのイベントソースマッピングの監視とデバッグが容易になります。
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as lambdaEventSources from 'aws-cdk-lib/aws-lambda-event-sources';
import * as logs from 'aws-cdk-lib/aws-logs';
declare const fn: lambda.Function;
declare const topic: string;
declare const bootstrapServers: string[];
// 自己管理型Kafkaイベントソースにオブザーバビリティ設定を追加
fn.addEventSource(new lambdaEventSources.SelfManagedKafkaEventSource({
topic,
bootstrapServers,
startingPosition: lambda.StartingPosition.LATEST,
// メトリクス設定
metricsConfig: {
metrics: [
lambda.EventSourceMappingMetric.EVENT_COUNT, // イベント数メトリクス
],
},
// ロギング設定
loggingConfig: {
// CloudWatch Logsへのログ出力設定
destination: new logs.LogGroup(this, 'KafkaESMLogGroup', {
logGroupName: '/aws/lambda/kafka-esm-logs',
retention: logs.RetentionDays.ONE_WEEK,
}),
logLevel: lambdaEventSources.EventSourceMappingLogLevel.INFO, // INFO, DEBUG, ERROR から選択
},
}));
利用可能なメトリクス
| メトリクス | 説明 |
|---|---|
EVENT_COUNT | 処理されたイベントの数 |
ログレベル
| レベル | 説明 |
|---|---|
INFO | 一般的な情報レベルのログ |
DEBUG | 詳細なデバッグ情報 |
ERROR | エラー情報のみ |
OpenSearch: OI2インスタンスタイプのサポート (#36700)
OpenSearch ServiceでOI2インスタンスタイプがサポートされました。OI2はOpenSearch固有のインスタンスタイプで、ローカルNVMeストレージを使用し、EBSボリュームをサポートしていません。
import * as opensearch from 'aws-cdk-lib/aws-opensearchservice';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
declare const vpc: ec2.Vpc;
const domain = new opensearch.Domain(this, 'Domain', {
version: opensearch.EngineVersion.OPENSEARCH_2_17,
vpc,
// OI2インスタンスタイプを使用(ローカルNVMeストレージ)
capacity: {
dataNodeInstanceType: 'oi2.xlarge.search', // OI2インスタンスタイプ
dataNodes: 2,
},
// OI2はEBSをサポートしないため、無効化が必要
ebs: {
enabled: false, // OI2使用時は必ずfalse
},
});
OI2インスタンスタイプは、R3、I3、R6GD、I4G、I4I、I8G、IM4GN、R7GD、R8GDと同様に、ローカルストレージを使用するインスタンスタイプとして認識されるようになりました。
バグ修正
IAM: IEncryptedResourceがIEnvironmentAwareを継承するように変更 (#36787)
IEncryptedResourceインターフェースがIResourceではなくIEnvironmentAwareを継承するように変更されました。これにより、完全なCDKリソースである必要がなく、環境情報のみを持つ実装でも暗号化グラントと正しく連携できるようになります。
import * as iam from 'aws-cdk-lib/aws-iam';
// IEncryptedResourceを受け取る側での変更
// 以前: IEncryptedResourceはIResourceを拡張していた
// 現在: IEncryptedResourceはIEnvironmentAwareを拡張
// IResourceが必要な場合は型を明示的に指定
function processResource(resource: iam.IEncryptedResource & cdk.IResource) {
// ...
}
// または型ガードを使用
function processResourceSafe(resource: iam.IEncryptedResource) {
if (cdk.Resource.isResource(resource)) {
// resourceはIResourceとして使用可能
}
}
注意: これは破壊的変更です。IEncryptedResourceを受け取る側では、オブジェクトの形状に関する保証が少なくなります。IResourceが引き続き必要な場合は、型をIEncryptedResource & IResourceに変更するか、Resource.isResource()による型ガードを追加してください。
破壊的変更
IAM: IEncryptedResourceの継承元変更
IEncryptedResourceの継承元がIResourceからIEnvironmentAwareに変更されましたGrantableResources.isEncryptedResource()の引数型がIConstructからIEnvironmentAwareに変更されました- 実装者側への影響:
IResourceはIEnvironmentAwareを拡張しているため、既存の実装には変更不要です - 利用者側への影響:
IResourceの機能が必要な場合は、型をIEncryptedResource & IResourceに変更するか、型ガードを使用してください
Alphaモジュール (2.237.0-alpha.0)
Bedrock AgentCore: JWT認可にカスタムクレームとスコープのサポートを追加 (#36810)
Bedrock AgentCoreのRuntimeとGatewayのJWTオーソライザーに、カスタムクレームとスコープの設定機能が追加されました。これにより、より細かい認可制御が可能になります。
import * as agentcore from '@aws-cdk/aws-bedrock-agentcore-alpha';
// Runtimeでのカスタムクレームとスコープの設定
const runtime = new agentcore.Runtime(this, 'Runtime', {
authorizerConfiguration: agentcore.RuntimeAuthorizerConfiguration.customJwt({
issuer: 'https://cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxx',
audience: ['my-app-client-id'],
// カスタムクレームの設定
customClaims: [
agentcore.CustomClaim.match('department', ['engineering', 'data-science']), // 部門制限
agentcore.CustomClaim.match('role', ['admin', 'user']), // ロール制限
],
// 許可するスコープの設定
allowedScopes: ['read', 'write', 'admin'], // 許可するOAuth2スコープ
}),
});
// Gatewayでも同様に設定可能
const gateway = new agentcore.Gateway(this, 'Gateway', {
targets: [/* ... */],
authorizerConfiguration: agentcore.GatewayAuthorizerConfiguration.customJwt({
issuer: 'https://cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxx',
audience: ['my-app-client-id'],
customClaims: [
agentcore.CustomClaim.match('tenant_id', ['tenant-a', 'tenant-b']),
],
allowedScopes: ['api:read', 'api:write'],
}),
});
EKS v2: ALB ControllerにadditionalHelmChartValuesを追加 (#36754)
EKS v2 AlphaのALB Controllerに、Helmチャートの追加設定値を渡すadditionalHelmChartValuesプロパティが追加されました。これにより、WAFの有効化など、より詳細なALB Controllerの設定が可能になります。
import * as eks from '@aws-cdk/aws-eks-v2-alpha';
declare const cluster: eks.Cluster;
// ALB Controllerに追加のHelm値を設定
eks.AlbController.create(this, 'AlbController', {
cluster,
version: eks.AlbControllerVersion.V2_8_2,
// 追加のHelmチャート値
additionalHelmChartValues: {
enableWaf: true, // WAFを有効化
enableWafv2: true, // WAFv2を有効化
enableShield: false, // Shield統合
logLevel: 'info', // ログレベル設定
replicaCount: 2, // レプリカ数
resources: {
limits: {
cpu: '200m',
memory: '256Mi',
},
requests: {
cpu: '100m',
memory: '128Mi',
},
},
},
});
利用可能な設定オプションはaws-load-balancer-controller Helm values.yamlを参照してください。
mixins-preview: Mixins APIをRFC提案に合わせて更新 (#36825)
Mixins PreviewパッケージのAPIが、最新のRFC提案に合わせて更新されました。主な変更点は以下の通りです:
mustApply()がrequireAll()とrequireAny()に分離.with()がサポートされないコンストラクトを静かにスキップするように変更applyTo()の戻り値型がIConstructからvoidに変更EnableVersioningがBucketVersioningに名前変更
import * as mixins from '@aws-cdk/mixins-preview';
import * as s3 from 'aws-cdk-lib/aws-s3';
declare const bucket: s3.Bucket;
// 新しいAPI: requireAll()またはrequireAny()を使用
const applicator = mixins.with(mixins.BucketVersioning.ENABLED)
.requireAll(); // すべての対象コンストラクトに適用されることを要求
applicator.apply(this);
// 適用結果を確認
console.log(applicator.report); // 適用結果のレポート
console.log(applicator.selectedConstructs); // マッチしたコンストラクト一覧
// BucketVersioningの新しい使い方
const bucketWithSuspendedVersioning = mixins.BucketVersioning.suspended(); // バージョニングを一時停止
mixins-preview: S3バケットのKMSキー処理を追加 (#36776)
Vended LogsをS3バケットに配信する際、バケットに関連付けられたカスタマー管理KMSキーの権限を自動的に設定するようになりました。
import * as mixins from '@aws-cdk/mixins-preview';
import * as kms from 'aws-cdk-lib/aws-kms';
import * as s3 from 'aws-cdk-lib/aws-s3';
const key = new kms.Key(this, 'MyKey');
const bucket = new s3.Bucket(this, 'MyBucket', {
encryptionKey: key,
});
// Vended Logsの配信先としてKMSキー付きバケットを使用
// KMSキーには自動的に必要な権限が付与される
declare const myResource: SomeCfnResource;
myResource.with(mixins.CfnResourceTypeMixin.SOME_LOGS.toS3(bucket));
// または明示的にKMSキーを指定
myResource.with(mixins.CfnResourceTypeMixin.SOME_LOGS.toS3(bucket, {
encryptionKey: key, // 明示的に指定も可能
}));
Bedrock AgentCore: 複数スキーマ使用時のコンストラクトID衝突を修正 (#36565)
ApiSchema.fromLocalAsset()やToolSchema.fromLocalAsset()を同じスコープ内で複数回使用した際に発生していたコンストラクトID衝突の問題が修正されました。ファイルパスのMD5ハッシュを使用してユニークなIDを生成するようになりました。
import * as agentcore from '@aws-cdk/aws-bedrock-agentcore-alpha';
// 同じスコープ内で複数のスキーマを使用可能に
const schema1 = agentcore.ToolSchema.fromLocalAsset('./schemas/tool1.json');
const schema2 = agentcore.ToolSchema.fromLocalAsset('./schemas/tool2.json'); // 以前はID衝突エラー
const gateway = new agentcore.Gateway(this, 'Gateway', {
targets: [
new agentcore.McpServerTarget(this, 'Target1', {
toolSchema: schema1,
// ...
}),
new agentcore.McpServerTarget(this, 'Target2', {
toolSchema: schema2,
// ...
}),
],
});
まとめ
AWS CDK v2.237.0は、EKSのOIDCプロバイダー管理の改善、Lambda Kafkaイベントソースのオブザーバビリティ機能、OpenSearchのOI2インスタンスタイプサポートなど、運用性向上に焦点を当てたリリースです。
特に、OidcProviderNativeの追加により、EKS v1からv2への移行がより容易になりました。また、Kafkaイベントソースマッピングのメトリクスとロギング機能は、イベント駆動型アーキテクチャのデバッグと監視に役立ちます。
Alphaモジュールでは、Bedrock AgentCoreのJWT認可機能が強化され、EKS v2のALB Controllerがより柔軟に設定できるようになりました。