如何在VPC内使用Lambda连接到S3。
如何在VPC内使用Lambda连接到S3。
我无法区分私有子网和公有子网。
我创建了一个VPC并连接了子网,IGW也连接到了路由表。那么,这个网络不是公有子网吗?
正如我所预料的,公有网络似乎需要与外部通信,但是根本没有通信。
从AWS Lambda到RDS的连接是可能的(VPC),但是将文件上传到S3和发送消息到Slack时都会超时。
我看到了很多关于使用VPC终端节点的帖子,但是当我尝试设置时出现以下警告:
警告
当使用终端节点时,您的受影响子网中实例的源IP地址用于访问同一区域的AWS服务时将是私有IP地址,而不是公有IP地址。
使用公有IP地址从受影响子网到AWS服务的现有连接可能会被中断。确保在创建或修改终端节点时没有关键任务正在运行。
那么,EC2和S3目前是断开连接的吗?然后,服务存在问题,无法设置。
在Lambda VPC配置中,即使打开了安全组的所有入站规则,连接也无法建立。
难道只能设置NAT吗?
因为成本问题,我想避免使用NAT。
我的目标是在VPC上的Lambda中与RDS、S3和Slack进行通信。
如何使Lambda函数连接到VPC内的S3?
问题的原因是Lambda函数部署在公共子网上时无法访问互联网。这是因为公共子网的默认路由是互联网网关(IGW),而Lambda函数没有公共IP,IGW会丢弃所有私有IP的流量。
解决方法是将Lambda函数部署在VPC私有子网中,并在VPC中配置一个S3 VPC终端节点。这样,Lambda函数就可以私密地访问S3。
文章中还提到了Lambda函数如何访问位于私有子网中的RDS数据库的解决方法。将Lambda函数部署在私有子网中,并配置Lambda函数和RDS实例的安全组,允许Lambda函数安全组的入站流量。
对于没有部署在VPC中的Lambda函数,它们无法直接访问互联网。它们需要通过某种方式进行NAT转发。AWS提供了一个托管的VPC,并在该VPC中部署了一个NAT网关。这些Lambda函数具有一个部署在AWS托管VPC中的网络接口(ENI),通过这个接口进行NAT转发。
对于需要Lambda函数同时访问Slack(通过互联网)、S3(以任何方式)和位于VPC私有子网中的RDS的情况,解决方案比较复杂。可以将Lambda函数部署在私有子网中,并配置该子网的默认路由为位于公共子网中的NAT网关。同时需要配置Lambda函数和RDS实例的安全组,以允许Lambda函数向RDS进行入站访问。S3的流量将通过公网路由。
如果需要保持S3流量的私密性,还可以添加一个S3 VPC终端节点。
在文章中还提到了关于设置VPC终端节点时的警告。警告内容是关于如果正在连接到S3的现有连接可能会断开的问题。如果没有运行中的实例或活动连接,则可以忽略警告。
最佳的做法是在应用程序投入使用之前,首先使用CloudFormation或等效工具构建所有这些基础设施。如果要对现有基础设施进行更改,则需要解决现有连接暂停的问题。
以上是关于Lambda如何连接到VPC内的S3的原因和解决方法的整理。