我有一个包含3个私有和一个公共子网的VPC。在3个私有子网中,我托管了RDS和Lambda函数。在公有子网中,我托管NAT网关。 3个私有子网通过路由表指向NAT网关。 在此设置中,我的Lambda函数已成功与我的RDS和Internet进行通信,但我无法从家用计算机访问RDS,因为NAT阻止了对VPC的外部访问。我现在的问题是:
如何让Lambda函数访问VPC中的RDS并同时从我的计算机上公开RDS?
P.S。:到目前为止,我总是需要手动更改我的3个私有子网到IGW的路由,以使RDS可访问。
答案 0 :(得分:2)
首先澄清:NAT不会阻止对VPC的外部访问。 NAT网关只是为您的VPC中没有公共IP地址的资源提供Internet访问。 NAT与您能够从外部访问VPC无关。事实上,你还没有做任何事情来允许外部访问。
您可以使用以下选项从外部访问RDS实例:
在任何这些场景中,只要Lambda函数和RDS实例在同一个VPC中,Lambda函数就可以访问RDS实例。只要Lambda函数保留在具有NAT网关的私有子网中,它就可以访问Internet。
答案 1 :(得分:1)
您需要在公有子网中创建堡垒主机。堡垒主机提供从公共Internet到您的私人VPC子网的连接。
AWS的常见堡垒主机是OpenVPN。您可以在AWS Marketplace中找到预配置的AMI。
答案 2 :(得分:0)
用户reggi
在gist.github上有一个名为如何设置AWS lambda函数以与Internet和VPC通讯的指南。该指南将引导您完成设置AWS Lambda以便与互联网和VPC对话的步骤。
您可以在注释解决方案中找到有关将lambda连接到RDS和Internet的复杂性,同时保持无需VPN即可公开访问的RDS的复杂性,其中一些信息在注释中。我在此处添加了此信息,以防该信息不可用。
要允许Lambda访问Internet,请访问RDS并允许 RDS可以公开获得(希望在特定的IP范围内- 即您的静态IP),您的RDS的子网组必须仅包含公共 子网子网中有一个路由表指向 0.0.0.0/0到连接到VPC的IGW。您必须在Amazon RDS>子网组中创建一个包含公共子网的子网组 子网,然后使用此新子网组启动RDS实例(或 将您的当前系统配置为符合这些规范。
https://gist.github.com/reggi/dc5f2620b7b4f515e68e46255ac042a7