@@ -152,6 +152,13 @@ export interface EmrEksClusterProps {
152152 * Cannot be combined with vpcCidr, if combined vpcCidr takes precendency
153153 */
154154 readonly eksVpc ?: IVpc ;
155+
156+ /**
157+ * Wether we need to create an EMR on EKS Service Linked Role
158+ * @default - true
159+ */
160+
161+ readonly createEmrOnEksServiceLinkedRole ?: boolean ;
155162}
156163
157164/**
@@ -230,12 +237,13 @@ export class EmrEksCluster extends TrackedConstruct {
230237 public readonly ec2InstanceNodeGroupRole : Role ;
231238 private readonly managedEndpointProviderServiceToken : string ;
232239 private readonly jobTemplateProviderToken : string ;
233- private readonly emrServiceRole : CfnServiceLinkedRole ;
240+ private readonly emrServiceRole ? : CfnServiceLinkedRole ;
234241 private readonly assetUploadBucketRole : Role ;
235242 private readonly karpenterChart ?: HelmChart ;
236243 private readonly isKarpenter : boolean ;
237244 private readonly nodegroupAsgTagsProviderServiceToken : string ;
238245 private readonly defaultNodes : boolean ;
246+ private createEmrOnEksServiceLinkedRole : boolean ;
239247 /**
240248 * Constructs a new instance of the EmrEksCluster construct.
241249 * @param {Construct } scope the Scope of the CDK Construct
@@ -251,6 +259,10 @@ export class EmrEksCluster extends TrackedConstruct {
251259 super ( scope , id , trackedConstructProps ) ;
252260
253261 this . clusterName = props . eksClusterName ?? EmrEksCluster . DEFAULT_CLUSTER_NAME ;
262+
263+ //Set the flag for creating the EMR on EKS Service Linked Role
264+ this . createEmrOnEksServiceLinkedRole = props . createEmrOnEksServiceLinkedRole ?? true ;
265+
254266 //Define EKS cluster logging
255267 const eksClusterLogging : ClusterLoggingTypes [ ] = [
256268 ClusterLoggingTypes . API ,
@@ -379,9 +391,13 @@ export class EmrEksCluster extends TrackedConstruct {
379391
380392 // Create Amazon IAM ServiceLinkedRole for Amazon EMR and add to kubernetes configmap
381393 // required to add a dependency on the Amazon EMR virtual cluster
382- this . emrServiceRole = new CfnServiceLinkedRole ( this , 'EmrServiceRole' , {
383- awsServiceName : 'emr-containers.amazonaws.com' ,
384- } ) ;
394+
395+ if ( this . createEmrOnEksServiceLinkedRole ) {
396+ this . emrServiceRole = new CfnServiceLinkedRole ( this , 'EmrServiceRole' , {
397+ awsServiceName : 'emr-containers.amazonaws.com' ,
398+ } ) ;
399+ }
400+
385401
386402 this . eksCluster . awsAuth . addRoleMapping (
387403 Role . fromRoleArn (
@@ -487,7 +503,9 @@ export class EmrEksCluster extends TrackedConstruct {
487503 const k8sRole = JSON . parse ( JSON . stringify ( K8sRole ) ) ;
488504 k8sRole . metadata . namespace = eksNamespace ;
489505 const role = this . eksCluster . addManifest ( `${ options . name } Role` , k8sRole ) ;
490- role . node . addDependency ( this . emrServiceRole ) ;
506+
507+ if ( this . createEmrOnEksServiceLinkedRole ) role . node . addDependency ( this . emrServiceRole ! ) ;
508+
491509 if ( ns ) role . node . addDependency ( ns ) ;
492510
493511 // deep clone the Role Binding template object and replace the namespace
@@ -510,7 +528,8 @@ export class EmrEksCluster extends TrackedConstruct {
510528 } ) ;
511529
512530 virtCluster . node . addDependency ( roleBinding ) ;
513- virtCluster . node . addDependency ( this . emrServiceRole ) ;
531+ if ( this . createEmrOnEksServiceLinkedRole )
532+ virtCluster . node . addDependency ( this . emrServiceRole ! ) ;
514533
515534 if ( ns )
516535 virtCluster . node . addDependency ( ns ) ;
0 commit comments