Cómo cambiar el tiempo de espera en AWS Lambda

Si desea crear una arquitectura sin servidor en AWS, o al menos una parte de ella, entonces el servicio AWS Lambda será la parte más importante.

Es una función informática sin servidor (generalmente escrita en el lenguaje de programación Node.JS o Python) que puede desarrollar y ejecutar sin iniciar ningún clúster o servidor backend. Puede conectar varias funciones de AWS Lambda para formar procesos más complejos.

Sin embargo, una propiedad importante de la función Lambda es su limitación en términos de duración del tiempo de procesamiento. En última instancia, esto define cuándo es el propósito correcto utilizar la función AWS Lambda.

Fuente: aws.amazon.com

¿Qué es el intervalo de tiempo de espera?

La característica de tiempo de espera de la función AWS Lambda es una configuración que define la cantidad máxima de tiempo que una función puede ejecutarse antes de finalizar.

Las funciones Lambda están diseñadas para ser de corta duración y sin estado, y así es como deben usarse. No es una rara excepción ver cómo los equipos intentan utilizar la función Lambda para procesos de larga duración. Lo hacen simplemente porque quieren aprovechar los beneficios de la naturaleza sin servidor de AWS Lambda. Siempre es mucho más económico ejecutar un código sin necesidad de poner en marcha un servidor con una configuración específica de CPU y memoria. Entonces, la intención es fácil de entender.

Sin embargo, si una función se ejecuta durante demasiado tiempo, puede provocar problemas de rendimiento y utilización de recursos. Corre el riesgo de bloquear los recursos y, dado que tiene el beneficio de un proceso de larga duración, lo más probable es que realmente no le importe la optimización de los pasos dentro de los procesos. De repente, un tiempo de espera de cinco minutos ya no es un gran problema. Puedes permitirte el lujo de dejarlo presente incluso si, para el proceso en sí, podría resultar inútil.

De forma predeterminada, el tiempo de espera para una función Lambda está establecido en solo 3 segundos. En ese caso, deberá contar con el hecho de que cualquier código que ejecute dentro de una función Lambda debe finalizar en tres segundos. Esto es excelente si desea crear una arquitectura con comunicaciones y tiempos de respuesta realmente ágiles, potencialmente con millones de transacciones en muy poco tiempo. Pero eso limitaría significativamente los casos de uso utilizables de la función Lambda, por lo que puede aumentar este límite hasta un máximo de 900 segundos (15 minutos). Cuando se alcance este tiempo de espera, Lambda finalizará la función y devolverá un código de error.

¿Cómo configurar la función de tiempo de espera?

Fuente: aws.amazon.com

Puede configurar el tiempo de espera para una función Lambda mediante la Consola de administración de AWS, la CLI de AWS o los SDK de AWS.

Estos son los pasos concretos para lograrlo:

  • Abra la Consola de administración de AWS y vaya al servicio Lambda.
  • Seleccione la función Lambda que desea modificar.
  • En la pestaña «Configuración», desplácese hacia abajo hasta la sección «Configuración general» y busque la configuración «Tiempo de espera».
  • Haga clic en el botón «Editar» al lado.
  • Ingrese el nuevo valor de tiempo de espera en segundos (entre 1 y 900) y haga clic en el botón «Guardar».
  • Haga clic en el botón «Guardar» en la parte superior de la página para guardar los cambios en la función Lambda.
  • También puede utilizar la línea de comandos de AWS CLI para actualizar el tiempo de espera de una función Lambda. Aquí hay un comando de ejemplo:

    <code>aws lambda update-function-configuration --function-name [My_Lambda_Function_Name] --timeout 900

    Este comando establece el tiempo de espera para el [My_Lambda_Function_Name] a 15 minutos. Simplemente coloque allí su nombre real de la función y el valor de tiempo de espera deseado en segundos.

    Algunas consideraciones

    La configuración de tiempo de espera se aplica a toda la función, no solo a bloques de código individuales u operaciones dentro de la función. Por lo tanto, si su función realiza una operación de larga duración, como procesar un archivo grande o realizar una solicitud de red, deberá asegurarse de que el tiempo de espera sea suficiente para que la operación se complete, incluso en el peor de los casos. .

    Vale la pena señalar que las funciones Lambda están diseñadas para ser de corta duración y sin estado. Están destinados a realizar tareas pequeñas y discretas. Si descubre que su función Lambda tarda mucho en completarse, puede ser bueno considerar dividirla en varias funciones más pequeñas. Luego puedes llamarlos uno por uno mediante un disparador. Por ejemplo, si la salida de la función Lambda anterior se almacena en un depósito S3 específico.

    Además, si necesita ejecutar un proceso de larga duración que supere el límite de 15 minutos, puede considerar utilizar AWS Step Functions para orquestar una serie de funciones Lambda u otros servicios de AWS para lograr el resultado deseado.

    Mejores prácticas

    El intervalo de tiempo de espera en sí no parece ser lo suficientemente grande para algunas conversaciones extensas. La mayoría de las veces, los desarrolladores terminan configurándolo directamente en 15 minutos para todas las funciones de Lambda. Aunque la función finalizará mucho antes, esto no tiene ningún efecto secundario negativo.

    Sin embargo, todavía hay algunas mejores prácticas a tener en cuenta.

    #1. Definir el valor apropiado

    Debe establecer el valor del tiempo de espera en función del tiempo de ejecución esperado de la función. Básicamente, esto significa establecer un valor que no sea demasiado corto pero tampoco innecesariamente largo.

    Es posible que desee asegurarse de que el tiempo total de una única función Lambda no sea superior a tres minutos, por ejemplo, simplemente por razones arquitectónicas o de rendimiento general de su aplicación.

    De manera similar, es posible que desee asegurarse de que la función Lambda no finalice antes de, digamos, tres minutos. Una de las razones podría ser que desee completar una cierta cantidad de reintentos dentro del código Lambda. Por ejemplo, en caso de que algunos de los recursos necesarios para completar el código estén ocupados o bloqueados.

    Entonces, antes de continuar y configurar el tiempo de espera en 15 minutos, piense cuál podría ser el valor óptimo del tiempo de ejecución. Definir valores más precisos es solo otra herramienta para darle algunos límites a todo el equipo de desarrollo.

    #2. Monitoreo a lo largo del tiempo

    Una vez que establezca los límites de tiempo de espera, haga un esfuerzo por monitorear el tiempo de ejecución de sus funciones Lambda. Esto le brindará información importante sobre si la decisión original fue correcta o si necesita algunos ajustes.

    Puede utilizar métricas y registros de CloudWatch para realizar un seguimiento del tiempo de ejecución de las funciones. Luego, identifique aquellos que están tardando más de lo esperado, así como aquellos que se completan mucho más rápido de lo esperado.

    #3. Invocación asincrónica

    Si su función Lambda se activa mediante un evento que no requiere una respuesta inmediata, por ejemplo, la carga de un archivo o un mensaje de una cola, utilice la invocación asincrónica para reducir el riesgo de tiempos de espera. Esto hará que la función se ejecute en segundo plano sin esperar respuesta. Por supuesto, esto puede dar lugar a una reducción del tiempo de espera. Esto se debe simplemente a que no es necesario incluir en el tiempo de ejecución general de Lambda el tiempo de espera que necesita la función para ese recurso.

    #4. Utilice funciones escalonadas para procesos complejos

    Si necesita ejecutar un proceso de larga duración que supere el límite de 15 minutos, puede utilizar AWS Step Functions para orquestar una serie de funciones Lambda u otros servicios de AWS para lograr ese resultado. Step Function dividirá el proceso en tareas más pequeñas y manejables que puede ejecutar dentro del límite de tiempo de espera.

    Incluso puedes ejecutar varias funciones lambda en paralelo dentro de una función escalonada. Luego, deje que la función de paso espere todas las funciones lambda paralelas antes de continuar. Esta es una forma de escalamiento horizontal en la que varias funciones lambda pueden dividir un problema y resolverlo parcialmente juntas.

    Al final, solo necesita recopilar los resultados parciales y desarrollar la resolución final, para lo cual puede ser suficiente seguir la función lambda independiente.

    #5. Optimizar el código

    Puede optimizar el código de su función Lambda para reducir el tiempo de ejecución y mejorar el rendimiento. Esto resulta útil si el intervalo de tiempo de espera no es suficiente sólo ocasionalmente. En ese caso, podría valer la pena buscar optimización de código para eliminar dichos casos de falla.

    ¿Cómo afecta el tiempo de espera a la facturación?

    Fuente: aws.amazon.com

    La configuración del tiempo de espera para una función de AWS Lambda no afecta directamente la facturación de la función. AWS Lambda factura según la cantidad de solicitudes y la duración del tiempo de ejecución de la función.

    Si aumenta la configuración del tiempo de espera para una función Lambda, es posible que se produzcan tiempos de ejecución más prolongados. Pero sólo si la función realmente necesita ese tiempo adicional. Si combina eso con una mayor frecuencia de una función que tarda más en ejecutarse, entonces sí, podría esperar costos más altos.

    Sin embargo, si la función no se invoca con frecuencia o si completa el proceso antes de alcanzar el valor de tiempo de espera, el impacto en la facturación puede ser mínimo.

    Es por eso que configurar todas las funciones Lambda con un tiempo de espera de 15 minutos de forma predeterminada podría no ser la razón principal del aumento en el costo de su procesamiento general.

    Sin embargo, ciertamente conduce a un aumento indirecto de los costes generales. Los desarrolladores sentirán que tienen cierta reserva para usar y es posible que no optimicen el código hasta el punto que probablemente lo harían si los tiempos de espera fueran más restrictivos pero realistas.

    Otra cosa es que AWS Lambda proporciona un nivel gratuito que incluye 1 millón de solicitudes gratuitas y 400.000 GB de tiempo de procesamiento por mes. Si el uso de su función Lambda se encuentra dentro de los límites del nivel gratuito, no pagará por el tiempo de ejecución de la función, independientemente de la configuración del tiempo de espera.

    Ultimas palabras

    La función AWS Lambda es una herramienta poderosa, especialmente para el procesamiento sin servidor en la nube de AWS. Tiene su propósito y límites de los que debemos ser conscientes. No intentemos utilizarlo para casos de uso para los que no fue diseñado.

    Es perfecto para acciones simples, asincrónicas e idealmente activadas que no requieren un tiempo de ejecución superior a 15 minutos. Si necesita algo más complejo, utilice AWS Step Functions para combinar varias funciones Lambda en un único proceso orquestado. O renuncie al procesamiento sin servidor más económico y utilice servidores con la configuración y potencia informática adecuadas para realizar su tarea.

    A continuación, consulte la introducción a AWS Lambda para principiantes.

    x