def lambda_handler(event, context): # Lambda handler function uses crhelper library to handle CloudFormation services try: logger.info("<<<<<<<<<< Lambda_handler Event >>>>>>>>>>") logger.info(event) resource_type = event.get('ResourceType') if resource_type == 'Custom::Organizations' \ or resource_type == 'Custom::StackInstance' \ or resource_type == 'Custom::ServiceControlPolicy' \ or resource_type == 'Custom::CheckAVMExistsForAccount' \ or resource_type == 'Custom::ADConnector': s = '%s-%s' % (event.get('StackId'), event.get('LogicalResourceId')) physical_resource_id = md5(s.encode('UTF-8')).hexdigest() event.update({'PhysicalResourceId': physical_resource_id}) execute_state_machine(event) else: return cfn_handler(event, context, create, update, delete, logger, init_failed) except Exception as e: message = { 'FILE': __file__.split('/')[-1], 'METHOD': inspect.stack()[0][3], 'EXCEPTION': str(e) } logger.exception(message) raise
def lambda_handler(event, context): """ Pass event and context to cfn_handler cfn_handler calls the functions above based on mapping below, then uses its "send" function to post the result to CloudFormation """ logger.info("<<<<<<<<<< Lambda_handler Event >>>>>>>>>>") logger.info(event) request_type = event.get('RequestType', 'invalid').lower() if request_type in ['update', 'create', 'delete']: return cfn_handler(event, context, create, update, delete, logger, init_failed) else: logger.error('Invalid or missing request type {}'.format(request_type)) raise ValueError('No valid RequestType found! Request type "{}" received'.format(event['RequestType']))
def lambda_handler(event, context): # Lambda handler function uses cr helper library to handle CloudFormation services try: logger.info( "<<<<<<<<<< Custom Resource lambda_handler Event >>>>>>>>>>") # if the event is from the CloudWatch Events Service then invoke the state machine if event.get('source') == 'aws.tag' and event.get( 'detail-type') == 'Tag Change on Resource': logger.info('Event received from CloudWatch Event Service') logger.info(event) state_machine = StepFunctions(event, logger) state_machine.trigger_state_machine() # else if the event is from Cloudformation Service elif event.get('StackId' ) is not None and 'arn:aws:cloudformation' in event.get( 'StackId'): logger.info('Event received from Cloudformation Service') if event.get('ResourceType') != 'Custom::SecureSSMStrings': logger.info(event) # avoid printing sensitive data in the logs return cfn_handler(event, context, create, update, delete, logger, init_failed) # else of the event is from Web Application elif event.get('data') is not None: logger.info( 'Event received from Web App - Transit Network Management Console' ) logger.info(event) state_machine = StepFunctions(event.get('data'), logger) state_machine.trigger_state_machine() else: logger.info(event) logger.error('The event is from an invalid source') raise Exception( 'The event is neither from CloudWatch Event service or from Cloudformation service.' ) except Exception as e: message = { 'FILE': __file__.split('/')[-1], 'METHOD': inspect.stack()[0][3], 'EXCEPTION': str(e) } logger.exception(message) raise
def lambda_handler(event, context): logger.info("<<<<<<<<<< ConfigDeployer Event >>>>>>>>>>") logger.info(event) logger.debug(context) return cfn_handler(event, context, create, update, delete, logger, init_failed)