def lambda_handler()

in infra/src/lambda_poller/lambda_function.py [0:0]


def lambda_handler(event, context):
    """
    This Lambda strategy relies on CodePipeline to poll the SageMaker or Fraud Detector for training job status.
    The mechanism uses the CodePipeline 'continuationToken' which tells CodePipeline to keep polling this lambda
    every 30 seconds until the logic determines that the SageMaker/FraudDetector job is either completed or
    failed.

    There is a default 24hrs executation limit on CodePipeline when using a Lambda strategy. After 24hrs,
    this CodePipeline step will automatically be flags as failed.

    :param event:
    :param context:
    :return:
    """
    # Check to make sure it is called by CodePipeline
    if 'CodePipeline.job' not in event:
        raise ValueError("This lambda function is meant to be invoked by code pipeline only")

    job_id = event['CodePipeline.job'].get('id')
    try:
        job_data = event['CodePipeline.job'].get('data')

        # Check for the continuationToken
        if 'continuationToken' in job_data:
            continuation_token = job_data['continuationToken']
            update_poll_status(job_id, continuation_token)
        # No continuationToken
        else:
            user_params = job_data.get('actionConfiguration').get('configuration').get('UserParameters')
            put_continuation_token(job_id, user_params)
    except Exception as e:
        code_pipeline = boto3.client('codepipeline')
        code_pipeline.put_job_failure_result(jobId=job_id, failureDetails={
            'type': 'JobFailed',
            'message': f'Training job:  failed. Reason: {e} for user params {event}'
        })