Description
Expected Behavior
Accessing code_parameter property of cognito_user_pool_event.CustomMessageTriggerEvent returns the proper encrypted code.
Current Behaviour
Mapping the CustomMessageTriggerEvent data class of cognito_user_pool_event leads to a KeyError because the received event property names have been changed by AWS.
The new request and documentation can be found at : https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-custom-sms-sender.html#custom-sms-sender-parameters
Code snippet
from aws_lambda_powertools.utilities import data_classes
from aws_lambda_powertools.utilities.data_classes import cognito_user_pool_event
@data_classes.event_source(data_class=cognito_user_pool_event.CustomMessageTriggerEvent)
def handler(event, context):
code = event.request.code_parameter
Possible Solution
Update data class source for cognito_user_pool_event to reflect the updated event. Currently it fetches event['request']['code_parameter']
but it should fetch event['request']['code']
If that's OK I could contribute, I'd be glad to go through all the source events for Cognito as I see it's been quite a while since they have been added to the project. I could go through the current AWS docs and test it with existing Cognito Pool event behavior for all the events as we rely heavily on those in our current project.
For now I've recreated the event class in our local code, deriving BaseTriggerEvent
.
Steps to Reproduce
This is the event trigger that is sent by Cognito that can be used as an input to the lambda handler.
{
"version": "1",
"triggerSource": "CustomSMSSender_ResendCode",
"region": "<region>",
"userPoolId": "<pool_id>",
"userName": "<user_name>",
"callerContext": {
"awsSdkVersion": "aws-sdk-unknown-unknown",
"clientId": "<client_id>"
},
"request": {
"type": "customEmailSenderRequestV1",
"code": "<encrypted_code>",
"clientMetadata": {},
"userAttributes": {
<usual_attributes>
}
}
}
Powertools for AWS Lambda (Python) version
latest
AWS Lambda function runtime
3.11
Packaging format used
PyPi
Debugging logs
[ERROR] KeyError: 'codeParameter'
Traceback (most recent call last):
File "/opt/python/aws_lambda_powertools/logging/logger.py", line 447, in decorate
return lambda_handler(event, context, *args, **kwargs)
File "/opt/python/aws_lambda_powertools/middleware_factory/factory.py", line 135, in wrapper
response = middleware()
File "/opt/python/aws_lambda_powertools/utilities/data_classes/event_source.py", line 39, in event_source
return handler(data_class(event), context)
File "/var/task/custom_sms_trigger/index.py", line 39, in handler
return handle_sms_event(event=event)
File "/var/task/custom_sms_trigger/index.py", line 25, in handle_sms_event
if not event.request.code_parameter:
File "/opt/python/aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py", line 271, in code_parameter
return self["request"]["codeParameter"]
Metadata
Metadata
Assignees
Type
Projects
Status