Solicitud de Python en AWS Lambda que termina el tiempo de espera

Estoy intentando hacer una solicitud http de mi AWS Lambda pero se agota.

Mi código se parece a esto:

import requests def lambda_handler(event, context): print('Im making the request') request.get('http://www.google.com') print('I recieved the response') 

Pero cuando pruebo esto, tengo un tiempo de espera.

La salida es

 Im making the request END RequestId: id REPORT RequestId: id Duration: 15003.25 ms Billed Duration: 15000 ms Memory Size: 128 MB Max Memory Used: 18 MB 2016-04-08T20:33:49.951Z id Task timed out after 15.00 seconds 

Así que sé que el problema no es no encontrar el paquete de solicitud, y está ejecutando mi código de Python. Acabo de averiguar por qué se agota el tiempo en esa solicitud.

Me encuentro con el mismo problema de tiempo de espera , la razón es a continuación.

Documento de AWS :

Cuando agrega la configuración de VPC a una función Lambda, solo puede acceder a los recursos en esa VPC. Si una función Lambda necesita acceder tanto a los recursos de VPC como a la Internet pública, la VPC debe tener una instancia de traducción de dirección de red (NAT) dentro de la VPC.

Tal vez hay algún error al configurar su VPC. Te aconsejo que puedas seguir este blog para construir NAT.

Una función Lambda con acceso VPC no tendrá acceso a Internet a menos que agregue una puerta de enlace NAT a su VPC. Debe leer la sección “Cosas que debe saber” del anuncio de soporte de Lambda VPC .

Si ha habilitado la compatibilidad con VPC para su función Lambda, pero no tiene una puerta de enlace NAT en su VPC, entonces su solicitud está agotando el tiempo intentando acceder a Internet.

El valor predeterminado para el tiempo de espera en Lambda es 3 segundos = 3000 microsegundos. Ir a la configuración avanzada y añadir 5 min. Este podría ser el único problema, si el tiempo de espera se produce exactamente a los 3 segundos. Todos los demás errores tomarían algo más o menos que eso.

Puede boost el tiempo de espera para la solicitud haciendo lo siguiente:

 response = requests.get(url, timeout=60) 

Además, deberá boost el tiempo de espera de su función lambda. Para hacer esto:

  • Abra su función lambda en AWS
  • Seleccione ‘Configuración’, luego ‘Configuración avanzada’
  • Aumente su tiempo de espera (hasta 5 minutos)
  • Seleccione ‘Guardar’

Además, creo que ‘request.get’ debería ser ‘requests.get’.

De forma predeterminada, AWS Lambda tiene 3 segundos de tiempo de espera, por lo que si su código se está ejecutando durante más de 3 segundos, automáticamente se agotará el tiempo de espera para recibir este error.

Puede boost el tiempo de espera de su función lambda hasta 5 minutos (300 segundos: AWS puede boost este límite en el futuro) y eso debería solucionar el problema.

Además, su código debe reflejar requests.get en lugar de request.get

He configurado la configuración de VPC en la función Lambda y también agregué la puerta de enlace NAT , establezca el tiempo de la función en 5 minutos.

Aún así, el problema se timed out after XX-- seconds existieron. Al establecer context.callbackWaitsForEmptyEventLoop en falso, resolví el problema por mí.