Como solucionar erros relacionados a gatilhos do Lambda no Amazon Cognito?

4 minuto de leitura
0

Quero resolver os erros que encontro ao configurar as funções do AWS Lambda como gatilhos no Amazon Cognito.

Resolução

A seguir estão os erros comuns a serem solucionados quando você usa gatilhos do Lambda no Amazon Cognito.

"PreSignUp invocation failed due to error AccessDeniedException."

Observação: o tipo de gatilho é mencionado na mensagem de erro. Por exemplo, uma função do Lambda que esteja anexada como um gatilho PreSignUp ao seu grupo de usuários responde com o erro anterior.

Motivo do erro

Quando você adiciona uma função do Lambda como gatilho ao seu grupo de usuários pelo console do Amazon Cognito, o Amazon Cognito executa as seguintes ações:

  • Adiciona a permissão necessária à política de recursos da função. Essa política de recursos permite que o Amazon Cognito invoque a função no caso de determinados tipos de gatilhos de eventos.
  • Exibe a seguinte mensagem: "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."

Esse erro também ocorre quando você exclui a função que adicionou como gatilho. Se você excluir um gatilho do Lambda, deverá atualizar o gatilho correspondente no grupo de usuários. Por exemplo, ao excluir o gatilho de pós-autenticação, você deve definir o gatilho de pós-autenticação no grupo de usuários correspondente como none (nenhum).

Resolução do erro

Ao criar um gatilho fora do console do Amazon Cognito, você deve adicionar permissões explicitamente ao atribuir esse gatilho ao grupo de usuários. Para adicionar permissões, use um SDK da AWS, a AWS Command Line Interface (AWS CLI) ou o Amazon CloudFormation.

Quando você adiciona permissões, o Amazon Cognito invoca a função somente em nome do seu grupo de usuários e da sua conta. Para adicionar permissões pelo console do Lambda, siga as etapas em Usar políticas baseadas em recursos para o Lambda. Você também pode usar a operação AddPermission.

Veja a seguir um exemplo de política baseada em recursos do Lambda que permite que o Amazon Cognito invoque uma função. O grupo de usuários está na condição aws:SourceArn e a conta está na condição aws:SourceAccount.

Observação: substitua example_lambda_function_arn, example_account_number e example_user_pool_arn pelos seus próprios 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."

Motivo do erro

Esse erro ocorre por dois motivos:

  • Com exceção dos gatilhos do Lambda de remetente personalizados, o Amazon Cognito invoca as funções do Lambda de forma síncrona. A função deve responder em 5 segundos. Se a função não responder, o Amazon Cognito repetirá a chamada. Após três tentativas malsucedidas, a função encerra a sessão. Você não pode alterar o valor do tempo limite de cinco segundos.
  • Se o Amazon Cognito não obtiver uma resposta do gatilho em cinco segundos, depois de três tentativas malsucedidas, o Amazon Cognito retornará o erro.

Resolução do erro

Se a função atingir o tempo limite, aplique práticas recomendadas para trabalhar com funções do Lambda a fim de otimizar a função. Você pode fazer com que a função do Lambda associada ao grupo de usuários chame de forma assíncrona uma segunda função do Lambda. Com essa configuração, as funções podem executar todas as ações necessárias sem atingir o tempo limite.

"PreSignUp failed with error Syntax error in module lambda_function."

Motivo do erro

O Amazon Cognito retorna esse erro quando há algum erro de sintaxe na sua função do Lambda.

Resolução do erro

Verifique novamente o código da função e corrija os erros de sintaxe.

"PreSignUp failed with error Handler 'lambda_handler'; missing on module; lambda_function."

Motivo do erro

As configurações de runtime da função incluem um parâmetro de manipulador. Se informações ou sintaxe incorretas forem definidas para HandlerInfo, a função não poderá ser executada e resultará nesse erro.

Resolução do erro

Configure o parâmetro do manipulador na configuração da sua função para informar ao runtime do Lambda qual método de manipulador invocar. 

Quando você configura uma função em Python, o valor da configuração do manipulador é o nome do arquivo e o nome do módulo manipulador separados por um ponto. Por exemplo, main.handler chama o método de manipulador definido em main.py.

Para obter mais informações sobre a sintaxe do manipulador, consulte Modificar o ambiente de runtime.

Informações relacionadas

Considerações importantes

Runtimes personalizados do AWS Lambda

AWS OFICIAL
AWS OFICIALAtualizada há um ano