Python Lambda dando botocore.errorfactory.InvalidLambdaResponseException quando acionado na pós-confirmação

Aug 24 2020

Eu configurei a função AWS Lambda que é acionada em um AWS Cognito. O gatilho em uma confirmação de e-mail bem-sucedida. A função Lambda está em Python3.6.

Estou me referindo à documentação da AWS para o gatilho pós-confirmação do Cognito. https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-post-confirmation.html

"response": {}

Até agora, tentei retornar None, {}, '{}' (string json vazia) ou dicionário válido como {'status': 200, 'message': 'the message string'}, mas está apresentando um erro.

botocore.errorfactory.InvalidLambdaResponseException: An error occurred (InvalidLambdaResponseException) when calling the ConfirmSignUp operation: Unrecognizable lambda output

Qual deve ser uma resposta válida para a função de pós-confirmação? aqui está a parte do código.

from DBConnect import user

import json

def lambda_handler(event, context):

    ua = event['request']['userAttributes']
    print("create user ua = ", ua)
    if ('name' in ua):
        name = ua['name']
    else:
        name = "guest"
    newUser = user.create(
        name = name,
        uid = ua['sub'],
        owner = ua['sub'],
        phoneNumber = ua['phone_number'],
        email = ua['email']
    )
    print(newUser)
    return '{}' #  <--- I am using literals here only.

Respostas

2 kerasbaz Aug 23 2020 at 23:54

Você precisa retornar o objeto de evento:

return event

Isso não é óbvio nos exemplos que eles fornecem na documentação. Você pode querer verificar e garantir que o objeto de evento contenha uma chave de resposta (deveria).