Come posso risolvere l'errore "Unable to execute HTTP request... connect timed out" in AWS Glue?
Il mio processo in AWS Glue ha esito negativo e genera l'errore "Unable to execute HTTP request... connect timed out".
Breve descrizione
Quando esegui un processo in AWS Glue con una connessione collegata, potrebbe avere esito negativo quando 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 AWS di gestione delle chiavi (AWS KMS). Il processo ha esito negativo se il percorso di rete verso l'endpoint di servizio non è presente nella sottorete utilizzata nella connessione AWS Glue. Il messaggio di errore "Unable to execute HTTP request" o "failed: connect timed out" viene visualizzato nei log dei processi di AWS Glue.
Ricevi l'errore per i seguenti motivi:
- La sottorete configurata nella connessione AWS Glue contiene un gateway Internet o non contiene route della tabella di routine dell'endpoint di servizio che ha dato esito negativo.
- Quando esegui un processo in AWS Glue, questo interagisce con le API 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 tabella. Quando il processo deve accedere all'API AWS Glue, invia una richiesta HTTP alla REST API. Allo stesso modo, potresti effettuare altre chiamate API di servizio ad Amazon S3, Amazon Simple Notification Service (Amazon SNS) o AWS Secret Manager. Quando effettui la chiamata API, il processo tenta di connettersi con gli endpoint di servizio e la richiesta ha esito negativo con un errore di timeout. Ciò accade perché, sebbene il processo sia in grado di inviare la richiesta, non riceve la risposta entro il periodo di timeout.
AWS Glue crea interfacce di rete elastiche nella sottorete specificata nella connessione AWS Glue. Per ulteriori informazioni, consulta Impostazione dell'accesso di rete agli archivi di dati.
Le risorse nei processi di AWS Glue hanno solo indirizzi IP privati. Ciò significa che i processi non sono in grado di connettersi ad altre risorse utilizzando un gateway Internet. Il processo in AWS Glue tenta di inviare richieste all'endpoint pubblico del servizio AWS, ma le richieste provengono da un indirizzo IP privato. L'endpoint non è pertanto in grado di inviare una risposta e il processo ha esito negativo con un messaggio di errore "connect timed out".
Risoluzione
Il messaggio di errore che trovi nei log è simile a uno dei seguenti, a seconda del caso d'uso:
REST API AWS Glue:
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 il processo di AWS Glue e il servizio a cui il processo tenta di effettuare una richiesta API sia consentito. Puoi verificarlo utilizzando un endpoint VPC (Virtual Private Cloud) o utilizzando un gateway NAT.
Utilizzo di 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, il processo di AWS Glue potrebbe dare esito negativo 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 connessione AWS Glue. Ciò verifica che il traffico che dovrebbe connettersi all'endpoint di AWS Glue lo faccia utilizzando questa interfaccia.
- Apri la console Amazon VPC.
- Nel pannello di navigazione, scegli Endpoint.
- Scegli Crea endpoint.
- In Categoria servizio, scegli Servizi AWS.
- Per Nome servizio, scegli il servizio a cui ti stai connettendo. Per ulteriori informazioni, consulta Servizi AWS che si integrano con AWS PrivateLink.
- Per VPC, scegli il VPC da cui desideri accedere al servizio AWS.
- Per creare un endpoint di interfaccia per Amazon S3, devi eliminare le selezioni in impostazioni aggiuntive e selezionare l'opzione Abilita nome DNS. Questo perché Amazon S3 non supporta il DNS privato per gli endpoint VPC di interfaccia.
- Per Sottoreti, scegli una sottorete per zona di disponibilità (AZ) da cui desideri accedere al servizio AWS.
- Per Gruppo di sicurezza, scegli un gruppo di sicurezza da associare alle interfacce di rete degli endpoint. Le regole del gruppo di sicurezza devono consentire le risorse che utilizzeranno l'endpoint VPC. L'endpoint VPC comunica con il servizio AWS, che quindi comunica con l'interfaccia di rete dell'endpoint.
- Per Policy, scegli Accesso completo. Ciò consente tutte le operazioni di tutti i principali su tutte le risorse sull'endpoint VPC. Oppure scegli Personalizza per collegare una policy per gli endpoint VPC. Questa policy controlla le autorizzazioni di cui dispongono i principali per eseguire azioni sulle risorse tramite l'endpoint VPC. L'opzione è disponibile solo se il servizio supporta le policy degli endpoint VPC. Per ulteriori informazioni, consulta Controllo dell'accesso agli endpoint VPC tramite le policy di endpoint.
- (Facoltativo) Per aggiungere un tag, scegli Aggiungi nuovo tag, quindi inserisci la chiave del tag e il valore del tag.
- Scegli Crea endpoint.
Utilizzo di un gateway NAT
Un AWS NAT Gateway connette le risorse in modo privato e sicuro utilizzando Internet privato. Crea una sottorete privata e indirizza la connessione AWS Glue verso una sottorete privata. Allo stesso tempo, crea un gateway NAT in una delle sottoreti pubbliche del VPC di AWS Glue. Configura la tabella di routing della 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.
Altre indicazioni sulla risoluzione dei problemi
- Verifica che il gruppo di sicurezza della connessione e l'ACL della sottorete consentano ad AWS Glue di inviare traffico quando viene effettuata la richiesta API.
- Per verificare il problema di connettività, avvia un'istanza EC2 nello stesso VPC, sottorete e gruppo di sicurezza che hai utilizzato durante la creazione della connessione AWS Glue. Quindi esegui questo comando per controllare la connettività con l'endpoint di 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
Video correlati

