Passer au contenu

Comment résoudre l'erreur "Unable to execute HTTP request... connect timed out" dans AWS Glue ?

Lecture de 7 minute(s)
0

Ma tâche AWS Glue échoue avec l’erreur "Unable to execute HTTP request... connect timed out".

Brève description

Lorsque vous exécutez une tâche AWS Glue associée à une connexion, celle-ci peut échouer lorsqu'elle tente de se connecter à un autre point de terminaison de service. Par exemple, elle peut essayer de se connecter à un point de terminaison de service tel qu'Amazon Simple Storage Service (Amazon S3) et AWS Key Management Service (AWS KMS). La tâche échoue si la route de mise en réseau vers ce point de terminaison de service est manquante dans le sous-réseau utilisé dans la connexion AWS Glue. Le message d’erreur "Unable to execute HTTP request" ou "failed: connect timed out" apparaît dans les journaux de tâches AWS Glue.

Cette erreur peut survenir pour les raisons suivantes :

  • Le sous-réseau configuré dans votre connexion AWS Glue contient une passerelle Internet ou aucune route dans la table de routage pour le point de terminaison de service défaillant.
  • Lorsque vous exécutez votre tâche AWS Glue, elle interagit avec les API AWS Glue. Cela se produit si vous utilisez des opérations qui nécessitent de répertorier les tables du catalogue de données AWS Glue, de créer de nouvelles tables ou d'en lire une. Lorsque votre tâche doit accéder à l'API AWS Glue, celle-ci envoie une demande d'API HTTP REST. De même, vous pouvez effectuer d'autres appels d'API de service vers Amazon S3, Amazon Simple Notification Service (Amazon SNS) ou AWS Secret Manager. Lorsque vous effectuez l'appel d'API, la tâche essaie de se connecter à ces points de terminaison de service et la requête échoue avec une erreur d’expiration. Cela se produit car, bien que la tâche soit en mesure d'envoyer la requête, elle n'a pas reçu de réponse dans le délai imparti.

AWS Glue crée des interfaces réseau Elastic dans le sous-réseau spécifié dans la connexion AWS Glue. Pour plus d’informations, consultez la section Configuration de l’accès réseau aux magasins de données.

Les ressources figurant dans les tâches AWS Glue utilisent uniquement des adresses IP privées. Cela signifie que les tâches ne peuvent pas se connecter à d'autres ressources via une passerelle Internet. La tâche AWS Glue essaie d'envoyer des requêtes au point de terminaison public du service AWS, mais ces dernières proviennent d'une adresse IP privée. Le point de terminaison n'est donc pas en mesure de renvoyer une réponse et la tâche échoue avec un message d’erreur "connect timed out".

Résolution

Le message d'erreur que vous trouvez dans les journaux ressemble à l'un des suivants, en fonction de votre cas d'utilisation :

API REST 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

Requête 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

Requête 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

Vérifiez que le trafic entre la tâche AWS Glue et le service auquel la tâche tente d'envoyer une demande d'API est autorisé. Vous pouvez vérifier cela en utilisant un point de terminaison de cloud privé virtuel (VPC) ou en utilisant une passerelle NAT.

Utilisation d'un point de terminaison de VPC

Utilisez la console Amazon Virtual Private Cloud (Amazon VPC) pour créer un point de terminaison de VPC d'interface pour le service pour lequel vous obtenez l'erreur. Par exemple, la tâche AWS Glue peut échouer et générer une erreur lors de la tentative d'accès à l'API AWS Glue. Créez le point de terminaison d'interface pour AWS Glue dans le même sous-réseau VPC que celui configuré pour votre connexion AWS Glue. Cela confirme que le trafic censé se connecter au point de terminaison AWS Glue y parvient via cette interface.

  1. Ouvrez la console Amazon VPC.
  2. Dans le volet de navigation, sélectionnez Points de terminaison.
  3. Sélectionnez Créer un point de terminaison.
  4. Dans Catégorie de service, choisissez Services AWS.
  5. Dans Nom du service, choisissez le service auquel vous vous connectez. Pour plus d'informations, consultez la section Services AWS qui s'intègrent à AWS PrivateLink.
  6. Dans VPC, choisissez le VPC à partir duquel vous souhaitez accéder au service AWS.
  7. Pour créer un point de terminaison d'interface pour Amazon S3, vous devez désactiver Paramètres supplémentaires et Activer le nom DNS. Cela est dû au fait qu'Amazon S3 ne prend pas en charge le DNS privé pour les points de terminaison de VPC d'interface.
  8. Dans Sous-réseaux, choisissez un sous-réseau par zone de disponibilité (AZ) à partir de laquelle vous souhaitez accéder au service AWS.
  9. Dans Groupe de sécurité, choisissez un groupe de sécurité à associer aux interfaces réseau du point de terminaison. Les règles du groupe de sécurité doivent autoriser les ressources qui utiliseront le point de terminaison de VPC. Le point de terminaison de VPC communique avec le service AWS, qui communique ensuite avec l'interface réseau du point de terminaison.
  10. Dans Politique, choisissez Accès complet. Cela permet à tous les responsables d'effectuer toutes les opérations sur toutes les ressources via le point de terminaison de VPC. Vous pouvez également choisir Personnalisé pour associer une politique de point de terminaison de VPC. Cette politique contrôle les autorisations dont disposent les responsables pour effectuer des actions sur les ressources via le point de terminaison de VPC. Cette option n'est disponible que si le service prend en charge les politiques relatives aux points de terminaison de VPC. Pour plus d'informations, consultez la section Politiques relatives aux points de terminaison de VPC.
  11. (Facultatif) Pour ajouter une identification, sélectionnez Ajouter une nouvelle identification, puis saisissez la clé d’identification et la valeur d’identification.
  12. Sélectionnez Créer un point de terminaison.

Utilisation d'une passerelle NAT

Une passerelle AWS NAT connecte les ressources de manière privée et sécurisée à l'aide de l'Internet privé. Créez un sous-réseau privé et dirigez votre connexion AWS Glue vers un sous-réseau privé. Dans le même temps, créez une passerelle NAT dans l'un des sous-réseaux publics de votre VPC AWS Glue. Configurez la table de routage de votre sous-réseau de connexion AWS Glue de sorte que si le trafic est acheminé vers Internet, il effectue cette opération à l'aide de cette passerelle NAT. Pour plus d'informations, consultez les sections Comment configurer une passerelle NAT pour un sous-réseau privé dans Amazon VPC ? et Passerelles NAT.

Remarque : Si vous utilisez une passerelle NAT, le trafic vers votre service passe par Internet.

Résolution de problèmes supplémentaires

  1. Vérifiez que le groupe de sécurité de connexion et l'ACL du réseau de sous-réseau autorisent AWS Glue à envoyer du trafic lors de la demande d'API.
  2. Pour tester le problème de connectivité, lancez une instance EC2 dans le même VPC, le même sous-réseau et le même groupe de sécurité que ceux que vous avez utilisés lors de la création de la connexion AWS Glue. Puis, exécutez la commande suivante pour confirmer la connectivité avec le point de terminaison de service :
telnet <glue endpoint url> 443
dig <glue endpoint url>

Exemples :

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

Informations connexes

Résolution des erreurs dans AWS Glue

AWS OFFICIELA mis à jour il y a 3 ans