Comment résoudre l'erreur « Impossible d'exécuter la requête HTTP... connexion expirée » dans AWS Glue ?

Lecture de 7 minute(s)
0

Ma tâche AWS Glue échoue avec l'erreur « Impossible d'exécuter la requête HTTP... connexion expirée ».

Brève description

Lorsque vous exécutez une tâche AWS Glue associée à une connexion, elle peut échouer lorsqu'elle tente de se connecter au point de terminaison d'un autre service. Par exemple, elle peut essayer de se connecter au point de terminaison d'un service tel qu'Amazon Simple Storage Service (Amazon S3) et AWS Key Management Service (AWS KMS). La tâche échoue si la route réseau vers le point de terminaison de ce service est manquante dans le sous-réseau utilisé dans la connexion AWS Glue. Le message d'erreur « Impossible d'exécuter la requête HTTP » ou « Échec : connexion expirée » apparaît dans les journaux des tâches AWS Glue.

Vous recevez ce message d'erreur 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 du 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, elle envoie une demande d'API REST HTTP. 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 aux points de terminaison de ces services et la demande échoue avec une erreur de délai d'expiration. Cela se produit, car, bien que la tâche soit en mesure d'envoyer la demande, 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 banques de données.

Les ressources des tâches AWS Glue possèdent 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 demandes au point de terminaison du service AWS public, mais ces demandes 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 le message d'erreur « connexion expirée ».

Résolution

Le message d'erreur que vous trouvez dans les journaux ressemble à l'un des suivants, selon 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 le vérifier en utilisant le point de terminaison d'un cloud privé virtuel (VPC) ou en utilisant une passerelle NAT.

Utilisation du point de terminaison d'un VPC

Utilisez la console Amazon Virtual Private Cloud (Amazon VPC) pour créer le point de terminaison d'un 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 de VPC que celui configuré pour votre connexion AWS Glue. Cela confirme que le trafic censé se connecter au point de terminaison AWS Glue le fait à l'aide de cette interface.

  1. Ouvrez la console Amazon VPC.
  2. Dans le panneau de navigation, choisissez Points de terminaison.
  3. Choisissez Create endpoint (Créer un point de terminaison).
  4. Dans Service category (Catégorie de services), sélectionnez AWS services (Services AWS).
  5. Pour Service name (Nom du service), choisissez le service auquel vous vous connectez. Pour plus d'informations, consultez les services AWS qui s'intègrent à AWS PrivateLink.
  6. Pour 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 effacer Additional settings (Autres paramètres) et Enable DNS name (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. Pour Subnets (Sous-réseaux), choisissez un sous-réseau par zone de disponibilité (AZ) à partir duquel vous souhaitez accéder au service AWS.
  9. Pour Security group (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 du VPC. Le point de terminaison du VPC communique avec le service AWS, qui communique ensuite avec l'interface réseau du point de terminaison.
  10. Pour Policy (Politique), choisissez Full access (Accès complet). Cela autorise toutes les opérations effectuées par tous les principaux sur toutes les ressources via le point de terminaison du VPC. Vous pouvez également choisir Custom (Personnalisé) pour associer une politique de point de terminaison de VPC. Cette politique contrôle les autorisations dont disposent les principaux pour effectuer des actions sur les ressources via le point de terminaison du VPC. Cette option n'est disponible que si le service prend en charge les politiques de point de terminaison de VPC. Pour plus d'informations, consultez la section Politiques de point de terminaison de VPC.
  11. (Facultatif) Pour ajouter une balise, choisissez Add new tag (Ajouter une nouvelle balise), puis entrez la clé de la balise et la valeur de la balise.
  12. Choisissez Create endpoint (Créer un point de terminaison).

Utilisation d'une passerelle NAT

Une passerelle NAT AWS connecte les ressources de manière privée et sécurisée à l'aide du réseau 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 telle sorte que si le trafic est acheminé vers Internet, elle le fasse via 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 des autres problèmes

  1. Vérifiez que le groupe de sécurité de connexion et l'ACL réseau du 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. Exécutez ensuite la commande suivante pour confirmer la connectivité avec le point de terminaison du 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 OFFICIEL
AWS OFFICIELA mis à jour il y a un an