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

如何通过Lambda函数与私有子网内无公网IP的EC2实例通信

Lambda访问私有子网无公网IP EC2的实现方案

要实现Lambda与私有子网内无公网IP的EC2通信,核心是保证两者的网络链路在内网可达,不需要经过公网路由,以下是3种生产环境常用的可行方案:

方案1:将Lambda部署到与EC2同VPC的私有子网(最常用)

这是成本最低、配置最简单的方案,适合同账号同VPC的场景:

  • 进入Lambda控制台的配置页,开启「VPC访问」,选择和目标EC2实例相同的VPC,选择至少2个可用区的私有子网(保障高可用)
  • 配置Lambda的安全组:出站规则允许访问EC2的服务端口
  • 配置EC2的安全组:入站规则允许Lambda的安全组ID访问对应服务端口,无需开放公网入口
  • 给Lambda执行角色添加AWSLambdaVPCAccessExecutionRole托管权限,保证Lambda有权限在VPC内创建弹性网卡(ENI)完成网络挂载
  • 注意:部署到VPC内的Lambda默认无法访问公网,若同时需要公网访问能力,需要为VPC私有子网配置NAT网关

方案2:通过AWS PrivateLink访问(适合跨账号/跨VPC场景)

如果不想将Lambda部署到VPC,或者需要跨账号、跨VPC访问的场景可以使用该方案,网络链路全程走AWS内部骨干网,安全性更高:

  • 在EC2所在的VPC内部署内网应用负载均衡器(ALB),将目标EC2实例注册到ALB的目标组,验证ALB到EC2的连通性正常
  • 为该内网ALB创建PrivateLink端点服务,配置允许访问的账号白名单
  • 在Lambda侧配置对应PrivateLink的VPC端点,Lambda无需挂载到VPC即可通过该端点访问EC2上的服务

方案3:通过公网跳板转发(仅适合临时调试场景)

该方案需要暴露公网入口,仅建议调试时临时使用,不推荐生产环境长期部署:

  • 在EC2所在VPC的公有子网部署带公网IP的EC2跳板机,或者配置NAT网关,设置端口转发规则,将跳板机指定端口的请求转发到私有EC2的服务端口
  • 配置跳板机的安全组入站规则,仅允许Lambda的公网出口IP段访问转发端口
  • Lambda通过跳板机的公网IP+转发端口访问EC2的服务
连通性验证

配置完成后可以在Lambda中编写简单的测试代码验证连通性,示例代码参考:

import urllib3

def lambda_handler(event, context):
    http = urllib3.PoolManager()
    # 替换为EC2的私有IP+服务端口,或者PrivateLink端点地址
    resp = http.request('GET', 'http://10.0.1.100:8080/health')
    print(f"响应状态码:{resp.status}, 响应内容:{resp.data.decode('utf-8')}")
    return resp.status

如果出现访问失败的情况,可以查看VPC流日志排查安全组、网络ACL的规则是否存在拦截。

内容的提问来源于stack exchange,提问作者Thiwanka Wickramage

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 07:06:08