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}'
})