Назад | Перейти на главную страницу

AWS lambda не может получить доступ к Интернету, несмотря на наличие надлежащих записей IGW, NAT и таблицы маршрутизации?

Я экспериментирую с AWS Lambda с небольшим фрагментом кода, который извлекает некоторые файлы из S3. К сожалению, я даже не могу получить доступ к интернет-ресурсам, когда помещаю свою лямбда-функцию в VPC, хотя я считаю, что VPC настроен правильно.

У меня есть следующий пример кода, который демонстрирует то, что я пытаюсь сделать: вызов urlopen просто продолжает отключаться по таймауту из-за проблем с сетью (и отлично работает, если я установил свою лямбду вне 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      

Основываясь на ответе Майкла, я наконец понял это. (Огромное ему спасибо! :))

Поскольку я так много боролся с этим, я фиксирую окончательное решение на случай, если кто-то столкнется с той же проблемой.

В итоге я использовал три 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 имеет довольно хорошее объяснение по этому поводу, мне очень помогла диаграмма их примерной настройки.