尽管具有正确的 IGW、NAT 和路由表条目,AWS lambda 仍无法访问互联网?

尽管具有正确的 IGW、NAT 和路由表条目,AWS lambda 仍无法访问互联网?

我正在尝试使用 AWS Lambda,其中有一小段代码可以从 S3 获取一些文件。不幸的是,当我将 Lambda 函数放入 VPC 时,我甚至无法访问互联网资源,尽管我相信 VPC 配置正确。

我有以下代码示例,演示了我正在尝试做的事情:由于网络问题,urlopen 调用一直超时(如果我将 Lambda 设置为 VPC 之外,它就能正常工作)。

import json

def lambda_handler(event, context):
    # TODO implement

    import urllib.request
    contents = urllib.request.urlopen("https://api.ipify.org?format=json").read()


    return {
        "statusCode": 200,
        "body": json.dumps( str(contents) )
    }

我已经收集了我的 VPC 等配置,有人能发现其中的问题吗?我相信我已经避免了基本问题,因此无法访问互联网资源让我感到非常困惑。

VPC:
    Name: S3 CONNECTION TEST
    VPC ID: vpc-09025133f1b68a1cc
    State: available
    IPv4 CIDR: 10.0.0.0/24

Subnet:
    Name: S3-connection-check-subnet
    Subnet ID: subnet-0e2904283f7b644e3
    State: available
    VPC: vpc-09025133f1b68a1cc | S3 CONNECTION TEST
    Routing Table: rtb-0e0d8951583d0c5ca | S3 CONNECTIVITY check

Internet Gateway:
    Name: S3 connection test
    ID: igw-07aabbe0d979d0ca3
    State: attached
    VPC: vpc-09025133f1b68a1cc | S3 CONNECTION TEST 

NAT Gateway:
    Name: S3 connection test NAT
    ID: nat-06d25cfd034108851
    Status: available
    Status Message: -
    Elastic IP Address: (some valid public IP address)
    Private IP address: 10.0.0.203
    Network interface: eni-0fefa7310a1bcf050
    VPC: vpc-09025133f1b68a1cc | S3 CONNECTION TEST
    Subnet: subnet-0e2904283f7b644e3 | S3-connection-check-subnet

Routing Table:
    Name: S3 CONNECTIVITY check
    Route Table ID: rtb-0e0d8951583d0c5ca
    Explicit association: 1 Subnet
    Main: Yes
    VPC: vpc-09025133f1b68a1cc | S3 CONNECTION TEST

    Routes:
        Route 1:
            Destination: 10.0.0.0/24
            Target: local
            Status: Active
            Propagated: No
        Route 2:
            Destination: 0.0.0.0/0
            Target: nat-06d25cfd034108851
            Status: Active
            Propagated: No

Lambda function:
    Name: Test-S3-Read
    VPC: vpc-09025133f1b68a1cc
    Subnets: subnet-0e2904283f7b644e3 (10.0.0.0/24) | xx-xxxx-xx S3-connection-check-subnet
    Security Groups: sg-0e5ee380770e6e4cd (Allow All) | Allow All

Security Groups:
    Name: sg-0e5ee380770e6e4cd (Allow All) | Allow All
    Inbound rules: 
        Rule 1:
            Type: ALL Traffic
            Protocol: ALL
            Port Range: All
            Source: 0.0.0.0/0
    Outbound rules: 
        Rule 1:
            Type: ALL Traffic
            Protocol: ALL
            Port Range: ALL
            Destination: 0.0.0.0/0      

答案1

根据迈克尔的回答,我终于弄明白了这一点。(非常感谢他!:))

由于我对此进行了如此多的挣扎,所以我记录了最终的解决方案,以防有人遇到同样的问题。

我最终使用了三个Subnets、一个Internet Gateway、一个NAT Gateway和两个不同的Routing tables(除了 VPC 的主路由表):

  • 一个托管 NAT 网关的小型子网仅有的使用专用路由表

    • 其路由表包含两个条目:
      • VPC 特定流量(在我的例子中10.0.0.0/24)被路由到local
      • 其他流量(0.0.0.0/0)被路由到Internet Gateway
  • 使用另一个路由表托管 Lambda 服务的两个子网

    • 该路由表包含两个条目:
      • VPC 特定流量(在我的例子中10.0.0.0/24)被路由到local
      • 其他流量(0.0.0.0/0)被路由到NAT Gateway

实际上,AWS 文档对此有很好的解释,查看他们的示例设置图表对我帮助很大。

相关内容