我正在运行一个 lambda 函数,我想访问私有数据库服务器和互联网。我可以很好地访问数据库,但无法访问互联网。
设置:
VPC (10.0.0.0/16)
Public-Subnet (10.0.0.0/24)
NAT-Security-Group (see security groups below)
NAT-Server (AMI NAT instance)
Private-Subnet-1 (10.0.1.0/24) & Private-Subnet-2 (10.0.2.0/24)
DB-Security-Group (see security groups below)
DB-Server (RDS PostgreSQL instance)
Lambda-Security-Group (see security groups below)
Lambda-Function
安全组是:
NAT-Security-Group
Inbound:
HTTP & HTTPS from source: Lambda-Security-Group
SSH from 0.0.0.0/0
Outbound:
All traffic
DB-Security-Group
Inbound:
PostgreSQL from source: Lambda-Security-Group
Outbound:
All traffic
Lambda-Security-Group
Inbound:
HTTP & HTTPS from source: NAT-Security-Group
Outbound:
All traffic
子网的路由表为:
Public-Subnet:
10.0.0.0/16 local
0.0.0.0/0 Internet-Gateway
Private-Subnet-1 & Private-Subnet-2
10.0.0.0/16 local
0.0.0.0/0 NAT-Server
我在这里不知所措。为什么 lambda 函数无法访问互联网(连接超时错误)?
公有子网中的 lambda
由于您只需要从 lambda 与数据库进行通信,因此将 lambda 放入公共子网中,并且不需要安装 NAT 网关。
无论如何,不会像 ELB 那样直接访问 lambda,并且必须附加到 API 网关,以防通过 API 端点进行任何访问。
私有子网中的 lambda
- 将 NAT 路由添加到与所有地址 0.0.0.0/0 的私有子网关联的路由表中
- 将所有 0.0.0.0/0 到 IGW 的路由添加到与公共子网关联的路由表中。
- 将 NAT 置于公共子网中
这应该可以解决从 lambda 访问互联网的问题。但只有在您要使用安装在 EC2 中的数据库用于将来的补丁管理或从堡垒主机进行任何其他访问时才有用。如果使用 RDS,则没有必要将 lambda 放入私有子网中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)