¿Cómo logro que la función Lambda funcione correctamente con la instancia de Amazon EC2 o con el programador de instancias de AWS?

Última actualización: 9 de septiembre de 2021

Utilizo una instancia de Amazon Elastic Compute Cloud (Amazon EC2) o el programador de instancias de AWS con una función de AWS Lambda, pero la función Lambda agota el tiempo de espera, no invoca o arroja errores.

Descripción breve

El programador de instancias de AWS puede hacer que la función de Lambda funcione incorrectamente por los siguientes motivos:

  • Obtendrá un tiempo de espera del SDK. Para resolver este problema, siga los pasos de la sección Corregir tiempos de espera del SDK.
  • Obtendrá un tiempo de espera de función. Para resolver este problema, complete los pasos de la sección Evitar los tiempos de espera de las funciones.
  • No se activó una regla de Amazon EventBridge. Para resolver este problema, complete los pasos en la sección Verificar que la regla programada fue invocada.
  • La función presenta limitación controlada. Para resolver este problema, siga los pasos de la sección Evitar la limitación controlada en las funciones.
  • Obtendrá invocaciones de Lambda duplicadas. Para resolver este problema, complete los pasos de la sección Evitar errores mediante el uso de la idempotencia.

Nota: El programador de instancias de AWS ejecuta funciones de Lambda a intervalos establecidos mediante una regla de EventBridge para programar la función de Lambda. Esto produce una invocación asíncrona de la función Lambda, lo que repercute en la forma en que se gestionan los errores de la función. Si la función falla debido a un error al ejecutarse, el mismo evento se reintenta hasta dos veces más de forma predeterminada. A continuación, se descarta el evento. En caso de limitación controlada, el evento se puede poner en cola hasta seis horas antes de que se descarte.

Resolución

Corregir tiempos de espera del SDK

El tiempo de espera predeterminado del SDK no se anula en versiones anteriores del programador de instancias de AWS. Si las llamadas a la API para comenzar o detener una instancia tardan más de 60 segundos en responder en las versiones anteriores, se agotará el tiempo de espera de la solicitud.

Para resolver este problema, obtenga la última versión del programador de instancias de AWS o modifique el valor read_timeout del objeto Config de Boto3 (en el sitio web de Boto3). Por ejemplo:

import boto3
from botocore.config import Config

client_config = Config(read_timeout=890)

ec2 = boto3.client('ec2', config=client_config)

Evitar tiempos de espera de las funciones

Si se agotó el tiempo de espera de la función Lambda, verifique si la función está esperando para comprobar que se lanzó la instancia EC2. Para obtener más información, consulte Why can't I start or launch my EC2 instance?

Las instancias pueden tardar unos minutos en alcanzar el estado RUNNING (EN EJECUCIÓN). Puede que se agote el tiempo de espera de la función si el tiempo necesario para alcanzar el estado RUNNING (EN EJECUCIÓN) es mayor que el tiempo de espera configurado para la función. Para resolver este problema, aumente el tiempo de espera de su función. Para esto, modifique el valor de Timeout (Tiempo de espera) de 300 (5 minutos) en la plantilla de AWS CloudFormation. Debe disponer de tiempo suficiente para que la instancia se lance antes de que se acabe el tiempo de espera de la función. Por ejemplo:

"Runtime": "python3.7",
"Timeout": 300,
"TracingConfig": {
    "Mode": "Active"
}

Nota: Las funciones de Lambda tienen un valor máximo de tiempo de espera configurable de 15 minutos.

Si su función se encuentra en una nube virtual privada, debe permitir que la función acceda a Internet para hacer llamadas a la API de Amazon EC2.

Verificar que se invocó la regla programada

Para solucionar una función Lambda que no es invocada por EventBridge, consulte ¿Por qué la regla de EventBridge no activó la función Lambda?

Evitar la limitación controlada en las funciones

Para evitar la limitación controlada de la función, consulte ¿Cómo puedo solucionar la limitación controlada de la función Lambda con los errores “Se superó la tasa” y 429 “TooManyRequestsException”?

En el caso de las invocaciones asíncronas, las limitaciones controladas de Lambda en la cuenta pueden afectar a la capacidad de la función para ser invocada. Todas las invocaciones asíncronas se envían a una cola de eventos antes de ser invocadas. Si otra función también recibió un alto número de invocaciones asíncronas, entonces la cola de eventos se puede atrasar. Este retraso no significa que la función no se haya podido invocar. Este retraso significa que el evento se ha retrasado. Puede ver varias invocaciones después de que desaparezca el retraso de la cola de eventos. De forma predeterminada, los eventos de la cola de eventos asíncronos permanecen en esta cola durante un máximo de seis horas.

Evitar errores mediante la idempotencia

Para evitar errores de invocaciones duplicadas, haga que la función Lambda sea idempotente cuando esté configurada con una invocación asíncrona.

Tenga en cuenta que las invocaciones de Lambda asíncronas pueden ocurrir más de una vez debido a la consistencia final con la cola de eventos.


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?