Skip to content

Commit 45e8d5e

Browse files
author
EC2 Default User
committed
Adding the ability to supply local JARs to the Glue job.
1 parent 4000213 commit 45e8d5e

File tree

2 files changed

+35
-4
lines changed

2 files changed

+35
-4
lines changed

lib/constructs/data-set-enrollment.ts

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ import * as lakeformation from 'aws-cdk-lib/aws-lakeformation';
1010
import * as lambda from 'aws-cdk-lib/aws-lambda';
1111
import * as cr from 'aws-cdk-lib/custom-resources';
1212
import * as fs from "fs";
13+
import { Asset } from 'aws-cdk-lib/aws-s3-assets';
1314

1415

15-
import { URL } from "url";
1616

1717

1818
export 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`,{

lib/constructs/s3-data-set-enrollment.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export interface S3dataSetEnrollmentProps extends DataLakeEnrollment.DataLakeEnr
1616
sourceBucketDataPrefixes: string[];
1717
MaxDPUs: number;
1818
ExistingLakeFormationResource?: lakeformation.CfnResource;
19+
LocalJarsForGlueJob?: string[];
1920
}
2021

2122

@@ -118,7 +119,8 @@ export class S3dataSetEnrollment extends DataLakeEnrollment{
118119
s3Targets: s3DataLakePaths
119120
},
120121
GlueScriptArguments: props.GlueScriptArguments,
121-
WorkflowCronScheduleExpression: props.WorkflowCronScheduleExpression
122+
WorkflowCronScheduleExpression: props.WorkflowCronScheduleExpression,
123+
LocalJarsForGlueJob: props.LocalJarsForGlueJob
122124
});
123125

124126

0 commit comments

Comments
 (0)