From c5348c7c8a148329c72deb59a48c02591b03d934 Mon Sep 17 00:00:00 2001 From: Corey Christous Date: Tue, 22 Jul 2025 11:06:01 -0400 Subject: [PATCH 1/2] change default EBS volume type to gp3 and add parameters for IOPS and throughput --- lib/argument-store.js | 4 +++- lib/aws-semaphore-agent-stack.js | 4 +++- test/aws-semaphore-agent.test.js | 12 +++++++++--- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/lib/argument-store.js b/lib/argument-store.js index c943aa5..389485a 100644 --- a/lib/argument-store.js +++ b/lib/argument-store.js @@ -29,8 +29,10 @@ class ArgumentStore { "SEMAPHORE_AGENT_AMI": "", "SEMAPHORE_AGENT_MANAGED_POLICY_NAMES": "", "SEMAPHORE_AGENT_VOLUME_NAME": "", - "SEMAPHORE_AGENT_VOLUME_TYPE": "gp2", + "SEMAPHORE_AGENT_VOLUME_TYPE": "gp3", "SEMAPHORE_AGENT_VOLUME_SIZE": "64", + "SEMAPHORE_AGENT_VOLUME_IOPS": "3000", + "SEMAPHORE_AGENT_VOLUME_THROUGHPUT": "125", "SEMAPHORE_AGENT_TAGS": "", "SEMAPHORE_AGENT_LICENSE_CONFIGURATION_ARN": "", "SEMAPHORE_AGENT_MAC_FAMILY": "mac2", diff --git a/lib/aws-semaphore-agent-stack.js b/lib/aws-semaphore-agent-stack.js index 53e527b..6d9a928 100644 --- a/lib/aws-semaphore-agent-stack.js +++ b/lib/aws-semaphore-agent-stack.js @@ -447,7 +447,9 @@ class AwsSemaphoreAgentStack extends Stack { volume: { ebsDevice: { volumeType: this.argumentStore.get("SEMAPHORE_AGENT_VOLUME_TYPE"), - volumeSize: this.argumentStore.getAsNumber("SEMAPHORE_AGENT_VOLUME_SIZE") + volumeSize: this.argumentStore.getAsNumber("SEMAPHORE_AGENT_VOLUME_SIZE"), + iops: this.argumentStore.getAsNumber("SEMAPHORE_AGENT_VOLUME_IOPS"), + throughput: this.argumentStore.getAsNumber("SEMAPHORE_AGENT_VOLUME_THROUGHPUT"), } } } diff --git a/test/aws-semaphore-agent.test.js b/test/aws-semaphore-agent.test.js index 9948972..0efea66 100644 --- a/test/aws-semaphore-agent.test.js +++ b/test/aws-semaphore-agent.test.js @@ -374,8 +374,10 @@ describe("launch configuration", () => { { DeviceName: "/dev/sda1", Ebs: { - VolumeType: "gp2", - VolumeSize: 64 + VolumeType: "gp3", + VolumeSize: 64, + Iops: 3000, + Throughput: 125, } } ] @@ -388,6 +390,8 @@ describe("launch configuration", () => { argumentStore.set("SEMAPHORE_AGENT_VOLUME_NAME", "/dev/sda1"); argumentStore.set("SEMAPHORE_AGENT_VOLUME_TYPE", "gp3"); argumentStore.set("SEMAPHORE_AGENT_VOLUME_SIZE", "3981"); + argumentStore.set("SEMAPHORE_AGENT_VOLUME_IOPS", "4500"); + argumentStore.set("SEMAPHORE_AGENT_VOLUME_THROUGHPUT", "450"); const template = createTemplate(argumentStore); template.hasResourceProperties("AWS::EC2::LaunchTemplate", { @@ -397,7 +401,9 @@ describe("launch configuration", () => { DeviceName: "/dev/sda1", Ebs: { VolumeType: "gp3", - VolumeSize: 3981 + VolumeSize: 3981, + Iops: 4500, + Throughput: 450, } } ] From b2241e9b93e8b05fc892b3256dbddcd76cbc7721 Mon Sep 17 00:00:00 2001 From: Corey Christous Date: Tue, 22 Jul 2025 11:24:06 -0400 Subject: [PATCH 2/2] default back to gp2 --- lib/argument-store.js | 6 +++--- lib/aws-semaphore-agent-stack.js | 22 ++++++++++++++++------ test/aws-semaphore-agent.test.js | 4 +--- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/lib/argument-store.js b/lib/argument-store.js index 389485a..3cc4f79 100644 --- a/lib/argument-store.js +++ b/lib/argument-store.js @@ -29,10 +29,10 @@ class ArgumentStore { "SEMAPHORE_AGENT_AMI": "", "SEMAPHORE_AGENT_MANAGED_POLICY_NAMES": "", "SEMAPHORE_AGENT_VOLUME_NAME": "", - "SEMAPHORE_AGENT_VOLUME_TYPE": "gp3", + "SEMAPHORE_AGENT_VOLUME_TYPE": "gp2", "SEMAPHORE_AGENT_VOLUME_SIZE": "64", - "SEMAPHORE_AGENT_VOLUME_IOPS": "3000", - "SEMAPHORE_AGENT_VOLUME_THROUGHPUT": "125", + "SEMAPHORE_AGENT_VOLUME_IOPS": "", + "SEMAPHORE_AGENT_VOLUME_THROUGHPUT": "", "SEMAPHORE_AGENT_TAGS": "", "SEMAPHORE_AGENT_LICENSE_CONFIGURATION_ARN": "", "SEMAPHORE_AGENT_MAC_FAMILY": "mac2", diff --git a/lib/aws-semaphore-agent-stack.js b/lib/aws-semaphore-agent-stack.js index 6d9a928..7c3a8d2 100644 --- a/lib/aws-semaphore-agent-stack.js +++ b/lib/aws-semaphore-agent-stack.js @@ -441,16 +441,26 @@ class AwsSemaphoreAgentStack extends Stack { return undefined } + const volumeType = this.argumentStore.get("SEMAPHORE_AGENT_VOLUME_TYPE"); + const ebsDevice = { + volumeType: volumeType, + volumeSize: this.argumentStore.getAsNumber("SEMAPHORE_AGENT_VOLUME_SIZE"), + }; + + if (!this.argumentStore.isEmpty("SEMAPHORE_AGENT_VOLUME_IOPS")) { + ebsDevice.iops = this.argumentStore.getAsNumber("SEMAPHORE_AGENT_VOLUME_IOPS"); + } + + // Only set throughput when volume type is gp3 because it is not supported for other volume types. + if (volumeType === "gp3" && !this.argumentStore.isEmpty("SEMAPHORE_AGENT_VOLUME_THROUGHPUT")) { + ebsDevice.throughput = this.argumentStore.getAsNumber("SEMAPHORE_AGENT_VOLUME_THROUGHPUT"); + } + return [ { deviceName: this.argumentStore.get("SEMAPHORE_AGENT_VOLUME_NAME"), volume: { - ebsDevice: { - volumeType: this.argumentStore.get("SEMAPHORE_AGENT_VOLUME_TYPE"), - volumeSize: this.argumentStore.getAsNumber("SEMAPHORE_AGENT_VOLUME_SIZE"), - iops: this.argumentStore.getAsNumber("SEMAPHORE_AGENT_VOLUME_IOPS"), - throughput: this.argumentStore.getAsNumber("SEMAPHORE_AGENT_VOLUME_THROUGHPUT"), - } + ebsDevice: ebsDevice } } ] diff --git a/test/aws-semaphore-agent.test.js b/test/aws-semaphore-agent.test.js index 0efea66..aadfeb9 100644 --- a/test/aws-semaphore-agent.test.js +++ b/test/aws-semaphore-agent.test.js @@ -374,10 +374,8 @@ describe("launch configuration", () => { { DeviceName: "/dev/sda1", Ebs: { - VolumeType: "gp3", + VolumeType: "gp2", VolumeSize: 64, - Iops: 3000, - Throughput: 125, } } ]