如何让同VPC内的Lambda通过公网域名访问Beanstalk应用时流量保留在VPC内?
这个问题我之前也踩过坑,核心问题出在DNS解析逻辑上——你用的公网域名mydomain.org默认会被解析到Beanstalk应用的公网IP,所以Lambda的请求才会绕去公网走NAT网关。而你配置的Elastic Beanstalk VPC端点其实是给AWS管理服务用的(比如控制台操作Beanstalk环境时的API通信),根本管不到应用层的流量调用,所以没用。
下面是一套能解决问题的步骤:
在Route53创建私有托管区,配置内部DNS记录
你需要在Route53里为mydomain.org创建一个私有托管区,关联到你的Lambda和Beanstalk所在的VPC。然后在这个私有托管区里添加A记录(或者CNAME记录),把mydomain.org指向Beanstalk应用的内部私有资源:比如Beanstalk环境对应的内部ELB域名,或者EC2实例的私有IP。这样当VPC内的Lambda解析mydomain.org时,会直接拿到内部IP,流量就完全在VPC内部流转了。确保VPC的DNS配置正确
检查你的VPC是否开启了enableDnsHostnames和enableDnsSupport这两个参数——只有开启了这两项,VPC内的资源才能正常解析私有托管区的DNS记录。你可以在VPC控制台的「VPC设置」里找到这两个选项,要是没开就手动开启。调整安全组规则
现在流量走VPC内部,你需要给Beanstalk应用的安全组添加入站规则:允许Lambda所在子网的私有IP段,或者直接允许Lambda的安全组访问对应的HTTP/HTTPS端口(比如80/443)。这样就不用再把NAT网关的公网IP加入白名单了。
这样配置完之后,Lambda调用mydomain.org/api/dostuff时,DNS会解析到内部地址,流量完全留在VPC里,既安全又不会有公网延迟的问题。
备注:内容来源于stack exchange,提问作者revy

