¿Cómo soluciono los errores relacionados con los disparadores de Lambda en Amazon Cognito?

5 minutos de lectura
0

Quiero resolver los errores que aparecen al configurar las funciones de AWS Lambda como disparadores en Amazon Cognito.

Solución

Estos son errores comunes que se deben solucionar al utilizar disparadores de Lambda en Amazon Cognito.

«PreSignUp invocation failed due to error AccessDeniedException» (La invocación de PreSignUp ha fallado debido al error AccessDeniedException).

Nota: El tipo de disparador se menciona en el mensaje de error. Por ejemplo, si una función de Lambda se adjunta como disparador de PreSignUp a su grupo de usuarios, responde con el error anterior.

Motivo del error

Al añadir una función de Lambda como disparador a su grupo de usuarios desde la consola de Amazon Cognito, Amazon Cognito realiza las siguientes acciones:

  • Añade el permiso necesario a la política de recursos de la función. Esta política de recursos permite a Amazon Cognito invocar la función en el caso de determinados tipos de disparadores de eventos.
  • Muestra el siguiente mensaje: «Permission to invoke Lambda function - You are granting Amazon Cognito permission to invoke this Lambda function on your behalf. Amazon Cognito will add a resource-based policy statement to the function» (Permiso para invocar la función de Lambda: concede permiso a Amazon Cognito para invocar esta función de Lambda en su nombre. Amazon Cognito añadirá a la función una declaración de política basada en recursos).

Este error también se produce al eliminar la función que añadió como disparador. Si elimina un disparador de Lambda, debe actualizar el disparador correspondiente en el grupo de usuarios. Por ejemplo, al eliminar el disparador de autenticación posterior, debe establecer el Post authentication trigger en el grupo de usuarios correspondiente en none.

Resolver el error

Al crear un disparador fuera de la consola de Amazon Cognito, debe añadir permisos de forma explícita al asignar el disparador al grupo de usuarios. Para añadir permisos, utilice un SDK de AWS, la Interfaz de la línea de comandos de AWS (AWS CLI) o Amazon CloudFormation.

Al añadir permisos, Amazon Cognito invoca la función únicamente en nombre de su grupo de usuarios y su cuenta. Para añadir permisos desde la consola de Lambda, siga los pasos que se indican en Usar políticas basadas en recursos para Lambda. También puede utilizar la operación AddPermission.

El siguiente ejemplo es una política basada en recursos de Lambda que permite a Amazon Cognito invocar una función. El estado del grupo de usuarios es aws:SourceArn y el de la cuenta es aws:SourceAccount.

Nota: Reemplace example_lambda_function_arn, example_account_number y example_user_pool_arn por sus propios valores.

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "lambda-allow-cognito",
      "Effect": "Allow",
      "Principal": {
        "Service": "cognito-idp.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "example_lambda_function_arn",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "example_account_number"
        },
        "ArnLike": {
          "AWS:SourceArn": "example_user_pool_arn"
        }
      }
    }
  ]
}

«Error in authentication, please contact the app owner» (Error de autenticación, contacte con el propietario de la aplicación).

Motivo del error

Este error se produce por dos motivos:

  • A excepción de los disparadores de Lambda de remitentes personalizados, Amazon Cognito invoca las funciones de Lambda de forma sincrónica. La función debe responder en un plazo de 5 segundos. Si la función no responde, Amazon Cognito vuelve a intentar la llamada. Tras tres intentos fallidos, se agota el tiempo de espera de la función. No puede cambiar el valor del tiempo de espera de 5 segundos.
  • Si Amazon Cognito no recibe una respuesta del disparador en 5 segundos, después de tres intentos fallidos, Amazon Cognito devuelve el error.

Resolver el error

Si se agota el tiempo de espera de la función, use las prácticas recomendadas para trabajar con funciones de Lambda a fin de optimizarla. Puede hacer que la función de Lambda que está asociada al grupo de usuarios llame de forma asincrónica a una segunda función de Lambda. Con esta configuración, las funciones pueden realizar todas las acciones necesarias sin agotar el tiempo de espera.

«PreSignUp failed with error Syntax error in module lambda_function» (PreSignUp ha fallado con un error de sintaxis en el módulo lambda_function).

Motivo del error

Amazon Cognito devuelve este error cuando hay algún error de sintaxis en la función de Lambda.

Resolver el error

Vuelva a comprobar el código de la función y corrija los errores de sintaxis.

«PreSignUp failed with error Handler 'lambda_handler'; missing on module; lambda_function» (PreSignUp ha fallado con el controlador de errores 'lambda_handler'; falta en el módulo; lambda_function).

Motivo del error

La configuración de la versión ejecutable de la función incluye un parámetro de controlador. Si se establece información o sintaxis incorrectas para HandlerInfo, la función no se puede ejecutar y se produce este error.

Resolver el error

Configure el parámetro del controlador en la configuración de la función para indicarle a la versión ejecutable de Lambda qué método de controlador debe invocar.

Al configurar una función en Python, el valor de configuración del controlador es el nombre del archivo y el nombre del módulo del controlador separados por un punto. Por ejemplo, main.Handler llama al método de controlador definido en main.py.

Para obtener más información sobre la sintaxis del controlador, consulte Modificación del entorno de versiones ejecutables.

Información relacionada

Consideraciones importantes

Versiones ejecutables personalizadas de AWS Lambda

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año