¿Por qué no se invoca mi función de Lambda configurada con SQS como origen de eventos?

6 minutos de lectura
0

He configurado la función de AWS Lambda para que procese los mensajes de una cola de Amazon Simple Queue Service (Amazon SQS). No obstante, mi función de Lambda no se invoca y no procesa los mensajes de la cola.

Solución

Requisitos previos

  • Confirme si la función de Lambda se ha configurado con Amazon SQS como origen de eventos.
  • Confirme que el rol de AWS Identity and Access Management (AWS IAM) de la función de Lambda tenga los permisos que necesita para obtener mensajes de la cola de SQS.
  • Compruebe las métricas de Amazon CloudWatch de su función en relación con las invocaciones y la cola de SQS para confirmar si hay mensajes disponibles en la cola. Si no se muestran los mensajes o no se envían a la cola de SQS, asegúrese de que el productor tenga los permisos necesarios. El usuario o rol debe tener los siguientes permisos de Amazon SQS y AWS Key Management Service (AWS KMS):
    sqs:SendMessage
    kms:GenerateDataKey
    kms:Decrypt

Nota: Si la cola no está cifrada, no necesitará permisos de AWS KMS.

Comprobación de si las URL de la función de Lambda y de la cola de SQS son correctas

Confirme que el nombre de recurso de Amazon (ARN) de la función de Lambda y la URL de la cola de SQS de la asignación de orígenes de eventos de la función de Lambda sean correctos. Además, active la asignación de orígenes de eventos.

  1. Abra la consola de Lambda.
  2. En el panel de navegación, seleccione Funciones.
  3. Seleccione la función que desee comprobar.
  4. Elija el desencadenador de SQS y amplíelo para comprobar si la URL de la cola de SQS es correcta. Además, confirme si el estado del desencadenador es Activado. Para obtener más información, consulte ¿Por qué se deshabilitó mi activador Amazon SQS de Lambda?

Para realizar estas comprobaciones, también puede ejecutar el comando list-event-source-mapping.

Ejemplo:

aws lambda list-event-source-mappings --function-name <my-function> --region <region-name>

Nota: Sustituya <my-function> por el nombre de su función de Lambda, y sustituya <region name> por su región de AWS.

Comprobación de los permisos de la función de Lambda

Si el rol de IAM de Lambda tiene permisos para sondear los mensajes de la cola de SQS, compruebe la política de acceso de la cola de SQS. Busque reglas de denegación que puedan restringir la función de Lambda.

  1. Abra la consola de Amazon SQS.
  2. En el panel de navegación, seleccione Colas.
  3. Seleccione la cola de SQS y, a continuación, elija la pestaña Política de acceso.
  4. Compruebe si hay políticas de denegación que bloquean el tráfico de Lambda. Si encuentra alguna política que bloquea el tráfico, añada una condición en la declaración de denegación para ignorar las solicitudes procedentes de Lambda.

El rol de IAM de su función de Lambda debe tener los siguientes permisos:

  • DeleteMessage
  • GetQueueAttributes
  • ReceiveMessage

Comprobación de la configuración de cifrado de la cola

Si la cola está cifrada, el rol de IAM de la función de Lambda necesita los permisos para realizar las acciones de AWS KMS. Sin estos permisos necesarios, la función de Lambda no puede consumir mensajes de la cola de SQS. Si la cola de Amazon SQS está configurada con cifrado de AWS KMS, siga estos pasos:

  • Asegúrese de que la clave de AWS KMS exista.
  • Asegúrese de que el rol de la función de Lambda tenga los permisos kms:Decrypt.
  • Asegúrese de que los permisos de la política de claves de AWS KMS estén configurados para permitir acciones desde el rol de Lambda.

Nota: Las colas de Amazon SQS con la clave predeterminada (clave de AWS KMS para Amazon SQS) no pueden invocar una función de Lambda en otra cuenta de AWS.

Comprobación de si la función de Lambda en cuestión está limitada

Lambda tiene un límite de simultaneidad regional. Si otras funciones de la región de AWS utilizan activamente esta capacidad al máximo, pueden producirse limitaciones en la función. Esto puede ocurrir incluso si la función en sí misma no alcanza la capacidad máxima.

Si establece una simultaneidad reservada de 0 en la función, no se producirá ninguna invocación en la función y se limitarán todos los mensajes de Amazon SQS. Compruebe la métrica ConcurrentExecutions (máximo) regional y las métricas Throttle (SUM) de la función en Amazon CloudWatch. Compruebe si se ha alcanzado la capacidad regional y si hay algún tipo de limitación de la función. Asegúrese de que haya suficiente capacidad para invocar la función y procesar los mensajes de SQS.

Confirmación de la ausencia de otros consumidores activos en la misma cola de SQS

Si hay más de un cliente activo en la cola de SQS, es posible que estos clientes consuman sus mensajes. Los mensajes de SQS están diseñados para que solo los consuma un cliente a la vez. Si otro cliente está consumiendo la cola de SQS, es posible que la función de Lambda no reciba ningún mensaje cuando sondee la cola de SQS. Compruebe si hay otras invocaciones de Lambda o de Amazon SQS activas mediante la consola de Amazon SQS.

Nota: Es posible que otros clientes estén extrayendo mensajes de la cola de SQS mediante programación. Estas extracciones no aparecen en la consola.

Comprobación de si el origen de eventos de SQS se ha configurado con filtros

Compruebe si el origen de eventos de SQS se ha configurado con algún filtro. Si su origen de eventos de SQS se ha configurado con filtros, asegúrese de que los filtros no estén descartando mensajes de Amazon SQS.

  1. Abra la consola de Lambda.
  2. En el panel de navegación, seleccione Funciones.
  3. Seleccione la función que desee comprobar.
  4. Elija el desencadenador de SQS y, a continuación, verifique los criterios del filtro. Si la configuración del desencadenador no muestra el nombre de la clave, esto indica que no hay ningún filtro configurado. Si se han configurado criterios de filtro, revise el filtro para confirmar si permite que Lambda procese mensajes válidos. Para eliminar temporalmente los criterios de filtro, elija Editar.
  5. Si la función se invoca después de quitar el filtro, modifique los criterios de filtro para que coincidan con su caso de uso.

Para obtener más información, consulte Filtrado con Amazon SQS y Best practices for implementing Lambda event filtering.

Información relacionada

Uso de Lambda con Amazon SQS

Why isn't my Lambda function with an Amazon SQS event source scaling optimally?

¿Por qué la función de Lambda vuelve a intentar enviar mensajes válidos de Amazon SQS y los coloca en la cola de mensajes fallidos?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año