概要
AWS CDK v2.175.0では、ECSのフォルトインジェクション機能のサポート、KMSの署名・検証権限付与メソッドの追加、CLIの改善など、安全性と開発体験を向上させる複数の新機能が導入されました。また、ECSサービスのデフォルト設定に関する重要な警告機能も追加されています。
新機能
ECS: フォルトインジェクション機能のサポート
ECSサービスでAWS Fault Injection Simulator(FIS)を使用できるようにするenableFaultInjectionプロパティが追加されました。この機能により、カオスエンジニアリングテストでECSタスクの障害シミュレーションが可能になります。
使用例:
import * as ecs from 'aws-cdk-lib/aws-ecs';
const service = new ecs.FargateService(this, 'MyService', {
cluster: cluster,
taskDefinition: taskDefinition,
// フォルトインジェクションを有効化
enableFaultInjection: true, // FISでのカオステストを可能にする
});
PR: #32598
ECS: デフォルトのminHealthyPercentに関する警告
ECSサービスでminHealthyPercentを明示的に指定しない場合、CDKはCloudFormationのデフォルト(100%)を50%にオーバーライドします。これにより、デプロイメントやFargateメンテナンス中に実行中のタスク数が最大50%まで減少する可能性があります。
v2.175.0から、この挙動が意図的でない場合に問題を引き起こす可能性があるため、警告が表示されるようになりました。
警告が表示されるケース:
BaseServiceでminHealthyPercentがundefinedの場合:@aws-cdk/aws-ecs:minHealthyPercentEc2Serviceでデーモンモード(daemon: true)かつminHealthyPercentがundefinedの場合:@aws-cdk/aws-ecs:minHealthyPercentDaemonExternalServiceでminHealthyPercentがundefinedの場合:@aws-cdk/aws-ecs:minHealthyPercentExternal
推奨される対応:
import * as ecs from 'aws-cdk-lib/aws-ecs';
const service = new ecs.FargateService(this, 'MyService', {
cluster: cluster,
taskDefinition: taskDefinition,
// 一貫した負荷処理が必要な場合(ALB経由のWebトラフィックなど)
minHealthyPercent: 100, // デプロイ中も全タスクを維持
maxHealthyPercent: 200, // ローリングアップデートを可能にする
});
KMS: 署名・検証権限付与メソッドの追加
KMSキーを使用した署名と検証操作のための新しい権限付与メソッドが追加されました。デジタル署名を必要とするアプリケーションで、より細かい権限管理が可能になります。
新しいメソッド:
grantSign():kms:Sign権限を付与grantVerify():kms:Verify権限を付与grantSignVerify():kms:Signとkms:Verifyの両方を付与
使用例:
import * as kms from 'aws-cdk-lib/aws-kms';
import * as lambda from 'aws-cdk-lib/aws-lambda';
// 非対称署名用のKMSキーを作成
const signingKey = new kms.Key(this, 'SigningKey', {
keySpec: kms.KeySpec.ECC_NIST_P256, // 楕円曲線暗号
keyUsage: kms.KeyUsage.SIGN_VERIFY, // 署名・検証用
});
// Lambda関数に署名権限のみを付与
const signerFunction = new lambda.Function(this, 'SignerFunction', {
runtime: lambda.Runtime.NODEJS_20_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda'),
});
signingKey.grantSign(signerFunction); // kms:Sign権限を付与
// 別のLambda関数に検証権限のみを付与
const verifierFunction = new lambda.Function(this, 'VerifierFunction', {
runtime: lambda.Runtime.NODEJS_20_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda'),
});
signingKey.grantVerify(verifierFunction); // kms:Verify権限を付与
// 両方の権限が必要な場合
const bothFunction = new lambda.Function(this, 'BothFunction', {
runtime: lambda.Runtime.NODEJS_20_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda'),
});
signingKey.grantSignVerify(bothFunction); // kms:Signとkms:Verifyを付与
CLI: 存在しないスタックに対する警告
cdk destroyコマンドで存在しないスタック名を指定した場合、警告が表示されるようになりました。これにより、タイポや誤ったスタック名の指定を早期に検出できます。
動作:
- 存在しないスタックが指定された場合、警告メッセージが表示される
Are you sure you want to delete:の確認メッセージは表示されない- コマンド自体は失敗せず、警告のみが出力される
PR: #32636 関連Issue: #32545, #27179
EKS: GPUインスタンスチェックの更新
EKS Nodegroupで使用されるGPUインスタンスタイプのチェックロジックが更新され、最新のGPUインスタンスタイプに対応しました。
CloudFormationリソース定義の更新
L1 CloudFormationリソース定義が更新され、最新のAWSサービス機能に対応しました。
Alphaモジュールの変更
S3 Object Lambda: S3アクセスポイントARNの公開 (alpha)
@aws-cdk/aws-s3objectlambda-alphaモジュールで、S3アクセスポイントのARNがプロパティとして公開されるようになりました。これにより、ARN文字列を手動で構築する必要がなくなり、実装が簡素化されます。
使用例:
import * as s3objectlambda from '@aws-cdk/aws-s3objectlambda-alpha';
import * as s3 from 'aws-cdk-lib/aws-s3';
import * as lambda from 'aws-cdk-lib/aws-lambda';
// S3 Object Lambda Access Pointを作成
const objectLambdaAccessPoint = new s3objectlambda.AccessPoint(this, 'MyObjectLambda', {
bucket: bucket,
handler: transformFunction,
accessPointName: 'my-object-lambda-ap',
supportsGetObject: true,
});
// ARNを直接取得可能に
const arn = objectLambdaAccessPoint.accessPointArn; // 新しいプロパティ
// 他のリソースで使用
new s3.BucketPolicy(this, 'Policy', {
bucket: bucket,
// ARNを直接参照できる
});
App Runner: ServiceクラスがIServiceを実装 (alpha)
@aws-cdk/aws-apprunner-alphaモジュールのServiceクラスがIServiceインターフェースを正しく実装するようになりました。これにより、型安全性が向上し、他のコンストラクトとの相互運用性が改善されます。
バグ修正
CLI: 環境変数CI=falseが設定できない問題の修正
環境変数CI=falseを設定しても正しく認識されない問題が修正されました。
PR: #32749
CLI: requiresRefresh関数がnullを尊重しない問題の修正
CLIのrequiresRefresh関数がnull値を正しく処理しない問題が修正されました。
CloudWatch: メトリクスのregionとaccountIdのレンダリング修正
メトリクスに直接設定されたregionとaccountIdが正しくレンダリングされるようになりました。
ECS: canContainersAccessInstanceRoleの非推奨化
canContainersAccessInstanceRole=falseの設定で使用されるLinuxコマンドが古くなっていたため、更新されました。また、このプロパティは非推奨(deprecated)としてマークされました。
Integ Runner: recommended-feature-flags.jsonが見つからないエラーの修正 (alpha)
@aws-cdk/integ-runner-alphaでENOENTエラーが発生する問題が修正されました。
PR: #32750
まとめ
AWS CDK v2.175.0は、安全性と開発体験の向上に焦点を当てたリリースです。特に、ECSサービスのデフォルト設定に関する警告機能は、本番環境での予期しない問題を防ぐのに役立ちます。KMSの署名・検証権限付与メソッドの追加により、よりきめ細かい権限管理が可能になり、セキュリティベストプラクティスの実装が容易になりました。
Alphaモジュールでは、S3 Object LambdaとApp Runnerの改善により、これらのサービスの使い勝手が向上しています。
既存のCDKプロジェクトをお持ちの場合は、ECSサービスのminHealthyPercent設定を確認し、必要に応じて明示的に設定することをお勧めします。