如何通过私有IP从AWS Lambda访问EC2上的Cassandra?
没问题,我帮你整理几个靠谱的方案,让你的Java Lambda能通过私有IP访问到那个部署在无公网EC2上的Cassandra:
方案1:把Lambda放进Cassandra所在的VPC(最推荐,低延迟且简单)
这是最直接的方式,同VPC内的资源可以直接通过私有IP通信:
- 打开Lambda函数的配置页面,找到VPC选项卡,点击「编辑」。
- 选择Cassandra EC2实例所在的VPC,然后勾选该VPC下的私有子网(就是你部署Cassandra的那个子网,确保它没有公网访问能力,符合你的配置)。
- 配置安全组规则:
- 给Lambda分配一个专属安全组,这个安全组的出站规则要允许访问Cassandra安全组的
9042端口(Cassandra默认的CQL通信端口)。 - 同时,Cassandra EC2的安全组入站规则要添加一条,允许来自Lambda安全组的
9042端口访问。
- 给Lambda分配一个专属安全组,这个安全组的出站规则要允许访问Cassandra安全组的
- 处理Lambda的外部依赖访问:因为Lambda在私有子网里,默认没法访问公网或AWS公共服务(比如CloudWatch日志、S3),所以你需要二选一:
- 在VPC的公有子网部署NAT网关,让私有子网的流量通过NAT网关走公网访问外部;
- 配置对应的VPC端点(比如CloudWatch Logs、S3的VPC端点),让Lambda直接通过VPC内部访问这些服务,更安全还省成本。
方案2:用VPC对等连接(如果Lambda必须在另一个VPC)
如果你的Lambda已经部署在其他VPC,没法迁移,那可以设置VPC对等连接打通两个网络:
- 在AWS控制台创建两个VPC之间的对等连接,注意两个VPC的CIDR范围不能重叠(比如Cassandra VPC是10.0.0.0/16,Lambda VPC就得是10.1.0.0/16这类不冲突的段)。
- 更新两个VPC的路由表:
- 在Cassandra VPC的私有子网路由表里,添加一条指向Lambda VPC CIDR的路由,目标选对等连接的ID。
- 在Lambda VPC的子网路由表里,添加一条指向Cassandra VPC CIDR的路由,同样目标选对等连接的ID。
- 安全组配置和方案1一致:确保两边的安全组允许
9042端口的双向访问。
方案3:使用Transit Gateway(多VPC/多账号场景)
如果你的环境有多个VPC甚至多个AWS账号需要访问这个Cassandra集群,Transit Gateway是更灵活的可扩展方案:
- 创建一个Transit Gateway,然后把Cassandra所在的VPC和Lambda所在的VPC都关联到这个网关。
- 配置Transit Gateway的路由表,确保两个VPC的CIDR范围可以互相路由。
- 同样配置安全组规则,允许Lambda和Cassandra之间的
9042端口通信。
几个额外的注意点
- 你的Lambda是Java写的,记得在Cassandra驱动的配置里直接填私有IP(10.0.x.x),别用公网域名,因为Cassandra没有公网IP。
- 测试的时候,可以先在同一个VPC里找个EC2实例,用
cqlsh命令测试连接Cassandra的私有IP和端口,确认网络没问题再配置Lambda,这样能快速排除网络故障。 - 可以通过CloudWatch的
LambdaVpcMetrics监控Lambda的网络连接状态,比如ENI的可用性、流量情况,方便排查问题。
内容的提问来源于stack exchange,提问作者sat
相关产品推荐
相关产品推荐

