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

AWS Lambda关联VPC后无法访问互联网问题求助

问题解决方案

核心原因分析

169.254.x.x是AWS Lambda弹性网络接口(ENI)的链路本地地址,出现这种情况说明Lambda没有成功获取到VPC的私有IP地址,通常和VPC配置、Lambda的网络分配逻辑相关;而无法访问互联网则是因为关联VPC后的Lambda需要通过NAT网关/实例才能访问公网,默认VPC的公有子网配置可能不满足要求。

分步解决方案

1. 检查VPC子网配置与Lambda的子网选择

  • 确保Lambda关联的是私有子网(不要直接用公有子网,除非有特殊配置)
  • 私有子网的路由表中必须包含指向NAT网关的路由(目标0.0.0.0/0指向NAT网关的ID)
  • 确认NAT网关部署在公有子网中,且公有子网有指向Internet网关(IGW)的路由(目标0.0.0.0/0指向IGW)

2. 验证Lambda的ENI状态与IP分配

  • 进入AWS控制台的Lambda函数页面,查看「配置」->「VPC」选项卡,确认已关联的子网和安全组
  • 到EC2控制台的「网络接口」页面,找到Lambda对应的ENI,检查是否已分配到VPC私有IP地址:
    • 如果ENI没有私有IP,删除Lambda的VPC关联后重新配置
    • 确保VPC的可用IP地址充足,没有耗尽

3. 检查安全组与网络ACL规则

  • Lambda的安全组需允许出站流量(目标0.0.0.0/0,端口53用于DNS,以及其他需要的公网端口)
  • 私有子网的网络ACL需允许出站流量(所有协议,目标0.0.0.0/0)和入站流量(对应出站流量的响应,比如Ephemeral端口范围)
  • NAT网关所在的公有子网网络ACL需允许入站的Ephemeral端口流量和出站的公网流量

4. 修正测试代码(可选,用于更精准排查)

可以修改测试代码,同时打印当前IP地址,方便确认网络状态:

import socket
def lambda_handler(event, context):
    try:
        # 获取本地IP
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(("8.8.8.8", 80))
        local_ip = s.getsockname()[0]
        s.close()
        
        # 测试互联网连接
        socket.create_connection(("8.8.8.8", 53), timeout=1)
        return f"Success!!! Local IP: {local_ip}"
    except OSError as e:
        return f"No internet. Error: {str(e)}. Local IP: {local_ip if 'local_ip' in locals() else 'Unknown'}"

5. 确认VPC端点配置(如果使用)

如果VPC中配置了Lambda的VPC端点,确保端点的策略允许Lambda的相关操作,且不会影响公网路由


内容的提问来源于stack exchange,提问作者Андрей Вербицкий

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:43:32