
AWS Lambda Managed Instances を API Gateway の Lambda プロキシ統合で実行してみた
こんにちは、製造ビジネステクノロジー部の若槻です。
AWS Lambda Managed Instances (LMI) は、従来の Lambda と同等のイベントソース統合をサポートしています。関数が Capacity Provider 上で稼働するという大きな違いがある一方で、従来の開発体験を維持できるのは嬉しいポイントです。

AWS re:Invent 2025 - Lambda Managed Instances: EC2 Power with Serverless Simplicity (CNS382) より
そこで今回は、AWS Lambda Managed Instances を API Gateway の Lambda プロキシ統合でイベント実行する構成を試してみました。サーバーレスパターンで Web API を実装する際によく用いられる構成ではあるので、念の為に動かしてみた次第です。
やってみた
Lambda ハンドラー
Lambda ハンドラー関数の実装については下記を踏襲して Serverless Express で API バックエンドを実装します。
使用するバージョン体系は以下の通りです。
- Node.js 24
- Express v5
- Serverless Express v5 (beta)
ハンドラーコードは以下の通りとなります。
import serverlessExpress from "@codegenie/serverless-express";
import express, { Request, Response } from "express";
const app = express();
app.get("/hello", async (_: Request, res: Response): Promise<void> => {
res.status(200).send({ message: "Hello, world!" });
});
export const handler = serverlessExpress({ app });
インフラ実装
インフラ実装には AWS CDK を使用しました。
VPC は予め作成したものを使用します。
VPC 定義コード
import * as ec2 from "aws-cdk-lib/aws-ec2";
import { Construct } from "constructs";
/**
* VPC 実装
*
* MEMO: VPC から各種 AWS サービスへのネットワーク経路確保のために NAT Gateway を配置する
*/
export class VpcConstruct extends Construct {
public readonly vpc: ec2.Vpc;
constructor(scope: Construct, id: string) {
super(scope, id);
this.vpc = new ec2.Vpc(this, "Default", {
subnetConfiguration: [
/**
* NAT Gateway を配置するためのパブリックサブネット
*/
{
name: "Public",
subnetType: ec2.SubnetType.PUBLIC,
},
/**
* Lambda 関数を配置するためのプライベートサブネット
*/
{
name: "PrivateWithEgress",
subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
},
],
});
}
}
CDK スタック全体のソースコードは以下となります。
import * as cdk from "aws-cdk-lib";
import * as apigateway from "aws-cdk-lib/aws-apigateway";
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],
}
);
/**
* LMI 用 Lambda 関数作成
*/
const lmiFunction = new lambda_nodejs.NodejsFunction(this, "LmiFunction", {
entry: "src/handler.ts",
runtime: lambda.Runtime.NODEJS_24_X, // LMI では Node.js 22.x 以上が必須
});
/**
* Capacity Provider に Lambda 関数を追加
*/
capacityProvider.addFunction(lmiFunction);
/**
* API Gateway REST API の作成、Lambda プロキシ統合設定
*/
new apigateway.LambdaRestApi(this, "RestApi", {
handler: lmiFunction,
});
}
}
上記デプロイにより、プロキシ統合設定と Capacity Provider 設定が行われた Lambda 関数を作成します。
作成された Lambda 関数です。ちゃんと API Gateway がイベントソースとして設定されていますね。

動作確認
API を呼び出すと、期待通りのレスポンスが返りました。
$ curl https://5z5a0wsbbb.execute-api.ap-northeast-1.amazonaws.com/prod/hello
{"message":"Hello, world!"}
メトリクスでも LMI 実行環境上での同時実行が記録されています。

X-Ray のトレースでも、REST API と Lambda 関数の呼び出しが確認できました。

良さそうですね。
おわりに
AWS Lambda Managed Instances を API Gateway の Lambda プロキシ統合で実行してみました。
Lambda プロキシ統合により実行される関数上で Serverless Express を動かす実装はよく用いられるパターンなので、ちゃんと動かせて良かったです。
以上







