Come posso risolvere l'errore «Impossibile eseguire la richiesta HTTP... connessione scaduta» in AWS Glue?

6 minuti di lettura
0

La mia attività di AWS Glue non ha esito positivo e viene visualizzato l'errore «Impossibile eseguire la richiesta HTTP... connessione scaduta».

Breve descrizione

Quando esegui un’attività AWS Glue con una connessione collegata, potrebbe non avere esito positivo quando l’attività tenta di connettersi a un altro endpoint di servizio. Ad esempio, potrebbe provare a connettersi a un endpoint di servizio come Amazon Simple Storage Service (Amazon S3) e Servizio di gestione delle chiavi AWS (AWS KMS). L’attività non ha esito positivo se il percorso di rete verso questo endpoint di servizio non è presente nella sottorete utilizzata nella connessione AWS Glue. Il messaggio di errore «Impossibile eseguire la richiesta HTTP» o «Non ha avuto esito positivo: connessione scaduta» viene visualizzato nei log delle attività di AWS Glue.

Questo errore viene visualizzato per i seguenti motivi:

  • La sottorete configurata nella connessione AWS Glue contiene un gateway Internet oppure non presenta nessun percorso nella tabella di instradamento per l'endpoint del servizio che non è andato a buon fine.
  • Quando esegui la tua attività AWS Glue, l’attività interagisce con le API di AWS Glue. Ciò accade se utilizzi operazioni che richiedono l'elenco delle tabelle del catalogo dati AWS Glue, la creazione di nuove tabelle o la lettura da una di esse. Quando la tua attività deve accedere all'API AWS Glue, l’attività invia una richiesta di REST API HTTP. Allo stesso modo, potresti effettuare altre chiamate API di servizio ad Amazon S3, Servizio di notifica semplice Amazon (Amazon SNS) o AWS Secret Manager. Quando effettui la chiamata API, l’attività tenta di connettersi a questi endpoint del servizio e la richiesta non ha esito positivo e presenta un errore di timeout. Ciò accade perché, sebbene l’attività sia in grado di inviare la richiesta, non ha ricevuto la risposta entro il periodo di timeout.

AWS Glue crea interfacce di rete elastiche nella sottorete specificata nella connessione AWS Glue. Per ulteriori informazioni, vedi Configurazione dell'accesso di rete agli archivi dati.

Le risorse nell’attività di AWS Glue hanno solo indirizzi IP privati. Ciò significa che le attività non sono in grado di connettersi ad altre risorse utilizzando un gateway Internet. L’attività AWS Glue tenta di inviare richieste all'endpoint pubblico del servizio AWS, ma queste richieste provengono da un indirizzo IP privato. Pertanto l'endpoint non è in grado di inviare una risposta e l’attività non ha esito positivo e presenta il messaggio di errore «connessione scaduta».

Risoluzione

Il messaggio di errore che trovi nei log è simile a uno dei seguenti, a seconda del caso d'uso:

AWS Glue REST API:

AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: com.amazonaws.SdkClientException: Unable to execute HTTP request: Connect to glue.ap-southeast-1.amazonaws.com:443

Richiesta Amazon S3:

Unable to execute HTTP request: Connect to s3BucketName.us-east-1.amazonaws.com:443 [s3BucketName.s3.us-east-1.amazonaws.com/xx.xxx.xx.xxx ] failed: connect timed out

Richiesta AWS KMS:

Unable to execute HTTP request: Connect to kms.us-east-1.amazonaws.com:443 [kms.us-east-1.amazonaws.com/xx.xxx.xx.xxx ] failed: connect timed out

Verifica che il traffico tra l’attività AWS Glue e il servizio a cui l’attività sta tentando di effettuare una richiesta API sia consentito. È possibile verificarlo utilizzando un endpoint cloud privato virtuale (VPC) o utilizzando un gateway NAT.

Utilizzare un endpoint VPC

Utilizza la console Amazon Virtual Private Cloud (Amazon VPC) per creare un endpoint VPC di interfaccia per il servizio per il quale ricevi l'errore. Ad esempio, l’attività di AWS Glue potrebbe non avere esito positivo e generare un errore durante il tentativo di accedere all'API AWS Glue. Crea l'endpoint di interfaccia per AWS Glue nella stessa sottorete VPC configurata per la tua connessione AWS Glue. Ciò conferma che il traffico che dovrebbe connettersi all'endpoint AWS Glue si connette utilizzando questa interfaccia.

  1. Apri la console Amazon VPC.
  2. Nel pannello di navigazione, scegli Endpoints (Endpoint).
  3. Scegli Create endpoint (Crea endpoint).
  4. Per Categoria del servizio, scegli Servizi AWS.
  5. In Nome servizio, scegli il servizio a cui ti stai connettendo. Per ulteriori informazioni, consulta i servizi AWS che si integrano con AWS PrivateLink.
  6. Per VPC, scegli il VPC da cui desideri accedere al servizio AWS.
  7. Per creare un endpoint di interfaccia per Amazon S3, devi deselezionare Impostazioni aggiuntive e abilitare il nome DNS. Questo perché Amazon S3 non supporta il DNS privato per gli endpoint VPC di interfaccia.
  8. Per le sottoreti, scegli una sottorete per zona di disponibilità (AZ) da cui desideri accedere al servizio AWS.
  9. Per Gruppo di sicurezza, scegli un gruppo di sicurezza da associare alle interfacce di rete dell'endpoint. Le regole del gruppo di sicurezza devono consentire risorse che utilizzeranno l'endpoint VPC. L'endpoint VPC comunica con il servizio AWS, che quindi comunica con l'interfaccia di rete dell'endpoint.
  10. Per Policy, scegli Accesso completo. Ciò consente tutte le operazioni da parte di tutti i responsabili su tutte le risorse sull'endpoint VPC. In alternativa, scegli Personalizza per allegare una policy sugli endpoint VPC. Questa politica controlla le autorizzazioni di cui dispongono i responsabili per eseguire azioni sulle risorse sull'endpoint VPC. Questa opzione è disponibile solo se il servizio supporta le policy degli endpoint VPC. Per ulteriori informazioni, consulta Policy di endpoint VPC.
  11. (Facoltativo) Per aggiungere un tag, scegli Aggiungi nuovo tag, quindi inserisci la chiave del tag e il valore del tag.
  12. Scegli Crea endpoint.

Utilizzo di un gateway NAT

Un gateway AWS NAT collega le risorse in modo privato e sicuro utilizzando l'Internet privato. Crea una sottorete privata e indirizza la tua connessione AWS Glue verso una sottorete privata. Allo stesso tempo, crea un gateway NAT in una delle sottoreti pubbliche del tuo VPC AWS Glue. Configura la tabella di instradamento della tua sottorete di connessione AWS Glue in modo che, se il traffico viene indirizzato a Internet, lo faccia utilizzando questo gateway NAT. Per ulteriori informazioni, consulta Come posso configurare un gateway NAT per una sottorete privata in Amazon VPC? e gateway NAT.

Nota: se utilizzi un gateway NAT, il traffico verso il servizio passa attraverso Internet.

Risoluzione dei problemi aggiuntiva

  1. Verifica che il gruppo di sicurezza della connessione e l'ACL della sottorete consentano ad AWS Glue di inviare traffico quando effettui la richiesta API.
  2. Per testare il problema di connettività, avvia un'istanza EC2 nello stesso VPC, sottorete e gruppo di sicurezza che hai usato durante la creazione della connessione AWS Glue. Quindi esegui il seguente comando per confermare la connettività con l'endpoint del servizio:
telnet <glue endpoint url> 443
dig <glue endpoint url>

Esempi:

$ telnet glue.us-east-1.amazonaws.com 443
$ dig glue.us-east-1.amazonaws.com

Informazioni correlate

Risoluzione degli errori in AWS Glue

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa