You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda VPC ENI溢出:每次调用创建新ENI触发超限报错求助

解决Lambda调用频繁创建新ENI导致配额超限的问题

我之前在处理Lambda VPC访问场景时也踩过这个ENI堆积的坑,给你分享几个经过实践验证的解决方案:

  • 配置预留并发,提前复用ENI
    Lambda的ENI是和并发执行实例绑定的,默认弹性并发模式下,每次冷启动新实例都会创建新ENI。如果你开启预留并发,Lambda会提前创建好对应数量的ENI并保持复用,避免每次请求都新建资源。操作起来很简单:在Lambda控制台的函数配置里找到「并发」选项,根据业务峰值设置合理的预留并发值——这不仅能减少ENI创建量,还能降低函数冷启动时间。

  • 优化Lambda执行逻辑,减少并发实例数
    ENI的数量直接和Lambda的并发实例数挂钩。如果你的函数执行时间过长、逻辑冗余,会导致大量实例同时运行,ENI自然就堆起来了。可以从这几个方向优化:

    • 精简代码逻辑,砍掉不必要的IO操作或冗余计算
    • 把非核心任务改成异步处理,缩短单实例执行时长
    • 调整触发策略,比如对批量请求做合并处理,避免短时间内大量触发函数
  • 确认Lambda拥有ENI删除权限
    虽然你提到角色有ec2:*权限,但有时候可能存在隐性限制(比如组织级的SCP策略)。Lambda在实例终止后需要主动删除对应的ENI,如果缺失ec2:DeleteNetworkInterface权限,ENI就会残留堆积。建议遵循最小权限原则,给角色配置必要的ENI操作权限即可:

    {
        "Effect": "Allow",
        "Action": [
            "ec2:CreateNetworkInterface",
            "ec2:DescribeNetworkInterfaces",
            "ec2:DeleteNetworkInterface"
        ],
        "Resource": "*"
    }
    
  • 自动清理闲置ENI
    可以创建一个独立的Lambda函数(不要放在同一个VPC里,避免触发同样的问题),定时筛选出属于Lambda的闲置ENI(比如Description包含Lambda managed、状态为available的资源),然后自动删除。示例Python代码片段:

    import boto3
    
    ec2 = boto3.client('ec2')
    
    def lambda_handler(event, context):
        enis = ec2.describe_network_interfaces(Filters=[
            {'Name': 'description', 'Values': ['Lambda managed*']},
            {'Name': 'status', 'Values': ['available']}
        ])['NetworkInterfaces']
        for eni in enis:
            ec2.delete_network_interface(NetworkInterfaceId=eni['NetworkInterfaceId'])
    
  • 调整ENI配额(最后手段)
    如果前面的优化都没法满足业务需求,你可以向AWS支持申请提升对应区域的ENI配额。默认每个区域的ENI配额是350个,提交申请时说明你的业务场景和需要的配额数量,一般AWS都会审批通过。

补充说明:Lambda的ENI在实例终止后会保留一段时间(通常是几小时)才会自动删除,但如果函数触发频率太高,回收速度赶不上创建速度,就会触发配额超限。

内容的提问来源于stack exchange,提问作者Elad Hazan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:11:55