Skip to content
This repository was archived by the owner on Jul 16, 2024. It is now read-only.

Commit 65750bc

Browse files
authored
Merge pull request #703 from aws-samples/fix/emr-eks-service-role
fix: add flag for service linked role
2 parents 3c8070e + 9565e8b commit 65750bc

File tree

2 files changed

+39
-6
lines changed

2 files changed

+39
-6
lines changed

core/API.md

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

core/src/emr-eks-platform/emr-eks-cluster.ts

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)