From 163ed3aeab9d29aaf369564b57e244a7288e0515 Mon Sep 17 00:00:00 2001 From: lucas hanson Date: Thu, 6 Jul 2023 09:52:01 -0700 Subject: [PATCH] fixing trust policy and network configuration --- API.md | 4 +-- src/core/emr-serverless-cluster.ts | 7 +++-- test/emr-serverless-cluster.test.ts | 49 +++++++++++++++++++---------- 3 files changed, 38 insertions(+), 22 deletions(-) diff --git a/API.md b/API.md index 8dce4709..868a4444 100644 --- a/API.md +++ b/API.md @@ -3399,7 +3399,7 @@ Returns a string representation of this construct. ##### `createVpc` ```typescript -public createVpc(scope: Construct, environmentName: string, vpcCidr: string): IVpc +public createVpc(scope: Construct, resourceName: string, vpcCidr: string): IVpc ``` ###### `scope`Required @@ -3408,7 +3408,7 @@ public createVpc(scope: Construct, environmentName: string, vpcCidr: string): IV --- -###### `environmentName`Required +###### `resourceName`Required - *Type:* string diff --git a/src/core/emr-serverless-cluster.ts b/src/core/emr-serverless-cluster.ts index cbc40a27..c35a2841 100644 --- a/src/core/emr-serverless-cluster.ts +++ b/src/core/emr-serverless-cluster.ts @@ -46,6 +46,8 @@ export class EMRServerlessCluster extends Construct { this.vpc = ec2.Vpc.fromLookup(scope, "VPC", { vpcId: props.vpcId }); } else if (props.vpcCidr) { this.vpc = this.createVpc(scope, name, props.vpcCidr); + } else { + throw new Error("One of 'vpcId' or 'vpcCidr' must be provided"); } if (this.vpc) { @@ -67,7 +69,7 @@ export class EMRServerlessCluster extends Construct { } const emrServerlessRole = new iam.Role(scope, "EMR Serverless Cluster Role", { - assumedBy: new iam.ServicePrincipal("emr-serveless.amazonaws.com"), + assumedBy: new iam.ServicePrincipal("emr-serverless.amazonaws.com"), path: "/service-role/", }); emrServerlessRole.addManagedPolicy( @@ -128,8 +130,7 @@ export class EMRServerlessCluster extends Construct { ...mergedProps, }); } - createVpc(scope: Construct, environmentName: string, vpcCidr: string): ec2.IVpc { - const resourceName = `${environmentName}-MWAA`; + createVpc(scope: Construct, resourceName: string, vpcCidr: string): ec2.IVpc { const vpcCIDRMask = +vpcCidr.split("/")[1]; if (vpcCIDRMask > 20 || vpcCIDRMask < 16) { throw new Error("Vpc Cidr Range must of size >=16 and <=20"); diff --git a/test/emr-serverless-cluster.test.ts b/test/emr-serverless-cluster.test.ts index e6d0db96..bcebe79c 100644 --- a/test/emr-serverless-cluster.test.ts +++ b/test/emr-serverless-cluster.test.ts @@ -4,22 +4,6 @@ import * as s3 from "aws-cdk-lib/aws-s3"; import { EMRServerlessCluster } from "../src"; -test("EMR Serverless Cluster Basic", () => { - const stack = new cdk.Stack(); - - new EMRServerlessCluster(stack, "EMR Serverless Cluster", { - releaseLabel: "emr-6.11.0", - type: "SPARK", - }); - const template = Template.fromStack(stack); - template.hasResourceProperties("AWS::EMRServerless::Application", { - ReleaseLabel: "emr-6.11.0", - Type: "SPARK", - }); - template.resourceCountIs("AWS::IAM::Role", 1); - template.hasResourceProperties("AWS::S3::Bucket", {}); -}); - test("EMR Serverless Cluster Existing Vpc & Bucket", () => { const app = new cdk.App(); const stack = new cdk.Stack(app, "dummy-stack", { @@ -55,7 +39,6 @@ test("EMR Serverless Cluster New Vpc & Bucket", () => { type: "SPARK", name: "MyEMRApp", vpcCidr: "10.40.0.0/16", - s3Bucket: new s3.Bucket(stack, "my-dummy-bucket", {}), }); const template = Template.fromStack(stack); @@ -76,4 +59,36 @@ test("EMR Serverless Cluster New Vpc & Bucket", () => { template.resourceCountIs("AWS::EC2::Route", 6); template.resourceCountIs("AWS::EC2::InternetGateway", 1); template.resourceCountIs("AWS::EC2::VPCGatewayAttachment", 1); + template.resourceCountIs("AWS::S3::Bucket", 1); +}); + +test("Vpc Cidr or Id must be provided", () => { + const stack = new cdk.Stack(); + expect(() => { + new EMRServerlessCluster(stack, "Stage", { name: "EmrApp", releaseLabel: "emr-6.11.0", type: "SPARK" }); + }).toThrowError("One of 'vpcId' or 'vpcCidr' must be provided"); +}); + +test("Invalid Vpc Cidr: Too Large", () => { + const stack = new cdk.Stack(); + expect(() => { + new EMRServerlessCluster(stack, "Stage", { + name: "EmrApp", + releaseLabel: "emr-6.11.0", + type: "SPARK", + vpcCidr: "10.0.0.0/15", + }); + }).toThrowError("Vpc Cidr Range must of size >=16 and <=20"); +}); + +test("Invalid Vpc Cidr: Too Small", () => { + const stack = new cdk.Stack(); + expect(() => { + new EMRServerlessCluster(stack, "Stage", { + name: "EmrApp", + releaseLabel: "emr-6.11.0", + type: "SPARK", + vpcCidr: "10.0.0.0/21", + }); + }).toThrowError("Vpc Cidr Range must of size >=16 and <=20"); });