Saltar al contenido

¿Cómo soluciono el error "Unable to execute HTTP request... connect timed out" en AWS Glue?

7 minutos de lectura
0

Mi trabajo de AWS Glue falla con el error "Unable to execute HTTP request... connect timed out".

Descripción corta

Cuando ejecutas un trabajo de AWS Glue con una conexión adjunta, es posible que falle al intentar conectarse a otro punto de enlace de servicio. Por ejemplo, podría intentar conectarse a un punto de enlace de servicio como Amazon Simple Storage Service (Amazon S3) y AWS Key Management Service (AWS KMS). El trabajo falla si falta la ruta de red a este punto de enlace de servicio en la subred que se usa en la conexión de AWS Glue. El mensaje de error "Unable to execute HTTP request" o "failed: connect timed out" aparece en los registros de trabajos de AWS Glue.

Se produce este error por los siguientes motivos:

  • La subred que está configurada en tu conexión de AWS Glue contiene una puerta de enlace de Internet o no contiene ninguna ruta en la tabla de enrutamiento para el punto de enlace de servicio que ha fallado.
  • Cuando ejecutas tu trabajo de AWS Glue, interactúa con las API de AWS Glue. Esto ocurre si utilizas alguna operación que requiera enumerar las tablas del catálogo de datos de AWS Glue, crear tablas nuevas o leer una de ellas. Cuando tu trabajo necesita acceder a la API de AWS Glue, envía una solicitud de API de REST HTTP. Del mismo modo, puedes realizar otras llamadas a la API de servicio a Amazon S3, Amazon Simple Notification Service (Amazon SNS) o AWS Secret Manager. Cuando realizas la llamada a la API, el trabajo intenta conectarse con estos puntos de enlace de servicio y la solicitud falla y se produce un error de tiempo de espera. Esto ocurre porque, aunque el trabajo puede enviar la solicitud, no recibió la respuesta dentro del periodo de tiempo de espera.

AWS Glue crea interfaces de red elásticas en la subred especificada en la conexión de AWS Glue. Para más información, consulta Configuración del acceso de red a los almacenes de datos.

Los recursos de los trabajos de AWS Glue solo tienen direcciones IP privadas. Esto significa que los trabajos no pueden conectarse a otros recursos mediante una puerta de enlace de Internet. El trabajo de AWS Glue intenta enviar solicitudes al punto de enlace de servicio público de AWS, pero estas solicitudes provienen de una dirección IP privada. Por lo tanto, el punto de enlace no puede enviar una respuesta y el trabajo falla con un mensaje de error "connect timed out".

Resolución

El mensaje de error que aparece en los registros es similar al siguiente, según el caso práctico:

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

Solicitud de 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

Solicitud de 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

Confirma que está permitido el tráfico entre el trabajo de AWS Glue y el servicio al que el trabajo intenta realizar una solicitud de API. Puedes comprobarlo mediante un punto de enlace de nube virtual privada (VPC) o mediante una puerta de enlace de NAT.

Uso de un punto de enlace de VPC

Utiliza la consola de Amazon Virtual Private Cloud (Amazon VPC) para crear un punto de enlace de VPC de la interfaz para el servicio para el que se produce el error. Por ejemplo, el trabajo de AWS Glue puede fallar y generar un error al intentar acceder a la API de AWS Glue. Crea el punto de enlace de la interfaz para AWS Glue en la misma subred de VPC que está configurada para tu conexión de AWS Glue. Esto confirma que el tráfico que se supone que debe conectarse al punto de enlace de AWS Glue lo hace mediante esta interfaz.

  1. Abre la consola de Amazon VPC.
  2. En el panel de navegación, elige Puntos de enlace.
  3. Elige Crear punto de enlace.
  4. En Categoría de servicio, elige Servicios de AWS.
  5. En Nombre del servicio, elige el servicio al que te estás conectando. Para obtener más información, consulta los servicios de AWS que se integran con AWS PrivateLink.
  6. En VPC, elige la VPC desde la que deseas acceder al servicio de AWS.
  7. Para crear un punto de enlace de interfaz para Amazon S3, debes borrar la configuración adicional y habilitar el nombre DNS. Esto se debe a que Amazon S3 no admite el DNS privado para los puntos de enlace de VPC de la interfaz.
  8. En Subredes, elige una subred por cada zona de disponibilidad (AZ) desde la que quieras acceder al servicio de AWS.
  9. En Grupo de seguridad, elige un grupo de seguridad para asociarlo a las interfaces de red de puntos de enlace. Las reglas del grupo de seguridad deben permitir los recursos que utilizarán el punto de enlace de VPC. El punto de enlace de VPC se comunica con el servicio de AWS, que a continuación se comunica con la interfaz de red del punto de enlace.
  10. En Política, elige Acceso completo. Esto permite que todas las entidades principales realicen todas las operaciones en todos los recursos del punto de enlace de VPC. O bien, elige Personalizado para adjuntar una política de punto de enlace de VPC. Esta política controla los permisos que tienen las entidades principales para realizar acciones en los recursos a través del punto de enlace de VPC. Esta opción solo está disponible si el servicio admite las políticas de punto de enlace de VPC. Para obtener más información, consulta Puntos de enlace de VPC.
  11. (Opcional) Para agregar una etiqueta, selecciona Agregar nueva etiqueta y, a continuación, introduce la clave y el valor de la etiqueta.
  12. Elige Crear punto de enlace.

Uso de una puerta de enlace de NAT

Una puerta de enlace de NAT de AWS conecta los recursos de forma privada y segura mediante la Internet privada. Crea una subred privada y dirige tu conexión de AWS Glue hacia una subred privada. Al mismo tiempo, crea una puerta de enlace de NAT en una de las subredes públicas de tu VPC de AWS Glue. Configure la tabla de enrutamiento de tu subred de conexión de AWS Glue para que, si el tráfico se dirige a Internet, lo haga mediante esta puerta de enlace de NAT. Para obtener más información, consulta ¿Cómo configuro una puerta de enlace de NAT para una subred privada en Amazon VPC? y Puertas de enlace de NAT.

Nota: Si utilizas una puerta de enlace de NAT, el tráfico a tu servicio pasa por Internet.

Resolución de problemas adicionales

  1. Comprueba que la ACL del grupo de seguridad de la conexión y la red de subred permitan a AWS Glue enviar tráfico al realizar la solicitud de API.
  2. Para probar el problema de conectividad, inicia una instancia de EC2 en la misma VPC, subred y grupo de seguridad que utilizaste al crear la conexión de AWS Glue. A continuación, ejecuta el siguiente comando para confirmar la conectividad con el punto de enlace de servicio:
telnet <glue endpoint url> 443
dig <glue endpoint url>

Ejemplos:

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

Información relacionada

Solución de errores en AWS Glue

OFICIAL DE AWSActualizada hace 3 años