@@ -10,9 +10,9 @@ import * as lakeformation from 'aws-cdk-lib/aws-lakeformation';
1010import * as lambda from 'aws-cdk-lib/aws-lambda' ;
1111import * as cr from 'aws-cdk-lib/custom-resources' ;
1212import * as fs from "fs" ;
13+ import { Asset } from 'aws-cdk-lib/aws-s3-assets' ;
1314
1415
15- import { URL } from "url" ;
1616
1717
1818export interface FederatedCrawlerTemplateProps extends StackProps {
@@ -172,6 +172,7 @@ export interface DataSetEnrollmentProps extends StackProps {
172172 SourceAccessPolicy ?: iam . Policy ;
173173 MaxDPUs : number ;
174174 WorkflowCronScheduleExpression ?: string ;
175+ LocalJarsForGlueJob ?: string [ ] ;
175176}
176177
177178
@@ -253,7 +254,7 @@ export class DataSetEnrollment extends Construct {
253254 } ) ;
254255 if ( props . SourceConnectionInput . name ) {
255256 connectionArray . push ( props . SourceConnectionInput . name ) ;
256- }
257+ }
257258 }
258259
259260
@@ -279,9 +280,38 @@ export class DataSetEnrollment extends Construct {
279280 } ) ;
280281 glueScript . grantRead ( this . DataSetGlueRole ) ;
281282
283+
284+
285+
286+ var additonalJars : Array < string > = [ ] ;
287+ const currentEnrollment = this ;
288+ if ( typeof props . LocalJarsForGlueJob !== "undefined" ) {
289+
290+ props . LocalJarsForGlueJob . forEach ( function ( localPath : string ) {
291+
292+
293+ const localName = localPath . replace ( / \W / g, '' ) ;
294+ const jarAsset = new s3assets . Asset ( currentEnrollment , `${ localName } -GlueScript` , {
295+ path : localPath
296+ } ) ;
297+ jarAsset . grantRead ( currentEnrollment . DataSetGlueRole ) ;
298+
299+ additonalJars . push ( jarAsset . s3ObjectUrl ) ;
300+ } ) ;
301+
302+ const additonalJarsParam = additonalJars . join ( ',' ) ;
303+
304+ if ( typeof props . GlueScriptArguments [ '--extra-jars' ] !== "undefined" ) {
305+
306+ props . GlueScriptArguments [ '--extra-jars' ] = props . GlueScriptArguments [ '--extra-jars' ] + "," + additonalJarsParam
307+ } else {
308+ props . GlueScriptArguments [ '--extra-jars' ] = additonalJarsParam
309+ }
282310
311+ }
283312
284313 /// The spread operator below (...) makes the connections property conditional. Its only used for JDBC sources at the moment.
314+
285315 const jobParams = {
286316 executionProperty : {
287317 maxConcurrentRuns : 1
@@ -306,7 +336,6 @@ export class DataSetEnrollment extends Construct {
306336 }
307337 const etl_job = new glue . CfnJob ( this , `${ props . dataSetName } -EtlJob` , jobParams ) ;
308338
309-
310339 const datalake_crawler = this . setupCrawler ( this . Dataset_Datalake , this . DataLakeTargets , false , this . Dataset_DatalakeDatabaseName ) ;
311340
312341 const datalakeEnrollmentWorkflow = new DataLakeEnrollmentWorkflow ( this , `${ props . dataSetName } DataLakeWorkflow` , {
0 commit comments