"""trigger-state-machine.""" import json from os import path import uuid import boto3 import config import shortuuid def handler(event, context): """Lambda entrypoint.""" correlation_id = uuid.uuid4() logger = config.get_current_logger(correlation_id) # Check event key is for an xml file if event.get('detail-type', '') == 'Object Created': key = event.get('detail', {}).get('object', {}).get('key') else: key = event.get('detail', {}).get('requestParameters', {}).get('key') logger.info(f'Lambda triggered by: {key}') if not key.endswith('.json') or not key: return if 'resources' in path.dirname(key): return logger.info(f'Executing state machine for: {key}') # Get event key folder name to use as part of sfn execution name execution_key = path.split(key)[1].split('.')[0] execution_name = ( f'BULK_{execution_key}' f'-{shortuuid.encode(uuid.uuid4())}' ) logger.info(f'Starting Execution: {execution_name}') logger.info(f'Execution input: {json.dumps(event)}') logger.info(f'Correlation id: {correlation_id}') # Attach correlation_id to event event['correlation_id'] = str(correlation_id) client = boto3.client('stepfunctions') response = client.start_execution( stateMachineArn=config.BULK_ASSETS_STATE_MACHINE_ARN, name=execution_name, input=json.dumps(event) ) execution_arn = response.get('executionArn') logger.info(f'Execution: {execution_arn}') return execution_arn