O AWS lambda não consegue acessar a Internet, apesar de ter entradas IGW, NAT e de tabela de roteamento adequadas?

3

Estou experimentando o AWS Lambda, com um pequeno código que busca alguns arquivos do S3. Infelizmente, não consigo acessar recursos da Internet quando coloco minha função Lambda em um VPC, embora eu acredite que o VPC esteja configurado corretamente.

Eu tenho o exemplo de código a seguir, que demonstra o que estou tentando fazer: a chamada urlopen simplesmente mantém o tempo limite devido ao problema de rede (e funciona bem se eu definir meu Lambda como fora de VPCs).

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) )
    }

Eu coletei minha configuração de VPC etc, alguém pode encontrar algum problema em torno dela? Acredito que evitei as questões básicas, portanto, não poder acessar os recursos da Internet me deixa absolutamente intrigado.

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      
    
por Peter G. Horvath 10.10.2018 / 12:59

1 resposta

2

Com base na resposta de Michael, consegui descobrir isso finalmente. ( Muito obrigado a ele! :))

Desde que eu tenho lutado tanto com isso, estou capturando a solução final, apenas no caso de alguém atingir o mesmo problema.

Acabei usando três Subnets , um Internet Gateway , um NAT Gateway e dois distintos Routing tables (além da tabela de roteamento principal do VPC):

  • Uma pequena sub-rede que hospeda o NAT Gateway somente com uma tabela de roteamento dedicada

    • Sua tabela de roteamento contém duas entradas:
      • o tráfego específico da VPC (no meu caso, 10.0.0.0/24 ) é roteado para local
      • outro tráfego ( 0.0.0.0/0 ) é roteado para o para Internet Gateway
  • Duas sub-redes que hospedam os serviços do Lambda com outra tabela de roteamento

    • Essa tabela de roteamento contém duas entradas:
      • o tráfego específico da VPC (no meu caso, 10.0.0.0/24 ) é roteado para local
      • outro tráfego ( 0.0.0.0/0 ) é roteado para o para NAT Gateway

Na verdade, documentação da AWS Uma explicação muito boa sobre isso, olhando para o diagrama da configuração de amostra deles me ajudou muito.

    
por 10.10.2018 / 16:18