Lazy load AWS EC2 data

This commit is contained in:
Rendani Gangazhe
2023-06-02 10:08:17 -04:00
committed by Dannon Baker
parent d8d674cfac
commit 779d3bb4f3
6 changed files with 405 additions and 475 deletions
@@ -1,4 +1,4 @@
import ec2 from "./ec2.json";
import { ec2Instances } from "./awsEc2ReferenceData.js";
import flushPromises from "flush-promises";
import { getLocalVue } from "tests/jest/helpers";
import AwsEstimate from "./AwsEstimate";
@@ -14,6 +14,7 @@ describe("JobMetrics/AwsEstimate.vue", () => {
jobRuntimeInSeconds: 0,
coresAllocated: -999,
memoryAllocatedInMebibyte: -999,
ec2Instances,
},
localVue,
});
@@ -33,6 +34,7 @@ describe("JobMetrics/AwsEstimate.vue", () => {
jobRuntimeInSeconds: Number(seconds),
coresAllocated: Number(cores),
memoryAllocatedInMebibyte: Number(memory),
ec2Instances,
},
});
@@ -41,7 +43,7 @@ describe("JobMetrics/AwsEstimate.vue", () => {
if (wrapper.find("#aws-estimate").exists()) {
return {
cost: wrapper.find("#aws-cost").text(),
vcpus: wrapper.find("#aws-vcpus").text(),
vCpuCount: wrapper.find("#aws-vcpus").text(),
cpu: wrapper.find("#aws-cpu").text(),
mem: wrapper.find("#aws-mem").text(),
name: wrapper.find("#aws-name").text(),
@@ -52,10 +54,10 @@ describe("JobMetrics/AwsEstimate.vue", () => {
};
const assertAwsInstance = (estimates) => {
const instance = ec2.find((instance) => estimates.name === instance.name);
const instance = ec2Instances.find((instance) => estimates.name === instance.name);
expect(estimates.mem).toBe(instance.mem.toString());
expect(estimates.vcpus).toBe(instance.vcpus.toString());
expect(estimates.cpu).toBe(instance.cpu.join(", "));
expect(estimates.vCpuCount).toBe(instance.vCpuCount.toString());
expect(estimates.cpu).toBe(instance.cpu.map(({ cpuModel }) => cpuModel).join(", "));
};
const estimates_small = await deriveRenderedAwsEstimate("1.0000000", "9.0000000", "2048.0000000");
@@ -1,11 +1,23 @@
<script setup lang="ts">
import { computed } from "vue";
import ec2 from "./ec2.json";
export interface AwsEstimateProps {
jobRuntimeInSeconds: number;
coresAllocated: number;
memoryAllocatedInMebibyte?: number;
ec2Instances: {
name: string;
mem: number;
price: number;
priceUnit: string;
vCpuCount: number;
cpu: {
cpuModel: string;
tdp: number;
coreCount: number;
source: string;
}[];
}[];
}
const props = defineProps<AwsEstimateProps>();
@@ -20,8 +32,8 @@ const computedAwsEstimate = computed(() => {
const adjustedMemoryAllocated = memoryAllocatedInMebibyte ? memoryAllocatedInMebibyte / 1024 : 0.5;
// Estimate EC2 instance. Data is already sorted
const ec2Instance = ec2.find((ec) => {
return ec.mem >= adjustedMemoryAllocated && ec.vcpus >= coresAllocated;
const ec2Instance = props.ec2Instances.find((ec) => {
return ec.mem >= adjustedMemoryAllocated && ec.vCpuCount >= coresAllocated;
});
if (!ec2Instance) {
@@ -30,7 +42,7 @@ const computedAwsEstimate = computed(() => {
return {
seconds: jobRuntimeInSeconds,
vcpus: coresAllocated,
requestedVCpuCount: coresAllocated,
memory: adjustedMemoryAllocated,
price: ((jobRuntimeInSeconds * ec2Instance.price) / 3600).toFixed(2),
instance: ec2Instance,
@@ -46,13 +58,14 @@ const computedAwsEstimate = computed(() => {
<br />
This job requested {{ computedAwsEstimate.vcpus }} core(s) and {{ computedAwsEstimate.memory.toFixed(3) }} GiB
of memory. Given this information, the smallest EC2 machine we could find is:
This job requested {{ computedAwsEstimate.requestedVCpuCount }} core(s) and
{{ computedAwsEstimate.memory.toFixed(3) }} GiB of memory. Given this information, the smallest EC2 machine we
could find is:
<span id="aws-name">{{ computedAwsEstimate.instance.name }}</span>
(<span id="aws-mem">{{ computedAwsEstimate.instance.mem }}</span> GB /
<span id="aws-vcpus">{{ computedAwsEstimate.instance.vcpus }}</span> vCPUs /
<span id="aws-cpu">{{ computedAwsEstimate.instance.cpu.join(", ") }}</span
<span id="aws-vcpus">{{ computedAwsEstimate.instance.vCpuCount }}</span> vCPUs /
<span id="aws-cpu">{{ computedAwsEstimate.instance.cpu.map(({ cpuModel }) => cpuModel).join(", ") }}</span
>). This instance is priced at {{ computedAwsEstimate.instance.price }} USD/hour.
<br />
@@ -1,32 +0,0 @@
[
{
"cpuModel": "Intel Xeon E5-2670 v2 (Ivy Bridge/Sandy Bridge)",
"tdp": 115,
"coreCount": 10,
"source": "https://www.techpowerup.com/cpu-specs/xeon-e5-2670-v2.c1665"
},
{
"cpuModel": "Intel Xeon E5-2676 v3 (Haswell)",
"tdp": 120,
"coreCount": 12,
"source": "https://www.techpowerup.com/cpu-specs/xeon-e5-2676-v3.c2885"
},
{
"cpuModel": "Intel Xeon E5-2686 v4 (Broadwell)",
"tdp": 145,
"coreCount": 18,
"source": "https://en.wikichip.org/wiki/intel/xeon_e5/e5-2686_v4"
},
{
"cpuModel": "Intel Xeon 8259CL (Cascade Lake)",
"tdp": 210,
"coreCount": 24,
"source": "https://www.cpubenchmark.net/cpu.php?cpu=Intel+Xeon+Platinum+8259CL+%40+2.50GHz&id=3671"
},
{
"cpuModel": "Intel Xeon Platinum 8175M",
"tdp": 240,
"coreCount": 24,
"source": "https://en.wikichip.org/wiki/intel/xeon_platinum/8175m"
}
]
+32 -11
View File
@@ -1,10 +1,8 @@
<script setup lang="ts">
import AwsEstimate from "./AwsEstimate.vue";
import CarbonEmissions from "./CarbonEmissions/CarbonEmissions.vue";
import cpuReferenceData from "./CarbonEmissions/cpu_tdp.json";
import ec2 from "./ec2.json";
import { useJobMetricsStore } from "@/stores/jobMetricsStore";
import { computed, unref } from "vue";
import { computed, ref, unref } from "vue";
export interface JobMetricsProps {
datasetFilesize?: number;
@@ -34,9 +32,22 @@ async function getJobMetrics() {
}
getJobMetrics();
function getMetricByName(key: string) {
return jobMetrics.value.find(({ name }) => name === key)?.raw_value;
}
const ec2Instances = ref<EC2[]>();
import("./awsEc2ReferenceData.js").then((data) => (ec2Instances.value = data.ec2Instances));
type EC2 = {
name: string;
mem: number;
price: number;
priceUnit: string;
vCpuCount: number;
cpu: {
cpuModel: string;
tdp: number;
coreCount: number;
source: string;
}[];
};
const jobMetrics = computed(() => {
if (props.jobId) {
@@ -67,6 +78,10 @@ const pluginsSortedByPluginType = computed(() => {
return Object.keys(jobMetricsGroupedByPluginType.value).sort();
});
function getMetricByName(key: string) {
return jobMetrics.value.find(({ name }) => name === key)?.raw_value;
}
const jobRuntimeInSeconds = computed(() => {
const runtime = getMetricByName("runtime_seconds");
@@ -94,21 +109,26 @@ const estimatedServerInstance = computed(() => {
const memory = unref(memoryAllocatedInMebibyte);
const adjustedMemory = memory ? memory / 1024 : 0;
const serverInstance = ec2.find((ec) => {
const ec2 = unref(ec2Instances);
if (!ec2) {
return;
}
const serverInstance = ec2.find((instance) => {
if (adjustedMemory === 0) {
// Exclude memory from search criteria
return ec2.find((ec) => ec.vcpus >= cores);
return instance.vCpuCount >= cores;
}
// Search by all criteria
return ec.mem >= adjustedMemory && ec.vcpus >= cores;
return instance.mem >= adjustedMemory && instance.vCpuCount >= cores;
});
if (!serverInstance) {
return;
}
const cpu = cpuReferenceData.find(({ cpuModel }) => serverInstance.cpu.includes(cpuModel));
const cpu = serverInstance.cpu[0];
if (!cpu) {
return;
}
@@ -144,7 +164,8 @@ const estimatedServerInstance = computed(() => {
</div>
<AwsEstimate
v-if="jobRuntimeInSeconds && coresAllocated"
v-if="jobRuntimeInSeconds && coresAllocated && ec2Instances"
:ec2-instances="ec2Instances"
:should-show-aws-estimate="shouldShowAwsEstimate"
:job-runtime-in-seconds="jobRuntimeInSeconds"
:cores-allocated="coresAllocated"
@@ -0,0 +1,345 @@
const config1 = [
{
cpuModel: "Intel Xeon E5-2676 v3 (Haswell)",
tdp: 120,
coreCount: 12,
source: "https://www.techpowerup.com/cpu-specs/xeon-e5-2676-v3.c2885",
},
{
cpuModel: "Intel Xeon E5-2686 v4 (Broadwell)",
tdp: 145,
coreCount: 18,
source: "https://en.wikichip.org/wiki/intel/xeon_e5/e5-2686_v4",
},
];
const config2 = [
{
cpuModel: "Intel Xeon 8259CL (Cascade Lake)",
tdp: 210,
coreCount: 24,
source: "https://www.cpubenchmark.net/cpu.php?cpu=Intel+Xeon+Platinum+8259CL+%40+2.50GHz&id=3671",
},
{
cpuModel: "Intel Xeon Platinum 8175M",
tdp: 240,
coreCount: 24,
source: "https://en.wikichip.org/wiki/intel/xeon_platinum/8175m",
},
];
const config3 = [
{
cpuModel: "Intel Xeon E5-2670 v2 (Ivy Bridge/Sandy Bridge)",
tdp: 115,
coreCount: 10,
source: "https://www.techpowerup.com/cpu-specs/xeon-e5-2670-v2.c1665",
},
];
export const ec2Instances = [
{
name: "t2.nano",
mem: 0.5,
price: 0.0067,
priceUnit: "Hrs",
vCpuCount: 1,
cpu: config1,
},
{
name: "t3.nano",
mem: 0.5,
price: 0.006,
priceUnit: "Hrs",
vCpuCount: 2,
cpu: config2,
},
{
name: "t2.micro",
mem: 1,
price: 0.0134,
priceUnit: "Hrs",
vCpuCount: 1,
cpu: config1,
},
{
name: "t3.micro",
mem: 1,
price: 0.012,
priceUnit: "Hrs",
vCpuCount: 2,
cpu: config2,
},
{
name: "t2.small",
mem: 2,
price: 0.0268,
priceUnit: "Hrs",
vCpuCount: 1,
cpu: config1,
},
{
name: "t3.small",
mem: 2,
price: 0.024,
priceUnit: "Hrs",
vCpuCount: 2,
cpu: config2,
},
{
name: "m3.medium",
mem: 3.75,
price: 0.079,
priceUnit: "Hrs",
vCpuCount: 1,
cpu: config3,
},
{
name: "t2.medium",
mem: 4,
price: 0.0536,
priceUnit: "Hrs",
vCpuCount: 2,
cpu: config1,
},
{
name: "t3.medium",
mem: 4,
price: 0.048,
priceUnit: "Hrs",
vCpuCount: 2,
cpu: config2,
},
{
name: "m3.large",
mem: 7.5,
price: 0.158,
priceUnit: "Hrs",
vCpuCount: 2,
cpu: config2,
},
{
name: "t2.large",
mem: 8,
price: 0.1072,
priceUnit: "Hrs",
vCpuCount: 2,
cpu: config1,
},
{
name: "t3.large",
mem: 8,
price: 0.096,
priceUnit: "Hrs",
vCpuCount: 2,
cpu: config2,
},
{
name: "m5.large",
mem: 8,
price: 0.115,
priceUnit: "Hrs",
vCpuCount: 2,
cpu: config2,
},
{
name: "m5d.large",
mem: 8,
price: 0.136,
priceUnit: "Hrs",
vCpuCount: 2,
cpu: config2,
},
{
name: "m4.large",
mem: 8,
price: 0.12,
priceUnit: "Hrs",
vCpuCount: 2,
cpu: config1,
},
{
name: "m3.xlarge",
mem: 15,
price: 0.315,
priceUnit: "Hrs",
vCpuCount: 4,
cpu: config2,
},
{
name: "m5.xlarge",
mem: 16,
price: 0.23,
priceUnit: "Hrs",
vCpuCount: 4,
cpu: config2,
},
{
name: "m4.xlarge",
mem: 16,
price: 0.24,
priceUnit: "Hrs",
vCpuCount: 4,
cpu: config1,
},
{
name: "t3.xlarge",
mem: 16,
price: 0.192,
priceUnit: "Hrs",
vCpuCount: 4,
cpu: config2,
},
{
name: "t2.xlarge",
mem: 16,
price: 0.2144,
priceUnit: "Hrs",
vCpuCount: 4,
cpu: config1,
},
{
name: "m5d.xlarge",
mem: 16,
price: 0.272,
priceUnit: "Hrs",
vCpuCount: 4,
cpu: config2,
},
{
name: "m3.2xlarge",
mem: 30,
price: 0.632,
priceUnit: "Hrs",
vCpuCount: 8,
cpu: config2,
},
{
name: "m5d.2xlarge",
mem: 32,
price: 0.544,
priceUnit: "Hrs",
vCpuCount: 8,
cpu: config2,
},
{
name: "m5.2xlarge",
mem: 32,
price: 0.46,
priceUnit: "Hrs",
vCpuCount: 8,
cpu: config2,
},
{
name: "m4.2xlarge",
mem: 32,
price: 0.48,
priceUnit: "Hrs",
vCpuCount: 8,
cpu: config1,
},
{
name: "t3.2xlarge",
mem: 32,
price: 0.384,
priceUnit: "Hrs",
vCpuCount: 8,
cpu: config2,
},
{
name: "t2.2xlarge",
mem: 32,
price: 0.4288,
priceUnit: "Hrs",
vCpuCount: 8,
cpu: config1,
},
{
name: "m5d.4xlarge",
mem: 64,
price: 1.088,
priceUnit: "Hrs",
vCpuCount: 16,
cpu: config2,
},
{
name: "m4.4xlarge",
mem: 64,
price: 0.96,
priceUnit: "Hrs",
vCpuCount: 16,
cpu: config1,
},
{
name: "m5.4xlarge",
mem: 64,
price: 0.92,
priceUnit: "Hrs",
vCpuCount: 16,
cpu: config2,
},
{
name: "m4.10xlarge",
mem: 160,
price: 2.4,
priceUnit: "Hrs",
vCpuCount: 40,
cpu: config1,
},
{
name: "m5d.12xlarge",
mem: 192,
price: 3.264,
priceUnit: "Hrs",
vCpuCount: 48,
cpu: config2,
},
{
name: "m5.12xlarge",
mem: 192,
price: 2.76,
priceUnit: "Hrs",
vCpuCount: 48,
cpu: config2,
},
{
name: "m4.16xlarge",
mem: 256,
price: 3.84,
priceUnit: "Hrs",
vCpuCount: 64,
cpu: config1,
},
{
name: "m5d.metal",
mem: 384,
price: 6.528,
priceUnit: "Hrs",
vCpuCount: 96,
cpu: config2,
},
{
name: "m5.metal",
mem: 384,
price: 5.52,
priceUnit: "Hrs",
vCpuCount: 96,
cpu: config2,
},
{
name: "m5d.24xlarge",
mem: 384,
price: 6.528,
priceUnit: "Hrs",
vCpuCount: 96,
cpu: config2,
},
{
name: "m5.24xlarge",
mem: 384,
price: 5.52,
priceUnit: "Hrs",
vCpuCount: 96,
cpu: config2,
},
];
-419
View File
@@ -1,419 +0,0 @@
[
{
"name": "t2.nano",
"mem": 0.5,
"price": 0.0067,
"priceunit": "Hrs",
"vcpus": 1,
"cpu": [
"Intel Xeon E5-2676 v3 (Haswell)",
"Intel Xeon E5-2686 v4 (Broadwell)"
]
},
{
"name": "t3.nano",
"mem": 0.5,
"price": 0.006,
"priceunit": "Hrs",
"vcpus": 2,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "t2.micro",
"mem": 1,
"price": 0.0134,
"priceunit": "Hrs",
"vcpus": 1,
"cpu": [
"Intel Xeon E5-2676 v3 (Haswell)",
"Intel Xeon E5-2686 v4 (Broadwell)"
]
},
{
"name": "t3.micro",
"mem": 1,
"price": 0.012,
"priceunit": "Hrs",
"vcpus": 2,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "t2.small",
"mem": 2,
"price": 0.0268,
"priceunit": "Hrs",
"vcpus": 1,
"cpu": [
"Intel Xeon E5-2676 v3 (Haswell)",
"Intel Xeon E5-2686 v4 (Broadwell)"
]
},
{
"name": "t3.small",
"mem": 2,
"price": 0.024,
"priceunit": "Hrs",
"vcpus": 2,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "m3.medium",
"mem": 3.75,
"price": 0.079,
"priceunit": "Hrs",
"vcpus": 1,
"cpu": [
"Intel Xeon E5-2670 v2 (Ivy Bridge/Sandy Bridge)"
]
},
{
"name": "t2.medium",
"mem": 4,
"price": 0.0536,
"priceunit": "Hrs",
"vcpus": 2,
"cpu": [
"Intel Xeon E5-2676 v3 (Haswell)",
"Intel Xeon E5-2686 v4 (Broadwell)"
]
},
{
"name": "t3.medium",
"mem": 4,
"price": 0.048,
"priceunit": "Hrs",
"vcpus": 2,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "m3.large",
"mem": 7.5,
"price": 0.158,
"priceunit": "Hrs",
"vcpus": 2,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "t2.large",
"mem": 8,
"price": 0.1072,
"priceunit": "Hrs",
"vcpus": 2,
"cpu": [
"Intel Xeon E5-2676 v3 (Haswell)",
"Intel Xeon E5-2686 v4 (Broadwell)"
]
},
{
"name": "t3.large",
"mem": 8,
"price": 0.096,
"priceunit": "Hrs",
"vcpus": 2,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "m5.large",
"mem": 8,
"price": 0.115,
"priceunit": "Hrs",
"vcpus": 2,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "m5d.large",
"mem": 8,
"price": 0.136,
"priceunit": "Hrs",
"vcpus": 2,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "m4.large",
"mem": 8,
"price": 0.12,
"priceunit": "Hrs",
"vcpus": 2,
"cpu": [
"Intel Xeon E5-2676 v3 (Haswell)",
"Intel Xeon E5-2686 v4 (Broadwell)"
]
},
{
"name": "m3.xlarge",
"mem": 15,
"price": 0.315,
"priceunit": "Hrs",
"vcpus": 4,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "m5.xlarge",
"mem": 16,
"price": 0.23,
"priceunit": "Hrs",
"vcpus": 4,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "m4.xlarge",
"mem": 16,
"price": 0.24,
"priceunit": "Hrs",
"vcpus": 4,
"cpu": [
"Intel Xeon E5-2676 v3 (Haswell)",
"Intel Xeon E5-2686 v4 (Broadwell)"
]
},
{
"name": "t3.xlarge",
"mem": 16,
"price": 0.192,
"priceunit": "Hrs",
"vcpus": 4,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "t2.xlarge",
"mem": 16,
"price": 0.2144,
"priceunit": "Hrs",
"vcpus": 4,
"cpu": [
"Intel Xeon E5-2676 v3 (Haswell)",
"Intel Xeon E5-2686 v4 (Broadwell)"
]
},
{
"name": "m5d.xlarge",
"mem": 16,
"price": 0.272,
"priceunit": "Hrs",
"vcpus": 4,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "m3.2xlarge",
"mem": 30,
"price": 0.632,
"priceunit": "Hrs",
"vcpus": 8,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "m5d.2xlarge",
"mem": 32,
"price": 0.544,
"priceunit": "Hrs",
"vcpus": 8,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "m5.2xlarge",
"mem": 32,
"price": 0.46,
"priceunit": "Hrs",
"vcpus": 8,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "m4.2xlarge",
"mem": 32,
"price": 0.48,
"priceunit": "Hrs",
"vcpus": 8,
"cpu": [
"Intel Xeon E5-2676 v3 (Haswell)",
"Intel Xeon E5-2686 v4 (Broadwell)"
]
},
{
"name": "t3.2xlarge",
"mem": 32,
"price": 0.384,
"priceunit": "Hrs",
"vcpus": 8,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "t2.2xlarge",
"mem": 32,
"price": 0.4288,
"priceunit": "Hrs",
"vcpus": 8,
"cpu": [
"Intel Xeon E5-2676 v3 (Haswell)",
"Intel Xeon E5-2686 v4 (Broadwell)"
]
},
{
"name": "m5d.4xlarge",
"mem": 64,
"price": 1.088,
"priceunit": "Hrs",
"vcpus": 16,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "m4.4xlarge",
"mem": 64,
"price": 0.96,
"priceunit": "Hrs",
"vcpus": 16,
"cpu": [
"Intel Xeon E5-2676 v3 (Haswell)",
"Intel Xeon E5-2686 v4 (Broadwell)"
]
},
{
"name": "m5.4xlarge",
"mem": 64,
"price": 0.92,
"priceunit": "Hrs",
"vcpus": 16,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "m4.10xlarge",
"mem": 160,
"price": 2.4,
"priceunit": "Hrs",
"vcpus": 40,
"cpu": [
"Intel Xeon E5-2676 v3 (Haswell)",
"Intel Xeon E5-2686 v4 (Broadwell)"
]
},
{
"name": "m5d.12xlarge",
"mem": 192,
"price": 3.264,
"priceunit": "Hrs",
"vcpus": 48,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "m5.12xlarge",
"mem": 192,
"price": 2.76,
"priceunit": "Hrs",
"vcpus": 48,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "m4.16xlarge",
"mem": 256,
"price": 3.84,
"priceunit": "Hrs",
"vcpus": 64,
"cpu": [
"Intel Xeon E5-2676 v3 (Haswell)",
"Intel Xeon E5-2686 v4 (Broadwell)"
]
},
{
"name": "m5d.metal",
"mem": 384,
"price": 6.528,
"priceunit": "Hrs",
"vcpus": 96,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "m5.metal",
"mem": 384,
"price": 5.52,
"priceunit": "Hrs",
"vcpus": 96,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "m5d.24xlarge",
"mem": 384,
"price": 6.528,
"priceunit": "Hrs",
"vcpus": 96,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
},
{
"name": "m5.24xlarge",
"mem": 384,
"price": 5.52,
"priceunit": "Hrs",
"vcpus": 96,
"cpu": [
"Intel Xeon 8175M (Skylake)",
"Intel Xeon 8259CL (Cascade Lake)"
]
}
]