constructor()

in lib/constructs/data-set-enrollment.ts [343:495]


	constructor(scope: Construct, id: string, props: DataLakeEnrollmentWorkflowProps) {
		super(scope, id);
		
		this.Workflow = new glue.CfnWorkflow(this, "etlWorkflow", {
			name: props.workfowName
		});

		this.sourceCrawler = props.srcCrawler;
		
		if(props.WorkflowCronScheduleExpression == null){
			this.StartTrigger = new glue.CfnTrigger(this,"startTrigger",{
	            actions: [
	                {
	                    crawlerName: props.srcCrawler.name
	                }
	            ], 
	            type: "ON_DEMAND", 
	            name: `startWorkflow-${this.Workflow.name}`, 
	            workflowName: this.Workflow.name
	        });
			
		}else{
			
			this.StartTrigger = new glue.CfnTrigger(this,"startTrigger",{
	            actions: [
	                {
	                    crawlerName: this.sourceCrawler.name
	                }
	            ], 
	            type: "SCHEDULED", 
	            schedule: props.WorkflowCronScheduleExpression,
	            name: `startWorkflow-${this.Workflow.name}`, 
	            workflowName: this.Workflow.name
	        });
		}
		
		

        
		this.SrcCrawlerCompleteTrigger = new glue.CfnTrigger(this,"srcCrawlerCompleteTrigger",{
	        predicate: {
	            conditions: [
	                {
	                    crawlerName: props.srcCrawler.name, 
	                    crawlState: "SUCCEEDED", 
	                    logicalOperator: "EQUALS"
	                }
	            ], 
	            logical: "ANY"
	        }, 
	        name: `sourceDataCrawled-${this.Workflow.name}`, 
	        actions: [
	            {
	                jobName: props.etlJob.name
	            }
	        ], 
	        workflowName: this.Workflow.name, 
	        type: "CONDITIONAL",
	        startOnCreation: true
	        
	    });
	    
	    this.ETLCompleteTrigger = new glue.CfnTrigger(this,"etlCompleteTrigger",{
            predicate: {
                conditions: [
                    {
                        state: "SUCCEEDED", 
                        logicalOperator: "EQUALS", 
                        jobName: props.etlJob.name
                    }
                ], 
                logical: "ANY"
            }, 
            name: `EtlComplete-${this.Workflow.name}`, 
            actions: [
                {
                    crawlerName: props.datalakeCrawler.name
                }
            ], 
            workflowName: this.Workflow.name, 
            type: "CONDITIONAL"
        });
		
		this.StartTrigger.node.addDependency(this.Workflow);
		this.SrcCrawlerCompleteTrigger.node.addDependency(this.Workflow);
		this.ETLCompleteTrigger.node.addDependency(this.Workflow);

	
	    const activateTriggerRole = new iam.Role(this, 'activateTriggerRole', {
        	assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com')
    	});
    	
    	activateTriggerRole.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicExecutionRole'));
    	
    	activateTriggerRole.addToPolicy(new iam.PolicyStatement({
			effect: iam.Effect.ALLOW,
			resources: ['*'],
			actions: ['glue:StartTrigger']
		}));
    	

		const activateTriggerFunction = new lambda.SingletonFunction(this, 'activateTriggerSingleton', {
	            role: activateTriggerRole, 
	            uuid: "ActivateGlueTriggerFunction",
	            code: new lambda.InlineCode(fs.readFileSync('./scripts/lambda.activategluetigger.py', { encoding: 'utf-8' })),
	            handler: 'index.main',
	            timeout: Duration.seconds(300),
	            runtime: lambda.Runtime.PYTHON_3_7,
	            memorySize: 1024
        });
        
        
	        
		 
		if(props.WorkflowCronScheduleExpression != null){		 
			
			const CronTrigger_triggerActivationProvider = new cr.Provider(this, 'CronTrigger_triggerActivationProvider', {
				onEventHandler: activateTriggerFunction,
		    });
			
		    const CronTrigger_triggerActivation = new CustomResource(this, 'CronTrigger-triggerActivation',  {
				serviceToken: CronTrigger_triggerActivationProvider.serviceToken,
	        	properties: {
	        		triggerId: this.StartTrigger.name
	        	}
		    });			
		}
		
		const srcCrawlerCompleteTrigger_triggerActivationProvider = new cr.Provider(this, 'srcCrawlerCompleteTrigger_triggerActivationProvider', {
			onEventHandler: activateTriggerFunction,
	    });
		
		
	    const srcCrawlerCompleteTrigger_triggerActivation = new CustomResource(this, 'srcCrawlerCompleteTrigger_triggerActivation',  {
        	serviceToken: srcCrawlerCompleteTrigger_triggerActivationProvider.serviceToken,
        	properties: {
        		triggerId: this.SrcCrawlerCompleteTrigger.name
        	}
	    });
	    
	    
		const etlTrigger_triggerActivationProvider = new cr.Provider(this, 'etlTrigger_triggerActivationProvider', {
			onEventHandler: activateTriggerFunction,
	    });
	    
	    const etlTrigger_triggerActivation = new CustomResource(this, 'etlTrigger-triggerActivation',  {
        	serviceToken: etlTrigger_triggerActivationProvider.serviceToken,
        	properties: {
        		triggerId: this.ETLCompleteTrigger.name
        	}
	    });
	    
	}