概要
AWS CDK v2.231.0では、Lambda Managed Instancesの新機能サポート、EC2インスタンスのメタデータオプション設定機能、すべてのL1リソースへの型安全なヘルパーメソッドの追加など、開発者エクスペリエンスを大幅に向上させる機能が追加されました。また、47個のリソースに対してarnFor<ResourceName>メソッドが追加され、ARN生成がより便利になりました。
新機能
Lambda: Capacity Providers(Managed Instances)のサポート
AWS Lambda Managed Instancesは、長時間実行されるワークロードや大規模なバッチ処理に最適化された新機能です。このリリースで、CDKから完全にサポートされるようになりました。
主な機能
CapacityProviderコンストラクトの追加
新しいCapacityProviderコンストラクトが追加され、Lambda Managed Instancesを簡単に定義できるようになりました:
import * as lambda from 'aws-cdk-lib/aws-lambda';
const provider = new lambda.CapacityProvider(this, 'MyCapacityProvider', {
// インスタンスタイプ(必須)
instanceType: lambda.InstanceType.of(
lambda.InstanceClass.GENERAL_PURPOSE,
lambda.InstanceSize.LARGE
),
// 最小/最大インスタンス数(オプション)
minInstances: 1, // 最小インスタンス数(デフォルト: 0)
maxInstances: 10, // 最大インスタンス数(デフォルト: 100)
// タイムアウト設定(オプション)
idleTimeout: Duration.minutes(5), // アイドルタイムアウト(デフォルト: 15分)
// VPC設定(オプション)
vpc: myVpc,
vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS },
securityGroups: [mySecurityGroup],
// IAMロール(オプション)
role: myRole, // 指定しない場合はマネージドポリシーを持つロールが自動作成される
});
Lambda関数での使用
FunctionコンストラクトおよびVersionコンストラクトでCapacity Providerを使用できます:
// 関数作成時に指定
const fn = new lambda.Function(this, 'MyFunction', {
runtime: lambda.Runtime.NODEJS_20_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda'),
capacityProvider: provider, // Capacity Providerを指定
});
// バージョンでのスケーリング設定
const version = fn.currentVersion;
version.addScalingConfig({
capacityProvider: provider,
minInstances: 2, // このバージョンの最小インスタンス数
maxInstances: 20, // このバージョンの最大インスタンス数
});
ユースケース
Lambda Managed Instancesは以下のようなユースケースに最適です:
- 長時間実行されるバッチ処理(最大15分を超える処理)
- 大規模なデータ処理ワークロード
- 既存のサーバーベースアプリケーションの移行
- 予測可能な負荷パターンを持つアプリケーション
参考: AWS Lambda Managed Instances公式ドキュメント
EC2: インスタンスメタデータオプションの公開
EC2 Instanceコンストラクトで、IMDSv2の設定を含むメタデータオプションを直接設定できるようになりました。これまではエスケープハッチを使う必要がありましたが、L2 APIとして提供されるようになりました。
設定可能なオプション
import * as ec2 from 'aws-cdk-lib/aws-ec2';
const instance = new ec2.Instance(this, 'MyInstance', {
vpc,
instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MICRO),
machineImage: ec2.MachineImage.latestAmazonLinux2023(),
// HTTPメタデータエンドポイントの有効化/無効化
httpEndpoint: true, // デフォルト: true
// IPv6エンドポイントの有効化/無効化
httpProtocolIpv6: false, // デフォルト: false
// メタデータリクエストのホップ制限(1-64)
httpPutResponseHopLimit: 2, // デフォルト: 未設定(CloudFormationのデフォルト値を使用)
// IMDSv2の要求設定
httpTokens: ec2.HttpTokens.REQUIRED, // REQUIRED | OPTIONAL
// デフォルト: AMIとアカウント設定に依存
// インスタンスタグへのメタデータAPIアクセスの有効化
instanceMetadataTags: true, // デフォルト: false
});
HttpTokensオプション
IMDSv2の動作を制御するHttpTokens列挙型が追加されました:
export enum HttpTokens {
OPTIONAL = 'optional', // IMDSv1とIMDSv2の両方を許可
REQUIRED = 'required', // IMDSv2のみを要求(推奨)
}
セキュリティのベストプラクティス
AWSのセキュリティベストプラクティスに従って、IMDSv2を必須にすることが推奨されます:
const instance = new ec2.Instance(this, 'SecureInstance', {
vpc,
instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MICRO),
machineImage: ec2.MachineImage.latestAmazonLinux2023(),
httpTokens: ec2.HttpTokens.REQUIRED, // IMDSv2を必須化
httpPutResponseHopLimit: 1, // コンテナからのアクセスを制限
});
aws-cdk-lib: 47個のリソースにarnFor<ResourceName>メソッドを追加
CloudFormationのARNテンプレートから自動的にARNを構築できるarnFor<ResourceName>メソッドが、47個の追加リソースで利用可能になりました。これにより、全体の約62%(939/1512リソース)のリソースでこのメソッドが利用できるようになりました。
改善内容
- ARNプロパティが直接存在しない場合でも、ARNテンプレートのすべての変数をプロパティにマッピングできる場合は、ARNを補間して生成可能に
- プロパティ名が
ARN(大文字)で終わる場合もサポート - リソース名とプロパティ名のプレフィックスが異なる場合(例:
AWS::BedrockAgentCore::RuntimeがAgentRuntimeプレフィックスを使用)もサポート
使用例
import * as cdk from 'aws-cdk-lib';
// ARN生成メソッドの例
const arnForBucket = cdk.arnForBucket(this, {
bucketName: 'my-bucket',
region: 'us-east-1',
account: '123456789012',
});
aws-cdk-lib: すべてのL1リソースにisCfn<ResourceName>ヘルパーを追加
すべてのCloudFormationリソースクラス(CfnX)に、型安全なチェックを行う静的メソッドisCfn<ResourceName>が追加されました。これにより、TypeScriptの型ナローイングを活用した安全なランタイム型チェックが可能になります。
使用例
import * as s3 from 'aws-cdk-lib/aws-s3';
function processBucket(resource: any) {
// 型ガードとして使用
if (s3.CfnBucket.isCfnBucket(resource)) {
// この時点でresourceはs3.CfnBucket型として扱われる
console.log(resource.bucketName);
console.log(resource.cfnResourceType); // "AWS::S3::Bucket"
}
}
メソッドの実装
各リソースクラスに以下のような静的メソッドが生成されます:
public static isCfnBucket(x: any): x is CfnBucket {
return CfnResource.isCfnResource(x) &&
x.cfnResourceType === CfnBucket.CFN_RESOURCE_TYPE_NAME;
}
このメソッドは以下をチェックします:
- オブジェクトがCfnResourceのインスタンスであること
- cfnResourceTypeが特定のリソースタイプと一致すること
L1 CloudFormationリソース定義の更新
最新のCloudFormationリソース仕様に基づいて、L1リソース定義が更新されました。新しいプロパティやリソースタイプが追加されています。
Alphaモジュール
glue-alpha: Glue Version 5.1のサポート
AWS Glue 5.1がサポートされるようになりました。新しいGlueVersion.V5_1列挙値が追加されています。
import * as glue from '@aws-cdk/aws-glue-alpha';
const job = new glue.Job(this, 'MyJob', {
executable: glue.JobExecutable.pythonEtl({
glueVersion: glue.GlueVersion.V5_1, // Glue 5.1を指定
pythonVersion: glue.PythonVersion.THREE_9,
script: glue.Code.fromAsset('path/to/script.py'),
}),
// その他の設定...
});
AWS Glue 5.1には以下のような改善が含まれています:
- パフォーマンスの向上
- 新しいライブラリとフレームワークのサポート
- バグ修正とセキュリティアップデート
imagebuilder-alpha: Imageコンストラクトのサポート
EC2 Image Builder alphaモジュールに、新しいImageコンストラクトが追加されました。これはCfnImageの高レベルL2コンストラクトです。
基本的な使用例
import * as imagebuilder from '@aws-cdk/aws-imagebuilder-alpha';
import * as iam from 'aws-cdk-lib/aws-iam';
import * as logs from 'aws-cdk-lib/aws-logs';
const image = new imagebuilder.Image(this, 'MyImage', {
// イメージレシピ(必須)
recipe: imagebuilder.ImageRecipe.fromImageRecipeAttributes(this, 'Recipe', {
imageRecipeName: 'my-image-recipe',
}),
// インフラストラクチャ設定(必須)
infrastructureConfiguration: imagebuilder.InfrastructureConfiguration.fromInfrastructureConfigurationName(
this,
'InfraConfig',
'my-infrastructure-configuration',
),
// 配布設定(オプション)
distributionConfiguration: imagebuilder.DistributionConfiguration.fromDistributionConfigurationName(
this,
'DistConfig',
'my-distribution-configuration',
),
// ワークフロー設定(オプション)
workflows: [
{
workflow: imagebuilder.AwsManagedWorkflow.buildImage(this, 'BuildWorkflow'),
onFailure: 'ABORT', // 失敗時の動作
},
],
// 実行ロール(オプション)
executionRole: iam.Role.fromRoleName(this, 'ExecRole', 'my-execution-role'),
// ログ設定(オプション)
logGroup: logs.LogGroup.fromLogGroupName(this, 'LogGroup', 'my-log-group'),
// イメージテスト有効化(オプション、デフォルト: true)
imageTestsEnabled: true,
// イメージスキャン有効化(オプション、デフォルト: false)
imageScanningEnabled: true,
// 拡張メタデータ有効化(オプション、デフォルト: true)
enhancedImageMetadataEnabled: true,
// タグ(オプション)
tags: {
Environment: 'production',
Application: 'my-app',
},
});
// イメージIDを取得
console.log(image.imageId);
コンテナイメージの作成例
const containerImage = new imagebuilder.Image(this, 'ContainerImage', {
recipe: imagebuilder.ContainerRecipe.fromContainerRecipeAttributes(this, 'ContainerRecipe', {
containerRecipeName: 'my-container-recipe',
}),
infrastructureConfiguration: infraConfig,
distributionConfiguration: distConfig,
});
この機能により、EC2 Image Builderでのイメージ作成プロセスをより簡単に定義・管理できるようになりました。
バグ修正
DynamoDB: テーブルリソースポリシーに未サポートアクションが追加される問題の修正
DynamoDBテーブルのリソースポリシーに、サポートされていないアクションが追加される問題が修正されました(#32230)。
この修正により、以下のような問題が解消されます:
- リソースポリシーに無効なアクションが含まれる
- CloudFormationデプロイメント時にエラーが発生する
詳細: #36228
まとめ
AWS CDK v2.231.0では、Lambda Managed Instancesという重要な新機能のサポートが追加され、長時間実行ワークロードをCDKで簡単に定義できるようになりました。また、EC2インスタンスのメタデータオプション設定がL2 APIとして提供されるようになり、セキュリティベストプラクティスの実装が容易になりました。
すべてのL1リソースに型安全なヘルパーメソッド(isCfn<ResourceName>)が追加され、ランタイム型チェックがより安全に行えるようになりました。さらに、47個のリソースでarnFor<ResourceName>メソッドが利用可能になり、ARN生成の利便性が向上しています。
Alphaモジュールでは、Glue 5.1のサポートとImage Builderの新しいImageコンストラクトが追加され、これらのサービスをより簡単に利用できるようになりました。
これらの改善により、AWS CDKの開発者エクスペリエンスがさらに向上し、より安全で効率的なインフラストラクチャコードの記述が可能になります。