尧图精选

Serverless Framework 如何配置 AWS Lambda Managed Instances 容量提供程序?

🕒 发布时间:2026/9/11 13:36:42 📁 来源:尧图网络
Serverless Framework 如何配置 AWS Lambda Managed Instances 容量提供程序【免费下载链接】serverless⚡ Serverless Framework – Effortlessly build apps that auto-scale, incur zero costs when idle, and require minimal maintenance using AWS Lambda and other managed cloud services.项目地址: https://gitcode.com/GitHub_Trending/se/serverless如果你要把高流量 Lambda 函数迁移到 AWS Lambda Managed Instances基于 AWS 托管 EC2 基础设施运行、支持单执行环境并发处理多请求的容量模式需要做的事就是在serverless.yml里配置容量提供程序Capacity Provider并通过serverless deploy把对应的 CloudFormation 资源创建出来。本文基于 Managed Instances 官方文档 和 serverless.yml 配置参考给出从最小配置到完整配置的连续操作路径。适用前提函数需要 VPC 配置子网 安全组且所在区域支持 Lambda Managed Instances文档提示该功能仅在特定区域可用具体区域列表以 AWS 文档为准。先满足一个硬性前提VPC 配置容量提供程序要求 VPC 配置缺少subnetIds和securityGroupIds时框架会在打包阶段直接报错错误码LAMBDA_CAPACITY_PROVIDER_MISSING_VPC不会继续部署。VPC 可以写在provider.vpc下由所有容量提供程序继承也可以在单个容量提供程序下单独覆盖。最小配置使用内置的 default 提供程序最简单的写法是给函数指定capacityProvider: default框架会自动创建一个默认容量提供程序provider: name: aws vpc: subnetIds: - subnet-xxx securityGroupIds: - sg-xxx functions: api: handler: handler.api capacityProvider: default其中subnet-xxx、sg-xxx需要替换为你账号中实际的子网 ID 和安全组 ID。文档中的最小配置示例仅展示结构实际部署时请填入真实值。使用最小配置时的默认行为均出自文档自动创建default 容量提供程序继承provider.vpc的 VPC 配置自动创建Operator Role信任lambda.amazonaws.com附加AWSLambdaManagedEC2ResourceOperator托管策略Scaling Mode默认为auto实例要求默认为任意兼容实例类型maxVCpuCount默认无上限使用该提供程序的函数默认memorySize为2048MBmemoryPerVCpu为每 vCPU 2 GBmaxConcurrency默认为 Lambda 服务默认值Node.js 64、Java 32、.NET 32、Python 16扩展方面AWS 默认维持最少 3 个执行环境且无上限这是 AWS 服务默认不是 Serverless Framework 设置的。定义自定义容量提供程序需要控制实例类型、扩缩容方式时在provider下定义capacityProviders。下面是一个完整字段示例各字段在文档中标注为可选provider: name: aws runtime: nodejs24.x vpc: subnetIds: - subnet-xxx securityGroupIds: - sg-xxx capacityProviders: highMem: # 可选自定义 Operator Role ARN。 # 省略时自动创建信任 lambda.amazonaws.com、 # 附加 AWSLambdaManagedEC2ResourceOperator 的角色。 permissions: operatorRole: arn:aws:iam::123456789012:role/MyOperatorRole # 可选该提供程序专属 VPC。省略时使用 provider.vpc。 vpc: subnetIds: - subnet-aaa - subnet-bbb securityGroupIds: - sg-aaa # 可选EC2 实例要求。省略时可使用 x86_64 架构的任意实例类型。 # allowedInstanceTypes 与 excludedInstanceTypes 二者只能配其一。 instanceRequirements: allowedInstanceTypes: - r7g.large - r7g.xlarge architectures: - arm64 # 省略时默认取 provider.architecture # 可选扩缩容配置。 # auto - 服务托管扩缩容manual - 由 scaling.policies 控制 scaling: mode: manual # 该提供程序的最大 vCPU 数12–15000 maxVCpuCount: 200 # manual 模式下的目标跟踪策略 policies: - predefinedMetricType: LambdaCapacityProviderAverageCPUUtilization targetValue: 70 # 可选客户自管的 KMS 密钥 kmsKeyArn: arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012配置时注意两个会被框架提前校验的规则scaling.mode设为manual时必须至少提供一条scaling.policies否则框架抛出错误LAMBDA_CAPACITY_PROVIDER_MANUAL_SCALING_REQUIRES_POLICIESinstanceRequirements中allowedInstanceTypes和excludedInstanceTypes不能同时设置否则抛出LAMBDA_CAPACITY_PROVIDER_INVALID_INSTANCE_REQUIREMENTS。把容量提供程序挂到函数上函数通过capacityProvider字段引用支持三种写法functions: # 1. 按名字引用字符串形式 my-function: handler: index.handler capacityProvider: highMem # 2. 函数级精细控制 etl: handler: handler.etl memorySize: 4096 capacityProvider: # provider.capacityProviders 中定义的名字 # 也可以是外部容量提供程序的 ARN 或内建函数 name: highMem # 单执行环境并发1–1600 maxConcurrency: 100 # 每 vCPU 内存GiB只能是 2、4 或 8 memoryPerVCpu: 4 # 函数级执行环境扩缩容0–15000。 # 注意min 设为 0 时max 也必须设为 0 scaling: min: 5 max: 10 # 3. 直接引用服务外部创建的容量提供程序 my-other-function: handler: index.handler capacityProvider: arn:aws:lambda:us-east-1:123456789012:capacity-provider:external-provider函数级配置的约束条件来自文档与编译逻辑memoryPerVCpu只能是2、4、8其他值会报错LAMBDA_MANAGED_INSTANCES_INVALID_MEMORY使用容量提供程序的函数内存必须至少 2048 MB。如果没有显式配置内存框架会自动把该函数的内存提升到 2048 MB如果显式配置了低于 2048 的值会报错LAMBDA_MANAGED_INSTANCES_INVALID_MEMORY_SIZE多个函数可以引用不同提供程序例如按内存密集型和成本优化型分别定义high-memory、cost-optimized两个提供程序各自通过instanceRequirements.allowedInstanceTypes限定实例族文档中给出了r7g.large/r7g.xlarge与t3.small/t3.medium的示例划分。部署与验证配置写完后用标准部署命令把服务连同容量提供程序一起推送到 AWS详见 deploy 命令参考# 使用默认 stagedev和区域us-east-1 serverless deploy # 指定 stage 与区域 serverless deploy --stage production --region eu-central-1serverless deploy会先执行打包再通过 CloudFormation 部署整个栈因此容量提供程序这类基础设施变更必须走deploy而不是只更新代码的deploy function。部署前后的验证方式变量解析检查运行serverless print见 print 命令参考它会打印变量全部解析后的配置可以确认capacityProviders下各字段没有被变量解析吞掉或拼错。检查生成的 CloudFormation 资源定义容量提供程序后会生成AWS::Lambda::CapacityProvider资源未显式提供 Operator Role 时还会额外生成一个AWS::IAM::Role。按命名规则服务my-service下名为default的提供程序对应的资源物理名示例为容量提供程序DefaultLambdaCapacityProviderOperator RoleLambdaCapacityProviderOperatorRole可以在 CloudFormation 栈或本地生成的模板中核对这两个资源是否存在。部署输出serverless deploy --verbose会展示部署过程中的全部栈事件和 Stack Output可用于定位失败环节。常见问题与限制删除旧提供程序时被函数版本卡住。当provider.versionFunctions启用默认或函数显式设置versionFunction: true时每次发布的函数版本都会关联当时使用的容量提供程序。如果之后更换了函数的capacityProvider并从provider.capacityProviders删掉旧条目CloudFormation 可能报类似这样的错误The capacity provider is currently in use by 1 functions. To delete this capacity provider, first remove its association with arn:aws:lambda:REGION:ACCOUNT:capacity-provider:my-service-dev-HighMemLambdaCapacityProvider-XXXXXXXX.原因是旧的函数版本仍关联着旧提供程序。文档给出的解决路径确认流量不再走旧函数版本后先删除旧版本再删提供程序如果只依赖$LATEST可以直接关闭自动版本化provider: versionFunctions: false代码必须线程安全。Managed Instances 支持单执行环境并发处理多个请求执行环境中的全局变量和共享资源会被并发访问文档明确要求函数代码保持 thread-safe 且无状态。Operator Role 权限。每个容量提供程序都需要一个带AWSLambdaManagedEC2ResourceOperator托管策略的 Operator Role自己提供 ARN 时该角色必须附加此策略或等效权限。区域可用性。Lambda Managed Instances 只在特定区域提供部署前先确认目标区域的支持情况以 AWS 文档为准。文档中的最佳实践建议出自 managed-instances.md多数场景先用auto模式网络相同时用默认 VPC 继承用maxVCpuCount控制成本上限函数级min/max做细粒度控制通过 Savings Plans 或预留实例优化成本并监控执行环境使用量来调整资源分配。【免费下载链接】serverless⚡ Serverless Framework – Effortlessly build apps that auto-scale, incur zero costs when idle, and require minimal maintenance using AWS Lambda and other managed cloud services.项目地址: https://gitcode.com/GitHub_Trending/se/serverless创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →