¿Por qué el desencadenador de Kinesis Data Streams no puede invocar mi función de Lambda?

6 minutos de lectura
0

He integrado AWS Lambda con Amazon Kinesis Data Streams como origen de eventos para procesar mi secuencia de datos de Amazon Kinesis. Sin embargo, la función de Lambda no se invoca. ¿Por qué sucede esto y cómo puedo solucionarlo?

Breve descripción

Los errores de la función de Lambda suelen deberse a lo siguiente:

  • Permisos insuficientes en el rol de ejecución de la función de Lambda.
  • No hay datos entrantes en la secuencia de datos de Kinesis.
  • Asignación de orígenes de eventos inactiva provocado por la recreación de una secuencia de datos de Kinesis, una función de Lambda o un rol de ejecución de Lambda.
  • Función de Lambda que supera el tiempo máximo de ejecución, de manera que provoca un error de tiempo de espera en la función de Lambda.
  • Lambda incumple sus límites de ejecuciones simultáneas. Para obtener más información sobre el incumplimiento de sus límites por parte de Lambda, consulte Límites de AWS Lambda.

Si hay un error en la función de Lambda, su función no se invoca ni procesa los registros del lote. Un error puede provocar que Lambda pruebe de nuevo el lote de registros hasta que el procesamiento se realice correctamente o el lote caduque. Para obtener más información sobre la función de Lambda y los errores de Kinesis, consulte Uso de AWS Lambda con Amazon Kinesis.

Resolución

Solución de problemas de su función de Lambda

Para identificar por qué no se invoca su función de Lambda, siga los siguientes pasos:

1.    Consulte la métrica de Invocaciones en Amazon CloudWatch con las estadísticas configuradas como Suma para la función de Lambda. La métrica de Invocaciones puede ayudarle a comprobar si se invoca la función de Lambda.

2.    Consulte la métrica IteratorAge para ver la antigüedad del último registro del lote o cuándo se completó el procesamiento. Cuando su consumidor de Lambda no se puede invocar, la antigüedad del iterador de su secuencia aumenta.

3.    Compruebe los registros de CloudWatch de la función de Lambda. Estos se nombran con el formato .../aws/lambda/function_name. Busque las entradas correspondientes en el error de la función. Por ejemplo, si el error se produce debido a los permisos del rol de ejecución de Lambda, modifique la política de roles de AWS Identity and Access Management (IAM).

4.    Confirme que su rol de ejecución de IAM tiene los permisos adecuados para acceder a CloudWatch:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        }
    ]
}

5.    (Opcional) Si se produce un error de permisos, actualice su política de funciones de Lambda y conceda acceso a Kinesis Data Streams:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:DescribeStream",
                "kinesis:DescribeStreamSummary",
                "kinesis:GetRecords",
                "kinesis:GetShardIterator",
                "kinesis:ListShards",
                "kinesis:ListStreams",
                "kinesis:SubscribeToShard",
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        }
    ]
}

Nota: La política AWSLambdaKinesisExecutionRole incluye estos permisos.

Solución de problemas adicionales

  • Si el error está relacionado con el tiempo de espera de una función de ejecución de Lambda, aumente el valor del tiempo de espera para permitir un procesamiento más rápido.
  • Si su secuencia de datos de Kinesis está cifrada mediante AWS Key Management Service (AWS KMS), el consumidor y el productor deben tener el acceso adecuado. La secuencia de datos de Kinesis debe poder acceder a las claves de AWS KMS que se utilizan para el cifrado y el descifrado. El rol de ejecución de la función de Lambda también debe tener acceso de lectura a la clave KMS para leer correctamente los datos de la secuencia de datos de Kinesis.
  • Si el error se debe a un error interno de la función de Lambda, este error indica que existe un problema con el procesamiento de la secuencia. Para evitar la limitación de la API del plano de control, restrinja cada secuencia a 4 o 5 asignaciones de orígenes de eventos.
  • Si el error se debe a un error interno de la función de Lambda, este error indica que existe un problema con el procesamiento de la secuencia. Restrinja cada secuencia a entre 4 y 5 asignaciones de orígenes de eventos para evitar demasiadas asignaciones de orígenes de eventos con la misma secuencia de datos. Múltiples asignaciones de orígenes de eventos con la misma secuencia puede provocar un incumplimiento de los límites del plano de control de Kinesis y Amazon DynamoDB.
  • Si recibe un error de tiempo de espera de conexión, agregue declaraciones de registro antes y después de las llamadas a la API realizadas en su código. A continuación, puede identificar la línea exacta de código en la que la función comienza a fallar.
  • Si tiene particiones lentas o estancadas, configure la asignación de orígenes de eventos para volver a intentarlo con un tamaño de lote más pequeño. También puede limitar el número de intentos o descartar registros antiguos.
  • Si aparece el mensaje de error «memoria utilizada» en sus registros de CloudWatch, aumente la memoria de la función de Lambda.
  • Si ha superado el tiempo de espera máximo de la función de Lambda, modifique la biblioteca del cliente y el tiempo de espera del cliente. Para modificar la sesión de tiempo de espera en función del tiempo restante en el contenedor de Lambda, utilice la función context.GetRemainingTimeInMillis. La función context.GetRemainingTimeInMillis devuelve la cantidad de tiempo que queda en el contenedor de Lambda antes de que se agote el tiempo.
  • Si recibe errores del código de la función de Lambda, es posible que su función de Lambda se haya quedado estancada con el mismo registro. Utilice un bloque try-catch para detectar los datos fallidos y, a continuación, regístrelos mediante una cola de Amazon SQS o un tema de Amazon SNS. También puede añadir un desencadenador de Lambda a la cola de Amazon SQS con la lógica de procesamiento para volver a intentar las solicitudes fallidas por separado.
  • Configure una cola de mensajes fallidos (DLQ) de Amazon SQS para invocar manualmente la función de Lambda. Configure la propiedad DeadLetterConfig al crear o actualizar la función de Lambda. Puede proporcionar una cola de Amazon Simple Queue Service (Amazon SQS) o un tema de Amazon Simple Notification Service (Amazon SNS) como TargetArn para su DLQ. A continuación, Lambda escribe el objeto de evento e invoca la función de Lambda en el punto de conexión específico una vez agotada la política de intentos estándar.
  • Utilice AWS Lambda con AWS X-Ray para detectar, analizar y optimizar los problemas de rendimiento de las aplicaciones Lambda. AWS X-Ray recopila metadatos del servicio Lambda y genera gráficos que muestran los problemas que afectan al rendimiento de la aplicación Lambda. Por ejemplo, si hay una llamada que tarda mucho en ejecutarse, puede usar AWS X-Ray para confirmar el problema.

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 años