¿Cómo soluciono el error “no se pudo ejecutar la solicitud HTTP... se agotó el tiempo de espera de la conexión” en AWS Glue?

7 minutos de lectura
0

Mi trabajo de AWS Glue falla y aparece el error “no se pudo ejecutar la solicitud HTTP... se agotó el tiempo de espera de la conexión”.

Descripción breve

Al ejecutar un trabajo de AWS Glue con una conexión adjunta, es posible que se produzca un error al intentar conectarse a otro punto de conexión del servicio. Por ejemplo, podría intentar conectarse a un punto de conexión, 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 conexión en la subred que se usa en la conexión de AWS Glue. El mensaje de error “no se pudo ejecutar la solicitud HTTP” o “fallo: se agotó el tiempo de espera de la conexión” aparece en los registros de trabajos de AWS Glue.

Este error aparece por los siguientes motivos:

  • La subred que está configurada en su conexión a AWS Glue contiene una puerta de enlace de Internet o no contiene ninguna ruta en la tabla de enrutamiento del punto de conexión que ha fallado.
  • Cuando ejecuta su trabajo de AWS Glue, este interactúa con las API de AWS Glue. Esto ocurre si utiliza cualquier operación que requiera enumerar las tablas del catálogo de datos de AWS Glue, crear tablas nuevas o leer una de ellas. Cuando su trabajo necesita acceder a la API de AWS Glue, envía una solicitud de API de REST de HTTP. Del mismo modo, puede realizar otras llamadas a la API de servicios a Amazon S3, Amazon Simple Notification Service (Amazon SNS) o AWS Secret Manager. Al realizar la llamada a la API, el trabajo intenta conectarse con estos puntos de conexión, 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 obtener más información, consulte Configurar el 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 conexión de servicio público de AWS, pero estas solicitudes provienen de una dirección IP privada. Por lo tanto, el punto de conexión no puede enviar una respuesta, el trabajo falla y devuelve el mensaje de error “se agotó el tiempo de espera de la conexión”.

Solución

El mensaje de error que aparece en los registros es similar a uno de los siguientes, según el caso de uso:

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

Confirme que el tráfico entre el trabajo de AWS Glue y el servicio al que el trabajo intenta realizar una solicitud de API esté permitido. Para comprobarlo, utilice un punto de conexión de nube virtual privada (VPC) o una puerta de enlace NAT.

Usar un punto de conexión de VPC

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

  1. Abra la consola de Amazon VPC.
  2. En el panel de navegación, seleccioneEndpoints (Puntos de conexión).
  3. Seleccione Create endpoint (Crear punto de conexión).
  4. En Service category (Categoría de servicio), seleccione AWS services (Servicios de AWS).
  5. En Service name (Nombre del servicio), elija el servicio al que se desea conectar. Para obtener más información, consulte Servicios de AWS que se integran con AWS PrivateLink.
  6. Para VPC, elija la VPC desde la que desea acceder al servicio de AWS.
  7. Para crear un punto de conexión de interfaz para Amazon S3, debe borrar la configuración adicional y habilitar el nombre DNS. Esto se debe a que Amazon S3 no admite DNS privados para los puntos de conexión de VPC de la interfaz.
  8. En Subnet (Subred), elija una subred por zona de disponibilidad (AZ) desde la que desee acceder al servicio de AWS.
  9. EnSecurity group (Grupo de seguridad), elija un grupo de seguridad para asociarlo a las interfaces de red de los puntos de conexión. Las reglas del grupo de seguridad deben permitir los recursos que utilizarán el punto de conexión de VPC. El punto de conexión de VPC se comunica con el servicio de AWS, que luego se comunica con la interfaz de red del punto de conexión.
  10. En Policy (Política), seleccione Acceso completo. Esto permite que todas las entidades principales realicen todas las operaciones en todos los recursos del punto de conexión de VPC. O bien, elija Personalizado para adjuntar una política de punto de conexión de VPC. Esta política controla los permisos que tienen las entidades principales para realizar acciones sobre los recursos a través del punto de conexión de VPC. Esta opción solo está disponible si el servicio admite políticas de puntos de conexión de VPC. Para obtener más información, consulte Políticas de punto de conexión de VPC.
  11. (Opcional) Para agregar una etiqueta, seleccione Add new tag (Agregar etiqueta) y, a continuación, introduzca la clave y el valor de la etiqueta.
  12. Seleccione Create endpoint (Crear punto de conexión).

Uso de una puerta de enlace NAT

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

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

Solución de problemas adicionales

  1. Compruebe que el grupo de seguridad de conexión y la ACL de la red de subred permitan que AWS Glue envíe tráfico al realizar la solicitud de API.
  2. Para probar el problema de conectividad, inicie una instancia de EC2 en la misma VPC, subred y grupo de seguridad que utilizó al crear la conexión de AWS Glue. A continuación, ejecute el siguiente comando para confirmar la conectividad con el punto de conexión del 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 AWS
OFICIAL DE AWSActualizada hace un año