Come posso risolvere i problemi di connettività all'URI utilizzando una funzione Lambda?

Ultimo aggiornamento: 08/07/2022

Ho riscontrato problemi di connettività con la funzione AWS Lambda basata su Amazon VPC che genera un errore. In che modo posso risolvere il problema?

Breve descrizione

Viene visualizzato un errore relativo alla connessione quando si tenta di eseguire la funzione Lambda del Cloud privato virtuale Amazon (Amazon VPC) destinata a un endpoint o un servizio remoto. Ciò potrebbe essere dovuto a un problema di connettività di rete che crea un messaggio di errore. Ad esempio, si tenta di creare una tabella DynamoDB, ma l'operazione scade.

Risoluzione

Crea una funzione di test che replichi la configurazione di rete della funzione di destinazione che desideri testare. Ciò è utile quando non è possibile modificare la funzione di destinazione per aggiungere la logica di risoluzione dei problemi. Consulta la pagina Configurazione di una funzione Lambda per accedere alle risorse in un VPC e scopri ulteriori informazioni su come configurare Lambda per l'accesso al VPC.

Questo è un esempio di una funzione di test definita:

import socket

def connect_tcp(event, context):
  sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  sock.settimeout(8)
  hostname = "www.amazon.com"
  port = 443
  server_address = (hostname, port) # Server address and port
  try:
    IPAddr = socket.gethostbyname(hostname)
    print("Hostname: " + hostname)
    print("Host IP:" + IPAddr)
    print("Attempting to connect ..")
    sock.connect(server_address)
    sock.shutdown(socket.SHUT_RDWR)
    print("connected")
  except Exception as e:
    print("-- Error --")
    print(e)
  finally:
    sock.close()

In questo esempio, il timeout del socket è impostato su 8 secondi, il che richiede che la connessione venga stabilita entro tale intervallo di tempo, altrimenti ha esito negativo. È possibile modificare questo valore se necessario.

La libreria socket è una dipendenza di runtime che non è inclusa per impostazione predefinita nel runtime Python. Includila come parte del pacchetto di distribuzione o in un livello associato alla funzione. Consulta la pagina Distribuisci funzioni Lambda per Python con gli archivi di file .zip per informazioni su come distribuire le dipendenze con l'archivio zip. Consulta Uso dei livelli con la funzione Lambda per informazioni su come distribuire le dipendenze come livelli.

Nota: è consigliabile tentare di replicare il runtime della funzione di destinazione. La funzione di test è scritta in Python, ma può essere trasferita su altri runtime.

Una volta attivata la funzione di test, risolvi i problemi seguendo questi passaggi:
  1. Imposta il nome host e le variabili della porta in modo che corrispondano a quelle con cui la funzione di destinazione sta tentando di stabilire una connessione.
  2. Esegui il mirroring della configurazione di rete (sottorete e gruppo di sicurezza) della funzione di destinazione.
  3. Imposta un valore di timeout della funzione che consenta qualsiasi sovraccarico. È consigliabile assicurarsi che il timeout della funzione sia superiore al timeout della connessione socket per consentire una connessione.
  4. Esegui il test.

Se il test ha esito negativo, è probabile che vi sia un problema di connettività che deve essere esaminato. Se il test ha esito positivo, è probabile che vi sia una connettività tra l'ambiente Lambda Amazon VPC (incluso il gruppo di sicurezza) e l'endpoint. In questo caso, probabilmente c'è un problema con la funzione di destinazione e le sue dipendenze.

Nota: è consigliabile verificare che la funzione di test venga avviata in una sottorete simile alla funzione di destinazione non riuscita in cui sono coinvolte più sottoreti con profili di instradamento diversi.

Se la sottorete non funzionante non è nota, ruota le sottoreti per identificarla seguendo questi passaggi:

  1. Specifica la prima sottorete e ignora l'avviso di disponibilità poiché non eseguirai la distribuzione su una piattaforma di produzione.
  2. Testa la funzione.
  3. Specifica la sottorete successiva e ripeti il test.
  4. Ripeti il passaggio precedente finché non vengono controllate tutte le sottoreti.

Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?