TL;DR
AWS Lambda Managed Instances は「Lambda関数を、自分のAWSアカウント内のEC2インスタンス上で動かせる仕組み」
通常LambdaとEC2/ECSの中間にある、定常高負荷向けのLambda実行基盤という理解
メリット
主なメリットは、高トラフィック下でLambdaを使いたい、Lambdaの実行基盤のCPU/ネットワーク要件をカスタマイズしたいというもの。
| 要件 | メリット |
|---|---|
| 常時高トラフィック | EC2ベース料金・Savings Plans・Reserved Instancesを使いやすい |
| CPUやネットワーク性能を選びたい | インスタンスタイプやアーキテクチャを指定・制御できる |
作成手順
作成フローは大きく3段階
- Capacity Providerを作る
VPC、サブネット、SG、IAM operator role、インスタンス要件、最大vCPU、スケーリング設定などを定義する。 - Lambda関数を作る
Compute typeとして Lambda Managed Instances を選び、Capacity Providerに紐づける。 - 関数バージョンをpublishする
Lambda Managed Instancesでは、関数バージョンをpublishするとCapacity Provider上のインスタンスに実行環境が展開されます。AWSのGetting Startedでも、Capacity Provider作成後に関数を作成し、publish-version してからinvokeする流れになっています。
Capacity Providerの作成
aws lambda create-capacity-provider \
--capacity-provider-name my-capacity-provider \
--vpc-config SubnetIds=[$SUBNET_ID],SecurityGroupIds=[$SECURITY_GROUP_ID] \
--permissions-config CapacityProviderOperatorRoleArn=arn:aws:iam::${ACCOUNT_ID}:role/MyCapacityProviderOperatorRole \
--instance-requirements Architectures=[x86_64] \
--capacity-provider-scaling-config MaxVCpuCount=30
Lambda関数の作成
aws lambda create-function \
--function-name my-managed-instance-function \
--package-type Zip \
--runtime python3.13 \
--handler lambda_function.lambda_handler \
--zip-file fileb://function.zip \
--role arn:aws:iam::${ACCOUNT_ID}:role/MyLambdaExecutionRole \
--architectures x86_64 \
--memory-size 2048 \
--ephemeral-storage Size=512 \
--capacity-provider-config LambdaManagedInstancesCapacityProviderConfig={CapacityProviderArn=arn:aws:lambda:${REGION}:${ACCOUNT_ID}:capacity-provider:my-capacity-provider}
参考文献