AWS lambda 函数无法访问互联网

AWS lambda function can't reach the internet

我是 运行 一个 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 函数无法访问互联网(连接超时错误)?

您需要在 public 子网中创建一个 NAT 网关,并通过 NAT 网关路由来自放置 Lambda 的子网的出口流量。

为此,将 NAT 网关设置为路由 table 中的默认网关,该路由 table 附加到 Lambda 所在的子网。

有关详细信息,请参阅文档中的 Internet Access for Lambda Functions

public 子网中的 lambda

由于您只需要从 lambda 与 DB 通信,将 lambda 放入 public 子网中,您不需要安装 NAT 网关。 无论如何,不​​会像 ELB 那样直接访问 lambda,并且必须附加到 API 网关,以防通过 API 端点进行任何访问。

私有子网中的 lambda

  • 将 NAT 路由添加到与所有地址 0.0.0.0/0
  • 的私有子网关联的路由 table
  • 为所有 0.0.0.0/0 添加到 IGW 的路由到与 public 子网关联的路由 table。
  • 在 public 子网中放置 NAT

这应该可以解决从 lambda 访问互联网的问题。但是只有在您要使用安装在 EC2 中的数据库以用于将来的补丁管理或来自堡垒主机的任何其他类型的访问时才有用。如果使用 RDS,将 lambda 放在私有子网中毫无意义。

问题出在安全组的 inbound/outbound 规则上。通过上面的配置,我更新了安全组以匹配:

NAT-Security-Group
   Inbound:
      HTTP & HTTPS from source: Lambda-Security-Group
      SSH from source: 0.0.0.0/0
   Outbound:
      HTTP & HTTPS to destination: 0.0.0.0/0

DB-Security-Group
   Inbound:
      PostgreSQL from source: Lambda-Security-Group
   Outbound:
      None

Lambda-Security-Group
   Inbound:
      None
   Outbound:
      HTTP & HTTP to destination: NAT-Security-Group
      PostgreSQL to source: DB-Security-Group

Lambda 函数现在可以连接互联网。