[AWS CDK] Lambda (デフォルト) を LMI 化したい(あるいはその逆)を行う際の注意点
こんにちは、製造ビジネステクノロジー部の若槻です。
AWS re:Invent 2025 でAWS Lambda Managed Instances (LMI) が登場しましたね。これにより Lambda 関数は大きく分けて次の 2 つのタイプに分類されるようになりました。
- Lambda (デフォルト)
- Lambda Managed Instances
この LMI を導入したいとなった際に、すでに作成済みの Lambda (デフォルト) を LMI 化したい(あるいはその逆)というニーズが出てくるかと思います。
今回は、関数の Lambda (デフォルト) と LMI を変換する際に AWS CDK を利用した場合の注意点について解説します。
はじめに結論
結論として、AWS CDK で LMI を利用する場合、以下の点に注意が必要です。
- Lambda Managed Instances の関数作成時は以下の操作を同時に行う必要がある。
- Lambda 関数の作成
- Capacity Provider への追加
- Lambda Managed Instances の関数削除時は以下の操作を同時に行う必要がある。
- Capacity Provider からの削除
- Lambda 関数の削除
これはつまり、Lambda (デフォルト) 関数を LMI 化 (Capacity Provider に追加) したり、LMI 化された Lambda 関数をデフォルト化 (Capacity Provider から削除) といった直接の変換はできない、ということを意味します。
検証内容
実際に AWS CDK で試してみました。
Capacity Provider への追加時
まず、AWS CDK で LMI 化したい Lambda 関数を Capacity Provider に追加するコードは以下のようになります。
import * as cdk from "aws-cdk-lib";
import * as ec2 from "aws-cdk-lib/aws-ec2";
import * as lambda from "aws-cdk-lib/aws-lambda";
import * as lambda_nodejs from "aws-cdk-lib/aws-lambda-nodejs";
import { Construct } from "constructs";
import { VpcConstruct } from "./constructs/vpc";
export class SampleStack extends cdk.Stack {
constructor(scope: Construct, id: string) {
super(scope, id);
/**
* VPC 作成
*/
const vpcConstruct = new VpcConstruct(this, "Vpc");
const vpc = vpcConstruct.vpc;
/**
* セキュリティグループ
*/
const securityGroup = new ec2.SecurityGroup(this, "SecurityGroup", {
vpc,
});
/**
* Capacity Provider
*/
const capacityProvider = new lambda.CapacityProvider(
this,
"CapacityProvider",
{
subnets: vpc.selectSubnets({
subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
}).subnets,
securityGroups: [securityGroup],
},
);
/**
* Lambda 関数 (デフォルトとしてデプロイ済み)
*/
const lambdaFunction = new lambda_nodejs.NodejsFunction(
this,
"LambdaFunction",
{
entry: "src/handler.ts",
runtime: lambda.Runtime.NODEJS_24_X,
},
);
/**
* Capacity Provider に Lambda 関数を追加(新規追加したコード)
*/
capacityProvider.addFunction(lambdaFunction);
}
}
上記では、デフォルトとしてデプロイ済みの Lambda 関数を Capacity Provider に追加し、LMI 化しようとしています。
しかし、デプロイしたら以下のようなエラーが発生しました。
9:10:36 AM | UPDATE_FAILED | AWS::Lambda::Function | LambdaFunctionBF21E41F
Resource handler returned message: "CapacityProviderConfig isn't supported for Lambda Default functions. (Service: Lambda, Status Code: 400, Request ID: 90
331038-8ef4-44a8-8157-c5363e2d2543) (SDK Attempt Count: 1)" (RequestToken: 52633cab-8b14-f1e2-200c-dfe094b1f366, HandlerErrorCode: InvalidRequest)
マネジメントコンソールからも同じエラーが確認できます。

"CapacityProviderConfig isn't supported for Lambda Default functions. とあるので、デフォルトの Lambda 関数にはキャパシティプロバイダーを設定できないことが分かります。
なのでワークアラウンドとしては、下記の手順を踏む必要があります。
- LMI 化したい Lambda 関数を削除デプロイ
- 関数の作成と、Capacity Provider への追加を同時にデプロイ
Capacity Provider からの削除時
逆に、AWS CDK で LMI 化された Lambda 関数を Capacity Provider から削除する場合はどうなるでしょう。
import * as cdk from "aws-cdk-lib";
import * as ec2 from "aws-cdk-lib/aws-ec2";
import * as lambda from "aws-cdk-lib/aws-lambda";
import * as lambda_nodejs from "aws-cdk-lib/aws-lambda-nodejs";
import { Construct } from "constructs";
import { VpcConstruct } from "./constructs/vpc";
export class SampleStack extends cdk.Stack {
constructor(scope: Construct, id: string) {
super(scope, id);
/**
* VPC 作成
*/
const vpcConstruct = new VpcConstruct(this, "Vpc");
const vpc = vpcConstruct.vpc;
/**
* セキュリティグループ
*/
const securityGroup = new ec2.SecurityGroup(this, "SecurityGroup", {
vpc,
});
/**
* Capacity Provider
*/
const capacityProvider = new lambda.CapacityProvider(
this,
"CapacityProvider",
{
subnets: vpc.selectSubnets({
subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
}).subnets,
securityGroups: [securityGroup],
},
);
/**
* Lambda 関数 (LMI としてデプロイ済み)
*/
const lambdaFunction = new lambda_nodejs.NodejsFunction(
this,
"LambdaFunction",
{
entry: "src/handler.ts",
runtime: lambda.Runtime.NODEJS_24_X,
},
);
/**
* コメントアウトして Capacity Provider から Lambda 関数を削除
*/
// capacityProvider.addFunction(lambdaFunction);
}
}
上記では、LMI 化としてデプロイ済みの Lambda 関数を Capacity Provider から削除し、デフォルト化しようとしています。
しかし、デプロイしたら以下のようなエラーが発生しました。
10:22:29 PM | UPDATE_FAILED | AWS::Lambda::Function | LambdaFunctionBF21E41F
Resource handler returned message: "Invalid request provided: Removing CapacityProviderConfig is not supported for Lambda functions." (RequestToken: 532d60
ff-0c3c-0a5d-39ab-d52a53503aff, HandlerErrorCode: InvalidRequest)
マネジメントコンソールからも同じエラーが確認できます。

Removing CapacityProviderConfig is not supported for Lambda functions. とあります。こちらは若干意味が分かりづらいですが、LMI 化された Lambda 関数をキャパシティプロバイダーを削除することはサポートされていない、という意味です。
ワークアラウンドとしては、下記の手順を踏む必要があります。
- 関数の削除と、Capacity Provider からの削除を同時にデプロイ
- デフォルト化したい Lambda 関数作成を再デプロイ
おわりに
関数の Lambda (デフォルト) と LMI を変換する際に AWS CDK を利用した場合の注意点についてでした。
はじめ "CapacityProviderConfig isn't supported for Lambda Default functions. というエラーが出た際には、CDK パッケージのバージョンが古いのだと勘違いしてハマってしまいました。
しかしよく考えると、マネジメントコンソールの Capacity Provider のメニューには、Lambda 関数の 作成 はありますが、追加のメニューはありません。同じ Lambda 関数だからといっておいそれと変換できるわけではない、ということですね。

LMI を導入したい方が同じ轍を踏まないように、この記事が参考になれば幸いです。
以上







