1398 lines
48 KiB
JavaScript
Executable File
1398 lines
48 KiB
JavaScript
Executable File
#!/bin/env zx
|
|
import fetch from "node-fetch"
|
|
import fs from "fs"
|
|
import { exit } from "process"
|
|
|
|
const targetNumberOfCores = 1
|
|
|
|
const spotPrice = JSON.parse(fs.readFileSync("spot-pricing.json", "utf-8"))
|
|
|
|
const advisorData = await (await fetch("https://spot-bid-advisor.s3.amazonaws.com/spot-advisor-data.json")).json()
|
|
|
|
const additionalInstanceData = JSON.parse(fs.readFileSync("instance-types.json", "utf-8"))
|
|
|
|
// Find all instances with (or dividing) the target number of cores with an eviction rate of less than 5%
|
|
// Sort by price
|
|
// Output top 40
|
|
|
|
const burstableBaselines = {
|
|
"t2.nano": 0.05,
|
|
"t2.micro": 0.10,
|
|
"t2.small": 0.20,
|
|
"t2.medium": 0.20,
|
|
"t2.large": 0.30,
|
|
"t2.xlarge": 0.225,
|
|
"t2.2xlarge": 0.17,
|
|
"t3.nano": 0.05,
|
|
"t3.micro": 0.10,
|
|
"t3.small": 0.20,
|
|
"t3.medium": 0.20,
|
|
"t3.large": 0.30,
|
|
"t3.xlarge": 0.40,
|
|
"t3.2xlarge": 0.40,
|
|
"t3a.nano": 0.05,
|
|
"t3a.micro": 0.10,
|
|
"t3a.small": 0.20,
|
|
"t3a.medium": 0.20,
|
|
"t3a.large": 0.30,
|
|
"t3a.xlarge": 0.40,
|
|
"t3a.2xlarge": 0.40,
|
|
"t4g.nano": 0.05,
|
|
"t4g.micro": 0.10,
|
|
"t4g.small": 0.20,
|
|
"t4g.medium": 0.20,
|
|
"t4g.large": 0.30,
|
|
"t4g.xlarge": 0.40,
|
|
"t4g.2xlarge": 0.40
|
|
}
|
|
|
|
const performanceData = {
|
|
"x8g.large": 59997,
|
|
"x2iezn.12xlarge": 1000208.377,
|
|
"m6a.12xlarge": 1009410.651,
|
|
"c6a.12xlarge": 1014155.926,
|
|
"m5zn.metal": 1015228.426,
|
|
"m8gb.8xlarge": 1015873.016,
|
|
"c8g.8xlarge": 1024081.927,
|
|
"i7i.12xlarge": 1053401.609,
|
|
"g6.12xlarge": 1056861.342,
|
|
"r7i.12xlarge": 1058395.502,
|
|
"c7a.8xlarge": 1061007.958,
|
|
"c6in.16xlarge": 1061183.883,
|
|
"g6e.12xlarge": 1061946.903,
|
|
"r6a.12xlarge": 1064183.572,
|
|
"m7i.12xlarge": 1068011.57,
|
|
"m6i.16xlarge": 1069742.175,
|
|
"vt1.24xlarge": 1069796.813,
|
|
"c6i.16xlarge": 1074862.493,
|
|
"r7a.8xlarge": 1076112.543,
|
|
"r6i.16xlarge": 1080077.631,
|
|
"x2iedn.16xlarge": 1082910.321,
|
|
"m7a.8xlarge": 1087079.606,
|
|
"m6in.16xlarge": 1090336.045,
|
|
"x2idn.16xlarge": 1098335.336,
|
|
"m6id.16xlarge": 1098570.999,
|
|
"m6idn.16xlarge": 1101738.681,
|
|
"i4i.16xlarge": 1102497.847,
|
|
"h1.16xlarge": 1104495.642,
|
|
"x1e.16xlarge": 1105974.856,
|
|
"c7i-flex.12xlarge": 1109399.076,
|
|
"m8i.12xlarge": 1109527.295,
|
|
"m8i-flex.12xlarge": 1114464.825,
|
|
"c7i.12xlarge": 1114637.356,
|
|
"m4.16xlarge": 1116343.973,
|
|
"r8idb.12xlarge": 1120012.445,
|
|
"r4.16xlarge": 1122216.377,
|
|
"i7ie.12xlarge": 1129456.057,
|
|
"m8ine.12xlarge": 1130742.049,
|
|
"c8i.12xlarge": 1138114.997,
|
|
"c5.18xlarge": 1142358.494,
|
|
"x1.16xlarge": 1144389.808,
|
|
"r8ib.12xlarge": 1145767.027,
|
|
"r8idn.12xlarge": 1148691.768,
|
|
"m8idb.12xlarge": 1153938.617,
|
|
"m8idn.12xlarge": 1156487.17,
|
|
"m8ib.12xlarge": 1159607.022,
|
|
"c5n.18xlarge": 1160775.462,
|
|
"c5d.18xlarge": 1164577.436,
|
|
"r8i.12xlarge": 1169590.643,
|
|
"m8in.12xlarge": 1169828.181,
|
|
"c8i-flex.12xlarge": 1172686.184,
|
|
"r5a.24xlarge": 1175174.44,
|
|
"c8ine.12xlarge": 1178203.24,
|
|
"r7g.12xlarge": 1184600.197,
|
|
"r8i-flex.12xlarge": 1195169.523,
|
|
"x8aedz.6xlarge": 1196085.538,
|
|
"x8i.12xlarge": 1197604.79,
|
|
"c5a.16xlarge": 1197828.935,
|
|
"g7e.12xlarge": 1199200.533,
|
|
"c5n.metal": 1201201.201,
|
|
"r8in.12xlarge": 1205525.324,
|
|
"m5a.24xlarge": 1205575.788,
|
|
"c7gd.12xlarge": 1211280.045,
|
|
"r6g.metal": 1222229.295,
|
|
"r7gd.12xlarge": 1239589.386,
|
|
"c6gd.16xlarge": 1243764.98,
|
|
"m7g.12xlarge": 1244732.577,
|
|
"r6gd.16xlarge": 1245620.864,
|
|
"g5.16xlarge": 1246915.184,
|
|
"m7gd.12xlarge": 1247077.163,
|
|
"c6gd.metal": 1247239.184,
|
|
"m5ad.24xlarge": 1248699.272,
|
|
"g4ad.16xlarge": 1251099.599,
|
|
"c7g.12xlarge": 1252037.822,
|
|
"im4gn.16xlarge": 1252527.888,
|
|
"r5ad.24xlarge": 1255066.022,
|
|
"c6g.metal": 1258768.767,
|
|
"g5g.metal": 1262202.939,
|
|
"x2gd.metal": 1264822.134,
|
|
"x2gd.16xlarge": 1269505.422,
|
|
"c6g.16xlarge": 1271018.138,
|
|
"i4g.16xlarge": 1271186.441,
|
|
"c6gn.16xlarge": 1273125.124,
|
|
"r6g.16xlarge": 1273547.36,
|
|
"m6g.16xlarge": 1277445.11,
|
|
"m6gd.metal": 1278891.627,
|
|
"m6g.metal": 1280256.051,
|
|
"g5g.16xlarge": 1283422.46,
|
|
"g4dn.metal": 1287380.984,
|
|
"m6gd.16xlarge": 1289109.709,
|
|
"dl2q.24xlarge": 1295313.484,
|
|
"c7i-flex.16xlarge": 1296684.001,
|
|
"c8a.8xlarge": 1300372.503,
|
|
"r6gd.metal": 1302489.655,
|
|
"r5d.metal": 1303816.379,
|
|
"r5.metal": 1310893.387,
|
|
"m5.metal": 1318409.668,
|
|
"i3en.metal": 1319950.502,
|
|
"r5n.metal": 1321767.865,
|
|
"p3dn.24xlarge": 1323529.412,
|
|
"m7i-flex.16xlarge": 1328489.881,
|
|
"c6a.16xlarge": 1332500.521,
|
|
"m7i.16xlarge": 1339566.036,
|
|
"r5d.24xlarge": 1345951.63,
|
|
"g6e.16xlarge": 1347368.421,
|
|
"r5.24xlarge": 1351398.909,
|
|
"r5n.24xlarge": 1355214.399,
|
|
"m5d.metal": 1359869.679,
|
|
"i3en.24xlarge": 1364605.544,
|
|
"c8g.12xlarge": 1371722.512,
|
|
"m5.24xlarge": 1374718.075,
|
|
"m8gn.12xlarge": 1375161.152,
|
|
"r6a.16xlarge": 1375456.695,
|
|
"g6.16xlarge": 1380872.755,
|
|
"m5d.24xlarge": 1386431.744,
|
|
"m8a.8xlarge": 1391102.739,
|
|
"c8gn.12xlarge": 1393020.387,
|
|
"m8gb.12xlarge": 1395856.052,
|
|
"i7i.16xlarge": 1403970.604,
|
|
"i8ge.12xlarge": 1412491.724,
|
|
"c7a.12xlarge": 1416207.71,
|
|
"m6a.16xlarge": 1416948.027,
|
|
"r8g.12xlarge": 1430913.698,
|
|
"r7i.16xlarge": 1431874.114,
|
|
"m8g.12xlarge": 1434548.715,
|
|
"i8g.12xlarge": 1442199.354,
|
|
"c8gb.12xlarge": 1444151.937,
|
|
"c7i.16xlarge": 1461076.022,
|
|
"m8i-flex.16xlarge": 1480967.257,
|
|
"m8idn.16xlarge": 1497251.14,
|
|
"m8in.16xlarge": 1499238.668,
|
|
"x8g.12xlarge": 1502464.982,
|
|
"r8idb.16xlarge": 1518206.618,
|
|
"m7gd.metal": 1523537.464,
|
|
"r8i-flex.16xlarge": 1527021.116,
|
|
"r8a.8xlarge": 1530501.326,
|
|
"r7g.metal": 1531008.911,
|
|
"m8idb.16xlarge": 1531405.783,
|
|
"c7g.metal": 1533852.606,
|
|
"inf1.24xlarge": 1539880.499,
|
|
"m7a.12xlarge": 1543408.36,
|
|
"r8ib.16xlarge": 1544960.772,
|
|
"r8idn.16xlarge": 1545085.1,
|
|
"c5d.24xlarge": 1546080.444,
|
|
"p4de.24xlarge": 1557493.409,
|
|
"m6in.24xlarge": 1559327.54,
|
|
"c8i-flex.16xlarge": 1565493.905,
|
|
"m8ib.16xlarge": 1576095.879,
|
|
"hpc7g.16xlarge": 1576743.04,
|
|
"c7gd.16xlarge": 1579466.93,
|
|
"m7g.16xlarge": 1580051.845,
|
|
"c8i.16xlarge": 1583570.457,
|
|
"r8in.16xlarge": 1583766.394,
|
|
"r7gd.16xlarge": 1587695.361,
|
|
"m6i.24xlarge": 1587761.009,
|
|
"dl1.24xlarge": 1593162.677,
|
|
"p4d.24xlarge": 1593360.996,
|
|
"x8i.16xlarge": 1603206.413,
|
|
"c5.metal": 1609657.948,
|
|
"c7g.16xlarge": 1611786.186,
|
|
"m8i.16xlarge": 1612496.851,
|
|
"g5.24xlarge": 1613987.895,
|
|
"r8i.16xlarge": 1615753.598,
|
|
"c6i.24xlarge": 1618545.838,
|
|
"c5.24xlarge": 1626773.989,
|
|
"r7a.12xlarge": 1627394.474,
|
|
"c7gd.metal": 1630157.922,
|
|
"c6in.24xlarge": 1632306.057,
|
|
"x2iedn.24xlarge": 1637107.776,
|
|
"hpc6id.32xlarge": 1644610.048,
|
|
"m6idn.24xlarge": 1646655.232,
|
|
"r7gd.metal": 1648316.271,
|
|
"r7g.16xlarge": 1652572.461,
|
|
"hpc7a.24xlarge": 1661187.057,
|
|
"m7gd.16xlarge": 1664499.35,
|
|
"x2idn.24xlarge": 1668912.165,
|
|
"i7ie.18xlarge": 1694316.978,
|
|
"m6id.24xlarge": 1695439.092,
|
|
"r6i.24xlarge": 1705908.485,
|
|
"i4i.24xlarge": 1713979.646,
|
|
"m7g.metal": 1729262.362,
|
|
"c5d.metal": 1749430.524,
|
|
"c5a.24xlarge": 1782067.941,
|
|
"g6e.24xlarge": 1793470.646,
|
|
"x8g.16xlarge": 1802436.105,
|
|
"m6a.24xlarge": 1807143.866,
|
|
"r6a.24xlarge": 1818526.236,
|
|
"c8gn.16xlarge": 1838816.262,
|
|
"c6a.24xlarge": 1843494.959,
|
|
"m8gb.16xlarge": 1863580.112,
|
|
"c8gb.16xlarge": 1872713.972,
|
|
"g6.24xlarge": 1884200.196,
|
|
"inf2.24xlarge": 1914734.48,
|
|
"m8gn.16xlarge": 1925825.623,
|
|
"m7a.16xlarge": 1932756.191,
|
|
"i8g.16xlarge": 1936166.994,
|
|
"m8g.16xlarge": 1941747.573,
|
|
"r7i.24xlarge": 1947327.496,
|
|
"c7i.24xlarge": 1984974.843,
|
|
"r7a.16xlarge": 1992631.415,
|
|
"c8g.16xlarge": 1995323.461,
|
|
"c7gd.xlarge": 100483.577,
|
|
"m5a.2xlarge": 101265.823,
|
|
"r5ad.2xlarge": 102362.876,
|
|
"r7g.xlarge": 102570.678,
|
|
"m7gd.xlarge": 102860.816,
|
|
"m7g.xlarge": 103066.22,
|
|
"m5ad.2xlarge": 104302.477,
|
|
"r5a.2xlarge": 104404.568,
|
|
"t3a.2xlarge": 104760.034,
|
|
"x1e.2xlarge": 104899.69,
|
|
"m4.2xlarge": 105364.826,
|
|
"r4.2xlarge": 105899.484,
|
|
"x8aedz.large": 107332.78,
|
|
"r5.2xlarge": 109920.308,
|
|
"a1.medium": 11877.895,
|
|
"m2.4xlarge": 111322.418,
|
|
"m5d.2xlarge": 112813.763,
|
|
"t3.2xlarge": 113426.911,
|
|
"m5.2xlarge": 115790.997,
|
|
"r5d.2xlarge": 116138.398,
|
|
"g4dn.2xlarge": 116228.389,
|
|
"d2.2xlarge": 116510.51,
|
|
"m3.2xlarge": 116759.912,
|
|
"d3.2xlarge": 118606.375,
|
|
"d3en.2xlarge": 118688.492,
|
|
"c3.2xlarge": 118729.593,
|
|
"r3.2xlarge": 119290.223,
|
|
"h1.2xlarge": 119790.367,
|
|
"c8gb.xlarge": 120681.852,
|
|
"m8gb.xlarge": 121479.007,
|
|
"x8g.xlarge": 121747.07,
|
|
"r8g.xlarge": 122100.122,
|
|
"c8gn.xlarge": 122165.381,
|
|
"c5n.2xlarge": 122680.57,
|
|
"r5n.2xlarge": 122906.745,
|
|
"i8ge.xlarge": 123105.332,
|
|
"i8g.xlarge": 123743.233,
|
|
"m8g.xlarge": 124678.563,
|
|
"c8g.xlarge": 125039.075,
|
|
"m8gn.xlarge": 125657.74,
|
|
"i3en.2xlarge": 127206.233,
|
|
"i2.2xlarge": 127720.717,
|
|
"m7a.xlarge": 131219.245,
|
|
"inf1.2xlarge": 131627.658,
|
|
"c5.2xlarge": 132664.483,
|
|
"c7a.xlarge": 133081.956,
|
|
"m6idn.2xlarge": 133701.011,
|
|
"m6id.2xlarge": 133952.865,
|
|
"c5d.2xlarge": 134986.923,
|
|
"c6in.2xlarge": 136025.505,
|
|
"i3.2xlarge": 136083.351,
|
|
"m6in.2xlarge": 136518.771,
|
|
"r6i.2xlarge": 136693.721,
|
|
"c6i.2xlarge": 136839.855,
|
|
"r7a.xlarge": 136892.539,
|
|
"x2iedn.2xlarge": 137628.489,
|
|
"c4.2xlarge": 137824.102,
|
|
"m6i.2xlarge": 138822.611,
|
|
"i4i.2xlarge": 138864.78,
|
|
"trn1.2xlarge": 143697.517,
|
|
"g5.2xlarge": 144423.884,
|
|
"c5a.2xlarge": 145348.837,
|
|
"z1d.2xlarge": 147126.437,
|
|
"t4g.2xlarge": 149068.323,
|
|
"g4ad.2xlarge": 149300.156,
|
|
"r6gd.2xlarge": 151343.171,
|
|
"m6gd.2xlarge": 151966.061,
|
|
"r6g.2xlarge": 152400.305,
|
|
"c6g.2xlarge": 152497.141,
|
|
"m6g.2xlarge": 154689.011,
|
|
"i4g.2xlarge": 155018.731,
|
|
"m7i-flex.2xlarge": 157720.933,
|
|
"g5g.2xlarge": 157801.302,
|
|
"c6gd.2xlarge": 158029.894,
|
|
"is4gen.2xlarge": 158113.183,
|
|
"i7i.2xlarge": 158290.463,
|
|
"x2gd.2xlarge": 158436.757,
|
|
"c7i.2xlarge": 159211.901,
|
|
"m1.small": 16880.486,
|
|
"m1.medium": 16889.039,
|
|
"c6gn.2xlarge": 160192.231,
|
|
"r6a.2xlarge": 161567.202,
|
|
"im4gn.2xlarge": 161605.279,
|
|
"m7i.2xlarge": 163373.666,
|
|
"m5zn.2xlarge": 163926.028,
|
|
"g6e.2xlarge": 163968.026,
|
|
"x2iezn.2xlarge": 164220.466,
|
|
"t2.2xlarge": 165917.732,
|
|
"g6.2xlarge": 167346.512,
|
|
"m6a.2xlarge": 169106.378,
|
|
"vt1.3xlarge": 171551.108,
|
|
"g6f.2xlarge": 174083.342,
|
|
"m8a.xlarge": 174418.605,
|
|
"c7i-flex.2xlarge": 181289.421,
|
|
"c6a.2xlarge": 181776.869,
|
|
"i3en.3xlarge": 184482.935,
|
|
"r8in.2xlarge": 185722.577,
|
|
"r8idb.2xlarge": 185945.611,
|
|
"m8idb.2xlarge": 186763.161,
|
|
"r7i.2xlarge": 187214.79,
|
|
"c8i-flex.2xlarge": 188065.666,
|
|
"c8a.xlarge": 188146.754,
|
|
"r8i.2xlarge": 189080.596,
|
|
"m8idn.2xlarge": 189506.1,
|
|
"r8i-flex.2xlarge": 189536.032,
|
|
"c8i.2xlarge": 189588.435,
|
|
"c6gd.medium": 19098.549,
|
|
"c6gn.medium": 19136.314,
|
|
"m6g.medium": 19256.692,
|
|
"x2gd.medium": 19681.165,
|
|
"c6g.medium": 19743.337,
|
|
"is4gen.medium": 19781.089,
|
|
"r6gd.medium": 19801.98,
|
|
"m6gd.medium": 19811.134,
|
|
"r6g.medium": 19841.27,
|
|
"c1.medium": 19882.512,
|
|
"a1.4xlarge": 190136.661,
|
|
"r8idn.2xlarge": 190642.625,
|
|
"r8a.xlarge": 190682.557,
|
|
"m8i-flex.2xlarge": 191563.236,
|
|
"x8i.2xlarge": 191632.066,
|
|
"m8ib.2xlarge": 192407.905,
|
|
"a1.metal": 192539.11,
|
|
"m8ine.2xlarge": 193038.547,
|
|
"r8ib.2xlarge": 195854.415,
|
|
"m8i.2xlarge": 196858.467,
|
|
"r7g.2xlarge": 196963.48,
|
|
"m8in.2xlarge": 198060.656,
|
|
"c8ine.2xlarge": 198626.169,
|
|
"c7g.2xlarge": 199104.032,
|
|
"m7g.2xlarge": 199153.597,
|
|
"i7ie.2xlarge": 199277.619,
|
|
"i7ie.24xlarge": 2007178.451,
|
|
"c7i.metal-24xl": 2007248.397,
|
|
"c7a.16xlarge": 2015219.103,
|
|
"m7i.24xlarge": 2034760.492,
|
|
"r8g.16xlarge": 2040490.993,
|
|
"g7e.24xlarge": 2040960.952,
|
|
"c8a.12xlarge": 2043132.804,
|
|
"m7i.metal-24xl": 2055234.425,
|
|
"i7i.24xlarge": 2061412.927,
|
|
"i7i.metal-24xl": 2091959.032,
|
|
"r7i.metal-24xl": 2100043.751,
|
|
"x2iedn.32xlarge": 2111949.841,
|
|
"i7ie.metal-24xl": 2124520.508,
|
|
"x2idn.32xlarge": 2132000.833,
|
|
"m6idn.32xlarge": 2140826.225,
|
|
"c6in.32xlarge": 2142887.038,
|
|
"trn1n.32xlarge": 2151170.119,
|
|
"i8ge.18xlarge": 2161026.488,
|
|
"trn1.32xlarge": 2177889.319,
|
|
"m8i.24xlarge": 2193157.805,
|
|
"r8idn.24xlarge": 2194034.967,
|
|
"x1.32xlarge": 2194787.38,
|
|
"r8in.24xlarge": 2200320.88,
|
|
"i4i.32xlarge": 2201393.069,
|
|
"x8i.24xlarge": 2202466.303,
|
|
"m6id.32xlarge": 2204900.736,
|
|
"m6in.32xlarge": 2206611.214,
|
|
"x1e.32xlarge": 2226377.354,
|
|
"m8idb.24xlarge": 2234636.872,
|
|
"r8a.12xlarge": 2242323.863,
|
|
"r8i.24xlarge": 2246270.839,
|
|
"m8a.12xlarge": 2249392.92,
|
|
"m8in.24xlarge": 2253653.383,
|
|
"x2iedn.metal": 2256600.115,
|
|
"c6i.32xlarge": 2262083.591,
|
|
"c8i.24xlarge": 2265486.726,
|
|
"r6i.metal": 2266389.27,
|
|
"c6i.metal": 2266589.933,
|
|
"r8ib.24xlarge": 2268967.147,
|
|
"m6i.32xlarge": 2269000.665,
|
|
"r6i.32xlarge": 2279100.824,
|
|
"x2idn.metal": 2279405.218,
|
|
"m8ib.24xlarge": 2293084.916,
|
|
"c6in.metal": 2300606.605,
|
|
"r6a.32xlarge": 2310469.314,
|
|
"m8idn.24xlarge": 2315066.016,
|
|
"m6i.metal": 2345073.971,
|
|
"r8idb.24xlarge": 2345849.963,
|
|
"i4i.metal": 2356189.6,
|
|
"m6id.metal": 2367739.549,
|
|
"m6idn.metal": 2398575.846,
|
|
"x8aedz.12xlarge": 2454101.789,
|
|
"m6in.metal": 2559744.026,
|
|
"x8aedz.metal-12xl": 2559875.885,
|
|
"c8a.16xlarge": 2600921.16,
|
|
"m6a.32xlarge": 2624429.75,
|
|
"hpc6a.48xlarge": 2704225.352,
|
|
"m7a.24xlarge": 2714420.358,
|
|
"c6a.32xlarge": 2731929.425,
|
|
"c8gb.24xlarge": 2751701.899,
|
|
"i8ge.24xlarge": 2777175.092,
|
|
"r7a.24xlarge": 2791373.879,
|
|
"m8a.16xlarge": 2819496.175,
|
|
"r8a.16xlarge": 2858767.157,
|
|
"c8gb.metal-24xl": 2861827.396,
|
|
"c7a.24xlarge": 2865386.529,
|
|
"x8g.metal-24xl": 2889825.406,
|
|
"m8gb.24xlarge": 2891348.543,
|
|
"c8gn.24xlarge": 2892219.628,
|
|
"m8g.metal-24xl": 2892873.286,
|
|
"x8g.24xlarge": 2895272.563,
|
|
"r8g.24xlarge": 2903811.252,
|
|
"u-3tb1.56xlarge": 2906920.157,
|
|
"c8g.24xlarge": 2925714.286,
|
|
"m8gn.24xlarge": 2929285.224,
|
|
"m8ib.32xlarge": 2967599.838,
|
|
"i8g.24xlarge": 2969378.286,
|
|
"r8g.metal-24xl": 2969837.587,
|
|
"m8g.24xlarge": 2983682.984,
|
|
"m8i.32xlarge": 2992751.929,
|
|
"t2.nano": 20638.415,
|
|
"m5ad.4xlarge": 202429.15,
|
|
"m7gd.2xlarge": 202698.423,
|
|
"r7gd.2xlarge": 203977.562,
|
|
"c7gd.2xlarge": 206718.346,
|
|
"m5a.4xlarge": 206825.233,
|
|
"i3.4xlarge": 208831.847,
|
|
"r5ad.4xlarge": 209218.699,
|
|
"r5a.4xlarge": 209918.657,
|
|
"x8aedz.xlarge": 213260.954,
|
|
"m5d.4xlarge": 216645.604,
|
|
"g7e.2xlarge": 219398.482,
|
|
"t2.small": 22166.396,
|
|
"t2.micro": 22258.495,
|
|
"m3.medium": 22900.763,
|
|
"z1d.3xlarge": 222088.558,
|
|
"r5n.4xlarge": 223630.265,
|
|
"r5.4xlarge": 225035.162,
|
|
"d3.4xlarge": 227563.647,
|
|
"t1.micro": 23453.991,
|
|
"a1.large": 23457.659,
|
|
"g4dn.4xlarge": 230991.338,
|
|
"r5d.4xlarge": 232862.757,
|
|
"d2.4xlarge": 232998.398,
|
|
"m5.4xlarge": 235271.052,
|
|
"c8gn.2xlarge": 236756.437,
|
|
"c8g.2xlarge": 236896.654,
|
|
"r3.4xlarge": 237154.15,
|
|
"c3.4xlarge": 237988.993,
|
|
"r4.4xlarge": 238912.946,
|
|
"m7gd.medium": 24319.066,
|
|
"m1.large": 24570.025,
|
|
"c7g.medium": 24828.271,
|
|
"c7gd.medium": 24917.461,
|
|
"i8ge.2xlarge": 240493.011,
|
|
"m8g.2xlarge": 240493.011,
|
|
"r8g.2xlarge": 240583.415,
|
|
"m8gn.2xlarge": 243494.141,
|
|
"m8gb.2xlarge": 246153.846,
|
|
"i2.4xlarge": 246583.787,
|
|
"x8g.2xlarge": 247104.247,
|
|
"i8g.2xlarge": 247524.752,
|
|
"t3a.micro": 25160.398,
|
|
"m7g.medium": 25521.055,
|
|
"t3a.medium": 25849.813,
|
|
"t3a.nano": 25859.84,
|
|
"r7gd.medium": 25953.802,
|
|
"t3a.large": 25985.838,
|
|
"m5ad.large": 25994.281,
|
|
"c5d.4xlarge": 250459.829,
|
|
"d3en.4xlarge": 250849.229,
|
|
"m4.4xlarge": 251243.13,
|
|
"m5zn.3xlarge": 252711.383,
|
|
"c5n.4xlarge": 253425.2,
|
|
"c8gb.2xlarge": 255244.476,
|
|
"r7a.2xlarge": 255699.979,
|
|
"c7a.2xlarge": 257510.73,
|
|
"r4.large": 26099.439,
|
|
"r5a.large": 26305.406,
|
|
"r7g.medium": 26471.367,
|
|
"m5a.large": 26516.407,
|
|
"t3a.small": 26578.073,
|
|
"r5ad.large": 26638.253,
|
|
"m4.large": 26848.04,
|
|
"c5.4xlarge": 262069.53,
|
|
"m7a.2xlarge": 262826.48,
|
|
"m6i.4xlarge": 266023.776,
|
|
"m6in.4xlarge": 266866.817,
|
|
"r6i.4xlarge": 267524.976,
|
|
"c4.4xlarge": 268006.7,
|
|
"m6id.4xlarge": 268118.978,
|
|
"i4i.4xlarge": 269269.606,
|
|
"c6in.4xlarge": 269837.254,
|
|
"i3en.large": 27121.096,
|
|
"t3.large": 27292.576,
|
|
"i7ie.3xlarge": 270620.736,
|
|
"x2iedn.4xlarge": 270704.678,
|
|
"h1.4xlarge": 271197.932,
|
|
"c6i.4xlarge": 276864.509,
|
|
"x1e.4xlarge": 276948.375,
|
|
"m6idn.4xlarge": 278842.802,
|
|
"t3.small": 28124.121,
|
|
"r5d.large": 28203.441,
|
|
"m2.xlarge": 28403.711,
|
|
"m5.large": 28469.751,
|
|
"t3.nano": 28750.779,
|
|
"m5d.large": 28933.79,
|
|
"t3.micro": 29069.767,
|
|
"r5.large": 29155.936,
|
|
"t3.medium": 29163.021,
|
|
"c8gn.medium": 29202.765,
|
|
"m3.large": 29279.719,
|
|
"m8g.medium": 29431.241,
|
|
"c3.large": 29520.295,
|
|
"r3.large": 29617.929,
|
|
"c8gb.medium": 29620.853,
|
|
"c5a.4xlarge": 290552.504,
|
|
"c8i.32xlarge": 3001876.173,
|
|
"c8g.metal-24xl": 3003284.843,
|
|
"r8i.32xlarge": 3004342.213,
|
|
"r8idb.32xlarge": 3010171.086,
|
|
"x8i.32xlarge": 3045262.594,
|
|
"i8g.metal-24xl": 3072245.78,
|
|
"r8ib.32xlarge": 3093094.907,
|
|
"m8idn.32xlarge": 3097773.475,
|
|
"r8idn.32xlarge": 3144963.145,
|
|
"r8in.32xlarge": 3151415.675,
|
|
"m8idb.32xlarge": 3157894.737,
|
|
"m8in.32xlarge": 3165704.864,
|
|
"hpc7a.48xlarge": 3240324.032,
|
|
"i8ge.metal-24xl": 3284577.88,
|
|
"c6a.metal": 3398330.334,
|
|
"m7i.metal-48xl": 3469461.511,
|
|
"c6a.48xlarge": 3584764.75,
|
|
"m6a.48xlarge": 3589455.973,
|
|
"g5.48xlarge": 3614457.831,
|
|
"g6e.48xlarge": 3635502.959,
|
|
"c8gb.metal-48xl": 3725261.932,
|
|
"r6a.48xlarge": 3727431.567,
|
|
"r6a.metal": 3807509.254,
|
|
"m7i.48xlarge": 3809523.81,
|
|
"m6a.metal": 3831060.858,
|
|
"g6.48xlarge": 3842689.883,
|
|
"r8a.24xlarge": 3843494.086,
|
|
"p5e.48xlarge": 3884477.265,
|
|
"i7i.48xlarge": 3889526.639,
|
|
"p5.48xlarge": 3900325.027,
|
|
"r7i.48xlarge": 3921435.136,
|
|
"c7i.48xlarge": 3925310.072,
|
|
"c8a.metal-24xl": 3948696.855,
|
|
"m8a.24xlarge": 3988819.219,
|
|
"p6-b200.48xlarge": 3990024.938,
|
|
"c8a.24xlarge": 3994099.626,
|
|
"r7i.metal-48xl": 3999722.242,
|
|
"c8g.medium": 30161.363,
|
|
"r5n.large": 30237.363,
|
|
"m8gb.medium": 30250.321,
|
|
"i3.large": 30350.549,
|
|
"m8gn.medium": 30369.752,
|
|
"r8g.medium": 30926.241,
|
|
"g4ad.4xlarge": 301744.46,
|
|
"c6gn.4xlarge": 306435.138,
|
|
"m6g.4xlarge": 309817.337,
|
|
"r6gd.4xlarge": 309937.367,
|
|
"x8g.medium": 31036.623,
|
|
"c5n.large": 31365.989,
|
|
"c4.large": 31678.986,
|
|
"i4g.4xlarge": 311284.047,
|
|
"c6gd.4xlarge": 311425.42,
|
|
"vt1.6xlarge": 311850.312,
|
|
"r6g.4xlarge": 312134.218,
|
|
"g5.4xlarge": 312479.656,
|
|
"is4gen.4xlarge": 312723.956,
|
|
"g5g.4xlarge": 314877.985,
|
|
"x2gd.4xlarge": 317523.318,
|
|
"im4gn.4xlarge": 318196.884,
|
|
"x2iezn.4xlarge": 319696.289,
|
|
"m6in.large": 32420.165,
|
|
"m7a.medium": 32470.168,
|
|
"c7a.medium": 32965.222,
|
|
"c6g.4xlarge": 321737.382,
|
|
"m6gd.4xlarge": 323777.403,
|
|
"gr6.4xlarge": 326914.236,
|
|
"c5.large": 33103.448,
|
|
"m6idn.large": 33200.531,
|
|
"c5d.large": 33285.255,
|
|
"c6in.large": 33765.247,
|
|
"gr6f.4xlarge": 331434.49,
|
|
"c6a.4xlarge": 332450.262,
|
|
"g6.4xlarge": 332519.354,
|
|
"m6a.4xlarge": 333385.425,
|
|
"i4i.large": 34048.349,
|
|
"m7i-flex.4xlarge": 341042.311,
|
|
"g6e.4xlarge": 343366.06,
|
|
"r6a.4xlarge": 348337.234,
|
|
"g6f.4xlarge": 348754.836,
|
|
"m6id.large": 35040.077,
|
|
"m6i.large": 35055.431,
|
|
"c6i.large": 35321.128,
|
|
"r7a.medium": 35377.358,
|
|
"d3en.6xlarge": 351528.171,
|
|
"c8a.2xlarge": 354872.098,
|
|
"i3en.6xlarge": 355625.803,
|
|
"r6i.large": 36253.776,
|
|
"z1d.large": 36310.821,
|
|
"i7i.4xlarge": 365234.264,
|
|
"c8i-flex.4xlarge": 366244.468,
|
|
"m8a.2xlarge": 367787.909,
|
|
"m8i-flex.4xlarge": 367830.185,
|
|
"c5a.large": 37030.18,
|
|
"m6g.large": 37343.624,
|
|
"i4g.large": 37845.339,
|
|
"t4g.small": 37874.006,
|
|
"m8in.4xlarge": 371632.084,
|
|
"m7i.4xlarge": 372381.691,
|
|
"m8ib.4xlarge": 372656.341,
|
|
"r7i.4xlarge": 374035.689,
|
|
"r8i-flex.4xlarge": 374035.689,
|
|
"c7i-flex.4xlarge": 374590.292,
|
|
"i8ge.3xlarge": 374707.26,
|
|
"r8in.4xlarge": 376455.825,
|
|
"m8idb.4xlarge": 377774.28,
|
|
"m8idn.4xlarge": 378012.285,
|
|
"r8i.4xlarge": 378638.479,
|
|
"t4g.nano": 38488.678,
|
|
"im4gn.large": 38689.709,
|
|
"t4g.micro": 38902.937,
|
|
"inf1.6xlarge": 382637.809,
|
|
"c7i.4xlarge": 382775.12,
|
|
"g7e.4xlarge": 383524.43,
|
|
"x8i.4xlarge": 384630.795,
|
|
"m8ine.4xlarge": 385472.505,
|
|
"r8ib.4xlarge": 386520.111,
|
|
"m5ad.8xlarge": 386551.238,
|
|
"c8i.4xlarge": 386706.949,
|
|
"m5zn.large": 39037.72,
|
|
"r6gd.large": 39110.879,
|
|
"t4g.medium": 39179.835,
|
|
"r6g.large": 39267.016,
|
|
"c7i.large": 39481.477,
|
|
"is4gen.large": 39510.075,
|
|
"t4g.large": 39596.12,
|
|
"c6gd.large": 39968.026,
|
|
"r8a.2xlarge": 390019.058,
|
|
"r8idb.4xlarge": 391309.665,
|
|
"c8ine.4xlarge": 391453.27,
|
|
"m8i.4xlarge": 393587.799,
|
|
"r5ad.8xlarge": 399052.251,
|
|
"m8a.metal-24xl": 4001667.361,
|
|
"r8g.metal-48xl": 4025157.233,
|
|
"i7ie.48xlarge": 4036157.242,
|
|
"r8a.metal-24xl": 4039940.319,
|
|
"c7a.32xlarge": 4052342.761,
|
|
"g7e.48xlarge": 4097019.703,
|
|
"m7a.32xlarge": 4116638.079,
|
|
"i7i.metal-48xl": 4142394.822,
|
|
"r8i.48xlarge": 4143735.837,
|
|
"c7i.metal-48xl": 4179667.658,
|
|
"i7ie.metal-48xl": 4216536.73,
|
|
"r7a.32xlarge": 4237708.989,
|
|
"r8in.48xlarge": 4257914.287,
|
|
"m8idn.48xlarge": 4311942.058,
|
|
"r8idn.48xlarge": 4316789.388,
|
|
"m8i.48xlarge": 4350042.481,
|
|
"m8in.48xlarge": 4406449.022,
|
|
"c8i.48xlarge": 4448821.178,
|
|
"m8g.metal-48xl": 4450625.869,
|
|
"r8ib.48xlarge": 4478395.242,
|
|
"r8idb.48xlarge": 4517381.331,
|
|
"c8i.metal-48xl": 4532845.423,
|
|
"u-6tb1.56xlarge": 4544071.407,
|
|
"m8idb.48xlarge": 4544916.558,
|
|
"r8i.metal-48xl": 4551650.566,
|
|
"m8ib.48xlarge": 4633204.633,
|
|
"m8i.metal-48xl": 4685212.299,
|
|
"r8gb.metal-48xl": 4734311.429,
|
|
"x8aedz.24xlarge": 4801527.759,
|
|
"x8aedz.metal-24xl": 4924454.393,
|
|
"c6gn.large": 40238.75,
|
|
"m6gd.large": 40249.547,
|
|
"c6g.large": 40300.913,
|
|
"c7i-flex.large": 40363.269,
|
|
"x2gd.large": 40461.258,
|
|
"g6f.large": 40677.277,
|
|
"m6a.large": 40862.192,
|
|
"r8idn.4xlarge": 400367.003,
|
|
"r7gd.4xlarge": 401782.912,
|
|
"c7gd.4xlarge": 402161.619,
|
|
"m7gd.4xlarge": 405165.865,
|
|
"hpc7g.4xlarge": 405911.08,
|
|
"r5a.8xlarge": 407695.248,
|
|
"t2.medium": 41050.903,
|
|
"m8a.medium": 41172.03,
|
|
"i7ie.large": 41528.239,
|
|
"r7g.4xlarge": 411073.287,
|
|
"m7g.4xlarge": 411602.032,
|
|
"c7g.4xlarge": 413329.889,
|
|
"m5a.8xlarge": 419369.635,
|
|
"c8a.medium": 42137.791,
|
|
"r6a.large": 42316.847,
|
|
"m8idn.large": 42614.393,
|
|
"c8i.large": 42900.043,
|
|
"i3.8xlarge": 425305.688,
|
|
"c6a.large": 43208.987,
|
|
"m7i-flex.large": 43763.676,
|
|
"z1d.6xlarge": 435492.651,
|
|
"m8i.large": 44021.35,
|
|
"r8i.large": 44023.773,
|
|
"t2.large": 44120.891,
|
|
"m8i-flex.large": 44411.547,
|
|
"r8a.medium": 44859.813,
|
|
"m5.8xlarge": 442865.71,
|
|
"r5n.8xlarge": 448514.296,
|
|
"r5.8xlarge": 449290.963,
|
|
"r8idb.large": 45325.779,
|
|
"m8idb.large": 45736.936,
|
|
"m8ib.large": 45879.452,
|
|
"i8g.4xlarge": 458157.348,
|
|
"g4dn.8xlarge": 458343.28,
|
|
"r8i-flex.large": 46481.001,
|
|
"r8idn.large": 46542.295,
|
|
"m7i.large": 46780.89,
|
|
"r8in.large": 46818.306,
|
|
"m5d.8xlarge": 462940.638,
|
|
"r5d.8xlarge": 467085.097,
|
|
"r4.8xlarge": 467745.079,
|
|
"d3.8xlarge": 468087.181,
|
|
"m8ine.large": 47221.785,
|
|
"m8in.large": 47225.502,
|
|
"r8ib.large": 47553.002,
|
|
"a1.xlarge": 47619.048,
|
|
"c8ine.large": 47630.388,
|
|
"c8gn.4xlarge": 470726.684,
|
|
"r8g.4xlarge": 476013.388,
|
|
"c8gb.4xlarge": 477255.779,
|
|
"m8gn.4xlarge": 478111.46,
|
|
"x8g.4xlarge": 479113.64,
|
|
"x8i.large": 48003.84,
|
|
"r7i.large": 48385.146,
|
|
"c8i-flex.large": 48504.446,
|
|
"i7i.large": 48531.91,
|
|
"m1.xlarge": 48649.964,
|
|
"r3.8xlarge": 480408.347,
|
|
"d3en.8xlarge": 481685.901,
|
|
"c3.8xlarge": 483944.145,
|
|
"f2.6xlarge": 485829.96,
|
|
"m8gb.4xlarge": 486285.237,
|
|
"c8g.4xlarge": 486803.073,
|
|
"r7g.large": 49239.86,
|
|
"m7gd.large": 49443.758,
|
|
"r8gb.48xlarge": 5215619.694,
|
|
"c8gn.48xlarge": 5220228.385,
|
|
"m8gb.48xlarge": 5283070.785,
|
|
"i8g.48xlarge": 5308633.442,
|
|
"c8g.48xlarge": 5350424.969,
|
|
"m8gn.48xlarge": 5357516.568,
|
|
"r8g.48xlarge": 5455707.892,
|
|
"r7a.48xlarge": 5477107.403,
|
|
"c8g.metal-48xl": 5484930.724,
|
|
"i8ge.48xlarge": 5487282.081,
|
|
"m8g.48xlarge": 5500250.662,
|
|
"c8gb.48xlarge": 5503403.798,
|
|
"i8ge.metal-48xl": 5578152.237,
|
|
"u-6tb1.112xlarge": 5678613.303,
|
|
"c7a.48xlarge": 5863490.609,
|
|
"m7a.48xlarge": 5871260.384,
|
|
"c7gd.large": 50706.725,
|
|
"m5zn.6xlarge": 500913.123,
|
|
"i2.8xlarge": 507533.703,
|
|
"m7g.large": 51659.563,
|
|
"r5ad.xlarge": 51880.674,
|
|
"c7g.large": 51890.77,
|
|
"t3a.xlarge": 51981.806,
|
|
"m8g.4xlarge": 511100.463,
|
|
"m7a.4xlarge": 511617.992,
|
|
"r7a.4xlarge": 513506.285,
|
|
"c7a.4xlarge": 514497.026,
|
|
"r7gd.large": 52160.306,
|
|
"m5ad.xlarge": 52335.47,
|
|
"i3.xlarge": 52721.761,
|
|
"m5a.xlarge": 52823.876,
|
|
"r5a.xlarge": 53565.45,
|
|
"t3.xlarge": 53932.584,
|
|
"x2iezn.6xlarge": 533214.841,
|
|
"r4.xlarge": 54704.595,
|
|
"i3en.xlarge": 54859.651,
|
|
"c6i.8xlarge": 540723.217,
|
|
"d2.8xlarge": 543204.909,
|
|
"c6in.8xlarge": 544588.155,
|
|
"r6i.8xlarge": 547219.016,
|
|
"g4dn.xlarge": 55463.117,
|
|
"d3.xlarge": 55891.942,
|
|
"m6i.8xlarge": 550371.931,
|
|
"i4i.8xlarge": 552605.448,
|
|
"c5d.9xlarge": 554464.595,
|
|
"x2iedn.8xlarge": 555603.785,
|
|
"m6id.8xlarge": 559171.727,
|
|
"h1.8xlarge": 559538.381,
|
|
"m6idn.8xlarge": 560199.571,
|
|
"x1e.8xlarge": 565745.856,
|
|
"m6in.8xlarge": 568282.721,
|
|
"c5.9xlarge": 572906.306,
|
|
"m4.10xlarge": 574547.544,
|
|
"c8g.large": 58152.213,
|
|
"d2.xlarge": 58190.282,
|
|
"r5.xlarge": 58306.205,
|
|
"m4.xlarge": 58499.488,
|
|
"m3.xlarge": 58576.589,
|
|
"c3.xlarge": 58593.75,
|
|
"r5d.xlarge": 58662.495,
|
|
"d3en.xlarge": 58751.53,
|
|
"m2.2xlarge": 58757.283,
|
|
"c5a.8xlarge": 587155.963,
|
|
"c5n.9xlarge": 587395.472,
|
|
"m5d.xlarge": 59020.264,
|
|
"m5.xlarge": 59119.125,
|
|
"i8ge.large": 59263.649,
|
|
"m8gn.large": 59435.364,
|
|
"r5n.xlarge": 59946.049,
|
|
"c4.8xlarge": 597510.373,
|
|
"c7a.metal-48xl": 6115948.184,
|
|
"r7a.metal-48xl": 6200215.285,
|
|
"m7a.metal-48xl": 6428571.429,
|
|
"hpc7a.96xlarge": 6797663.303,
|
|
"r8a.metal-48xl": 6825673.841,
|
|
"c8a.48xlarge": 6834509.093,
|
|
"m8a.48xlarge": 6962254.821,
|
|
"c8gb.large": 60163.947,
|
|
"c8gn.large": 60656.608,
|
|
"r3.xlarge": 60682.68,
|
|
"m6gd.8xlarge": 608789.397,
|
|
"g4ad.8xlarge": 609911.055,
|
|
"x1e.xlarge": 61299.55,
|
|
"i8g.large": 61900.34,
|
|
"im4gn.8xlarge": 615384.615,
|
|
"r5ad.12xlarge": 617178.124,
|
|
"c6gn.8xlarge": 619874.734,
|
|
"m8gb.large": 62348.999,
|
|
"m8g.large": 62514.652,
|
|
"m5ad.12xlarge": 620101.628,
|
|
"g5.8xlarge": 621902.633,
|
|
"g5g.8xlarge": 622245.268,
|
|
"c6a.8xlarge": 624969.484,
|
|
"c6gd.8xlarge": 625814.863,
|
|
"x8aedz.3xlarge": 626067.16,
|
|
"m6g.8xlarge": 627861.347,
|
|
"r8g.large": 63582.896,
|
|
"c5d.xlarge": 63798.397,
|
|
"r6gd.8xlarge": 630376.256,
|
|
"m5a.12xlarge": 630749.014,
|
|
"is4gen.8xlarge": 633454.306,
|
|
"r5a.12xlarge": 635004.63,
|
|
"i2.xlarge": 64906.089,
|
|
"r6g.8xlarge": 642054.575,
|
|
"i4g.8xlarge": 642699.337,
|
|
"gr6.8xlarge": 644316.923,
|
|
"i7ie.6xlarge": 646725.95,
|
|
"x2gd.8xlarge": 646725.95,
|
|
"x2iezn.8xlarge": 646725.95,
|
|
"c6g.8xlarge": 647161.925,
|
|
"r6a.8xlarge": 648068.452,
|
|
"m6a.8xlarge": 648725.356,
|
|
"inf1.xlarge": 65773.247,
|
|
"r7a.large": 65782.261,
|
|
"m6id.xlarge": 65797.59,
|
|
"c5n.xlarge": 65832.785,
|
|
"r6i.xlarge": 66126.633,
|
|
"m6i.xlarge": 66741.751,
|
|
"i4i.xlarge": 66786.326,
|
|
"x2iedn.xlarge": 67218.418,
|
|
"c7a.large": 67336.289,
|
|
"c4.xlarge": 67358.967,
|
|
"m7a.large": 67950.17,
|
|
"c5a.xlarge": 68555.759,
|
|
"c6in.xlarge": 68678.371,
|
|
"m6idn.xlarge": 68693.114,
|
|
"m6in.xlarge": 68769.879,
|
|
"m5.12xlarge": 680239.974,
|
|
"r5d.12xlarge": 685714.286,
|
|
"m5d.12xlarge": 686237.133,
|
|
"c7i-flex.8xlarge": 686965.544,
|
|
"g6.8xlarge": 689915.378,
|
|
"g5.xlarge": 69633.842,
|
|
"d3en.12xlarge": 691476.591,
|
|
"inf2.8xlarge": 692340.978,
|
|
"g6e.8xlarge": 692715.662,
|
|
"m7i.8xlarge": 699530.003,
|
|
"r8a.48xlarge": 7250506.368,
|
|
"m8a.metal-48xl": 7478488.722,
|
|
"c8a.metal-48xl": 7931202.824,
|
|
"c6i.xlarge": 70311.127,
|
|
"g6f.xlarge": 70975.469,
|
|
"i3en.12xlarge": 700661.736,
|
|
"r5.12xlarge": 703743.525,
|
|
"g4dn.12xlarge": 715776.916,
|
|
"r5n.12xlarge": 719172.951,
|
|
"z1d.xlarge": 72549.197,
|
|
"c5.xlarge": 72684.323,
|
|
"i8ge.6xlarge": 726117.54,
|
|
"c8a.4xlarge": 731565.384,
|
|
"r8a.4xlarge": 732992.288,
|
|
"r8ib.8xlarge": 734675.136,
|
|
"m7i-flex.8xlarge": 735378.605,
|
|
"g4ad.xlarge": 74710.497,
|
|
"t2.xlarge": 74985.94,
|
|
"m8in.8xlarge": 742660.426,
|
|
"r8i-flex.8xlarge": 745573.159,
|
|
"m8i-flex.8xlarge": 752085.863,
|
|
"r8i.8xlarge": 759073.298,
|
|
"m6gd.xlarge": 76098.675,
|
|
"x8i.8xlarge": 761451.517,
|
|
"c8i.8xlarge": 761814.07,
|
|
"r7i.8xlarge": 763358.779,
|
|
"r8idb.8xlarge": 764605.153,
|
|
"m8i.8xlarge": 765153.629,
|
|
"c7i.8xlarge": 766834.412,
|
|
"m8idn.8xlarge": 767294.089,
|
|
"r8idn.8xlarge": 768922.707,
|
|
"m6g.xlarge": 77002.053,
|
|
"im4gn.xlarge": 77120.823,
|
|
"t4g.xlarge": 77489.345,
|
|
"g5g.xlarge": 77504.36,
|
|
"m8a.4xlarge": 771022.408,
|
|
"c8i-flex.8xlarge": 771921.361,
|
|
"hpc7a.12xlarge": 777957.861,
|
|
"m8ib.8xlarge": 778967.868,
|
|
"m8idb.8xlarge": 779505.501,
|
|
"x2gd.xlarge": 78390.384,
|
|
"c6gd.xlarge": 78426.247,
|
|
"i4g.xlarge": 78498.07,
|
|
"m7i-flex.xlarge": 78697.555,
|
|
"c5d.12xlarge": 786691.797,
|
|
"c5.12xlarge": 789311.408,
|
|
"c6gn.xlarge": 79166.117,
|
|
"r6a.xlarge": 79168.728,
|
|
"is4gen.xlarge": 79207.921,
|
|
"g6e.xlarge": 79400.526,
|
|
"r6g.xlarge": 79507.056,
|
|
"c6g.xlarge": 79512.324,
|
|
"inf2.xlarge": 79657.473,
|
|
"c6in.12xlarge": 795228.628,
|
|
"r8in.8xlarge": 795722.989,
|
|
"c8ine.8xlarge": 796812.749,
|
|
"m8ine.8xlarge": 798801.797,
|
|
"m8idb.96xlarge": 8017119.891,
|
|
"u7i-6tb.112xlarge": 8291178.285,
|
|
"r8idn.96xlarge": 8432610.486,
|
|
"u7i-8tb.112xlarge": 8540382.538,
|
|
"m8in.96xlarge": 8686308.884,
|
|
"m8i.96xlarge": 8717366.629,
|
|
"c8i.96xlarge": 8808854.734,
|
|
"r8ib.96xlarge": 8830631.252,
|
|
"m8ib.96xlarge": 8852515.705,
|
|
"r8in.96xlarge": 8889574.813,
|
|
"m8idn.96xlarge": 8919860.627,
|
|
"r8i.96xlarge": 8925043.579,
|
|
"r6gd.xlarge": 80488.296,
|
|
"m6a.xlarge": 80527.455,
|
|
"i7ie.xlarge": 80955.272,
|
|
"i7i.8xlarge": 804255.854,
|
|
"c7g.8xlarge": 807876.799,
|
|
"m6i.12xlarge": 808352.981,
|
|
"c7i-flex.xlarge": 81045.487,
|
|
"m5a.16xlarge": 810673.873,
|
|
"m7g.8xlarge": 815390.496,
|
|
"m7gd.8xlarge": 817160.368,
|
|
"r7gd.8xlarge": 817891.374,
|
|
"i4i.12xlarge": 817926.216,
|
|
"m5ad.16xlarge": 818518.992,
|
|
"m6in.12xlarge": 818658.594,
|
|
"hpc7g.8xlarge": 819304.871,
|
|
"m6idn.12xlarge": 819812.126,
|
|
"c7gd.8xlarge": 819882.142,
|
|
"m5zn.xlarge": 82402.019,
|
|
"m6id.12xlarge": 820442.697,
|
|
"r5ad.16xlarge": 824529.76,
|
|
"r5a.16xlarge": 825593.395,
|
|
"g6.xlarge": 83813.515,
|
|
"r7g.8xlarge": 833767.587,
|
|
"r6i.12xlarge": 845256.438,
|
|
"c6i.12xlarge": 847121.112,
|
|
"g7e.8xlarge": 852916.352,
|
|
"i3.16xlarge": 853447.126,
|
|
"c6a.xlarge": 86157.381,
|
|
"m8i.xlarge": 88967.972,
|
|
"m7i.xlarge": 89171.265,
|
|
"c5a.12xlarge": 891199.406,
|
|
"g5.12xlarge": 895146.627,
|
|
"r8idb.96xlarge": 9041676.478,
|
|
"c8i.metal-96xl": 9151572.927,
|
|
"m8i.metal-96xl": 9221902.017,
|
|
"r8i.metal-96xl": 9497310.332,
|
|
"r8a.large": 90096.854,
|
|
"r8idb.xlarge": 90764.693,
|
|
"z1d.12xlarge": 902340.446,
|
|
"r5n.16xlarge": 911940.724,
|
|
"g4dn.16xlarge": 914808.462,
|
|
"m5d.16xlarge": 915070.06,
|
|
"r5d.16xlarge": 919188.051,
|
|
"m8idn.xlarge": 92219.02,
|
|
"c8ine.xlarge": 92823.577,
|
|
"c6g.12xlarge": 920774.986,
|
|
"r6g.12xlarge": 926402.47,
|
|
"c6gd.12xlarge": 928373.412,
|
|
"r5.16xlarge": 928657.799,
|
|
"m8g.8xlarge": 928815.035,
|
|
"r8idn.xlarge": 93321.668,
|
|
"m8ib.xlarge": 93611.046,
|
|
"r6gd.12xlarge": 931556.476,
|
|
"m6g.12xlarge": 932038.835,
|
|
"m5zn.12xlarge": 932355.655,
|
|
"x8g.8xlarge": 932468.857,
|
|
"c6gn.12xlarge": 932823.735,
|
|
"m6gd.12xlarge": 933005.054,
|
|
"m5.16xlarge": 936265.665,
|
|
"c8a.large": 94265.515,
|
|
"c8i.xlarge": 94311.818,
|
|
"m8a.large": 94347.714,
|
|
"c8i-flex.xlarge": 95085.28,
|
|
"a1.2xlarge": 95158.796,
|
|
"r7i.xlarge": 95166.343,
|
|
"f2.12xlarge": 951908.775,
|
|
"x2gd.12xlarge": 952695.997,
|
|
"c1.xlarge": 96298.525,
|
|
"r7gd.xlarge": 96354.585,
|
|
"r8g.8xlarge": 961033.111,
|
|
"z1d.metal": 962213.09,
|
|
"m7i-flex.12xlarge": 968620.724,
|
|
"r8ib.xlarge": 97032.425,
|
|
"m8in.xlarge": 97205.346,
|
|
"r8in.xlarge": 97292.038,
|
|
"m8ine.xlarge": 97331.495,
|
|
"c7i.xlarge": 97652.277,
|
|
"m8idb.xlarge": 97719.87,
|
|
"i8g.8xlarge": 972348.83,
|
|
"c8gn.8xlarge": 975386.726,
|
|
"x2iezn.metal": 978343.949,
|
|
"x8i.xlarge": 98051.232,
|
|
"r8i.xlarge": 98540.371,
|
|
"r8i-flex.xlarge": 98871.22,
|
|
"c8gb.8xlarge": 983858.57,
|
|
"m8i-flex.xlarge": 99345.972,
|
|
"i7i.xlarge": 99481.865,
|
|
"c7g.xlarge": 99781.727,
|
|
"m8gn.8xlarge": 998050.682,
|
|
}
|
|
|
|
let acceptableInstances = []
|
|
|
|
for (const type of Object.keys(advisorData.instance_types)) {
|
|
if (!["a", "c", "d", "h", "i", "m", "r", "z", /*"t"*/].some(prefix => {
|
|
return type.match(new RegExp(`^${prefix}[0-9]+`))
|
|
})) {
|
|
continue
|
|
}
|
|
if (!type.startsWith("m7a")) {
|
|
//continue
|
|
}
|
|
const instance = advisorData.instance_types[type]
|
|
const cores = instance.cores
|
|
if (targetNumberOfCores % cores !== 0) {
|
|
continue
|
|
}
|
|
|
|
for (const region of Object.keys(advisorData.spot_advisor)) {
|
|
if (!region.startsWith("us-west-2")) {
|
|
//continue
|
|
}
|
|
const regionData = advisorData.spot_advisor[region].Linux
|
|
const instanceData = regionData[type]
|
|
if (!instanceData) {
|
|
// Skip instances not available in this region
|
|
continue
|
|
}
|
|
const additionalData = additionalInstanceData[type + "-" + region]
|
|
if (!additionalData) {
|
|
// Skip instances not available in the additional instance data
|
|
console.log(`Instance ${type + "-" + region} not available in additional instance data`)
|
|
continue
|
|
}
|
|
if (!additionalData.ProcessorInfo.SupportedArchitectures.includes("x86_64")) {
|
|
// Skip non-x86_64 instances
|
|
console.log(`Instance ${type + "-" + region} is not x86_64`)
|
|
continue
|
|
}
|
|
|
|
/*
|
|
{ "index": 0, "label": "<5%", "dots": 0, "max": 5 },
|
|
{ "index": 1, "label": "5-10%", "dots": 1, "max": 11 },
|
|
{ "index": 2, "label": "10-15%", "dots": 2, "max": 16 },
|
|
{ "index": 3, "label": "15-20%", "dots": 3, "max": 22 },
|
|
{ "index": 4, "label": ">20%", "dots": 4, "max": 100 }
|
|
*/
|
|
if (instanceData.r > 2) {
|
|
// Skip instances with eviction rate > 10%
|
|
console.log(`Instance ${type} (${region}) has eviction rate > 10%`)
|
|
continue
|
|
}
|
|
|
|
const regionPriceData = spotPrice.filter(r => r.InstanceType === type && r.AvailabilityZone.startsWith(region))
|
|
if (regionPriceData.length === 0) {
|
|
// Skip regions not available in the spot price data
|
|
console.log(`Region ${region} not available in spot price data`)
|
|
continue
|
|
}
|
|
const pList = regionPriceData.map(r => r.SpotPrice).map(parseFloat).filter(i => !isNaN(i))
|
|
let p = pList.reduce((a, b) => a + b, 0) / pList.length
|
|
|
|
|
|
/*if (type.startsWith("t")) {
|
|
// For burstable instances, use the baseline performance
|
|
const baseline = burstableBaselines[type]
|
|
if (!baseline) {
|
|
console.log(`Instance ${type} has no baseline performance data`)
|
|
continue
|
|
}
|
|
// Add 5c/h for non-baseline performance
|
|
const rest = 1 - baseline
|
|
const additionalCost = rest * 0.05
|
|
p += additionalCost
|
|
}*/
|
|
|
|
let cpuSpeed = performanceData[type] ?? 10000
|
|
if (cpuSpeed === 10000) {
|
|
// Skip instances with no performance data
|
|
console.log(`Instance ${type} has no performance data`)
|
|
//continue
|
|
}
|
|
if (type.startsWith("t")) {
|
|
const baseline = burstableBaselines[type]
|
|
if (!baseline) {
|
|
console.log(`Instance ${type} has no baseline performance data`)
|
|
continue
|
|
}
|
|
cpuSpeed = cpuSpeed * baseline
|
|
}
|
|
const pricePerCore = p / cores
|
|
const pricePerPerformance = p / (cpuSpeed / 10000)
|
|
|
|
acceptableInstances.push({
|
|
type,
|
|
region,
|
|
cores,
|
|
evictionRate: instanceData.r,
|
|
price: p,
|
|
pricePerCore,
|
|
pricePerPerformance,
|
|
})
|
|
}
|
|
}
|
|
|
|
console.log("Found", acceptableInstances.length, "acceptable instances")
|
|
|
|
acceptableInstances = acceptableInstances.sort((a, b) => a.pricePerPerformance - b.pricePerPerformance)
|
|
|
|
acceptableInstances.slice(0, 40).forEach(instance => {
|
|
console.log(`${instance.type}\t(${instance.cores} cores) in\t${instance.region}: $${instance.price.toFixed(7)}\t(eviction rate: ${instance.evictionRate})\tprice per core: $${instance.pricePerCore.toFixed(7)}\tprice per performance: $${instance.pricePerPerformance.toFixed(7)}`)
|
|
})
|
|
|
|
const cheapestInstance = acceptableInstances[0]
|
|
console.log("Cheapest instance type:", cheapestInstance)
|
|
|
|
const targetNumberOfInstances = Math.ceil(targetNumberOfCores / cheapestInstance.cores)
|
|
const targetRegion = cheapestInstance.region
|
|
|
|
console.log(`Requesting ${targetNumberOfInstances} instances of type ${cheapestInstance.type} in region ${cheapestInstance.region} at a total cost of ${cheapestInstance.price * targetNumberOfInstances}$/h`)
|
|
|
|
//exit(0)
|
|
|
|
let vpc = JSON.parse(await $`aws ec2 describe-vpcs --filters Name=isDefault,Values=true --region ${targetRegion}`).Vpcs[0]
|
|
|
|
if (!vpc) {
|
|
console.log("No default VPC found, creating one")
|
|
await $`aws ec2 create-default-vpc --region ${targetRegion}`
|
|
vpc = JSON.parse(await $`aws ec2 describe-vpcs --filters Name=isDefault,Values=true --region ${targetRegion}`).Vpcs[0]
|
|
}
|
|
|
|
if (!vpc.Ipv6CidrBlockAssociationSet) {
|
|
console.log("No IPv6 CIDR block found, associating one")
|
|
await $`aws ec2 associate-vpc-cidr-block --vpc-id ${vpc.VpcId} --ipv6-cidr-block-network-border-group ${targetRegion} --amazon-provided-ipv6-cidr-block --region ${targetRegion}`
|
|
vpc = JSON.parse(await $`aws ec2 describe-vpcs --filters Name=isDefault,Values=true --region ${targetRegion}`).Vpcs[0]
|
|
}
|
|
|
|
let ipv6CidrBlock = vpc.Ipv6CidrBlockAssociationSet.filter(c => c.Ipv6CidrBlockState.State == "associated")[0].Ipv6CidrBlock
|
|
|
|
let subnets = JSON.parse(await $`aws ec2 describe-subnets --filters Name=vpc-id,Values=${vpc.VpcId} --region ${targetRegion}`).Subnets
|
|
|
|
for (const subnet of subnets) {
|
|
if (subnet.Ipv6CidrBlockAssociationSet.length == 0) {
|
|
const parts = ipv6CidrBlock.split("/")[0].split(":")
|
|
let prefix = parts.slice(0, 3).join(":") + ":"
|
|
let lastPart = parts[3].slice(0, 2)
|
|
while (lastPart.length < 3) {
|
|
lastPart = lastPart + "0"
|
|
}
|
|
prefix += lastPart
|
|
let i = 0
|
|
while (subnets.some(s => s.Ipv6CidrBlockAssociationSet.some(c => c.Ipv6CidrBlock.startsWith(`${prefix}${i}`)))) {
|
|
i++
|
|
}
|
|
const cidrBlock = `${prefix}${i}::/64`
|
|
|
|
|
|
console.log(`No IPv6 CIDR block found for subnet ${subnet.SubnetId}, associating one`)
|
|
await $`aws ec2 associate-subnet-cidr-block --subnet-id ${subnet.SubnetId} --ipv6-cidr-block ${cidrBlock} --region ${targetRegion}`
|
|
subnet.Ipv6CidrBlockAssociationSet = JSON.parse(await $`aws ec2 describe-subnets --filters Name=subnet-id,Values=${subnet.SubnetId} --region ${targetRegion}`).Subnets[0].Ipv6CidrBlockAssociationSet
|
|
}
|
|
}
|
|
|
|
let securityGroup = JSON.parse(await $`aws ec2 describe-security-groups --filters Name=group-name,Values=default --region ${targetRegion}`).SecurityGroups[0]
|
|
|
|
if (!securityGroup.IpPermissions.some(p => p.UserIdGroupPairs.length == 0)) {
|
|
console.log("Allowing all inbound traffic to default security group")
|
|
if (securityGroup.IpPermissions.length > 0) {
|
|
for (const p of securityGroup.IpPermissions.filter(p => p.UserIdGroupPairs.length > 0)) {
|
|
await $`aws ec2 revoke-security-group-ingress --group-id ${securityGroup.GroupId} --ip-permissions IpProtocol=-1,UserIdGroupPairs=[{GroupId=${p.UserIdGroupPairs[0].GroupId}}] --region ${targetRegion}`
|
|
}
|
|
}
|
|
await $`aws ec2 authorize-security-group-ingress --group-id ${securityGroup.GroupId} --ip-permissions IpProtocol=-1,FromPort=-1,ToPort=-1,Ipv6Ranges=[{CidrIpv6=::/0}] --region ${targetRegion}`
|
|
}
|
|
|
|
let internetGateways = JSON.parse(await $`aws ec2 describe-internet-gateways --region ${targetRegion}`).InternetGateways
|
|
|
|
if (internetGateways.length == 0) {
|
|
console.log("No internet gateway found, creating one")
|
|
await $`aws ec2 create-internet-gateway --region ${targetRegion}`
|
|
internetGateways = JSON.parse(await $`aws ec2 describe-internet-gateways --region ${targetRegion}`).InternetGateways
|
|
}
|
|
if (!internetGateways.some(g => g.Attachments.some(a => a.VpcId == vpc.VpcId))) {
|
|
console.log("Attaching internet gateway to VPC")
|
|
await $`aws ec2 attach-internet-gateway --internet-gateway-id ${internetGateways[0].InternetGatewayId} --vpc-id ${vpc.VpcId} --region ${targetRegion}`
|
|
internetGateways = JSON.parse(await $`aws ec2 describe-internet-gateways --region ${targetRegion}`).InternetGateways
|
|
}
|
|
|
|
let internetGateway = internetGateways.filter(g => g.Attachments.some(a => a.VpcId == vpc.VpcId))[0]
|
|
|
|
let routeTable = JSON.parse(await $`aws ec2 describe-route-tables --filters Name=vpc-id,Values=${vpc.VpcId} --region ${targetRegion}`).RouteTables[0]
|
|
|
|
if (routeTable.Routes.some(r => r.DestinationIpv6CidrBlock == "::/0" && r.GatewayId !== internetGateway.InternetGatewayId)) {
|
|
console.log("Removing incorrect route to internet gateway")
|
|
await $`aws ec2 delete-route --route-table-id ${routeTable.RouteTableId} --destination-ipv6-cidr-block ::/0 --region ${targetRegion}`
|
|
routeTable = JSON.parse(await $`aws ec2 describe-route-tables --filters Name=vpc-id,Values=${vpc.VpcId} --region ${targetRegion}`).RouteTables[0]
|
|
}
|
|
|
|
if (!routeTable.Routes.some(r => r.DestinationIpv6CidrBlock == "::/0")) {
|
|
console.log("Adding route to internet gateway")
|
|
await $`aws ec2 create-route --route-table-id ${routeTable.RouteTableId} --destination-ipv6-cidr-block ::/0 --gateway-id ${internetGateway.InternetGatewayId} --region ${targetRegion}`
|
|
routeTable = JSON.parse(await $`aws ec2 describe-route-tables --filters Name=vpc-id,Values=${vpc.VpcId} --region ${targetRegion}`).RouteTables[0]
|
|
}
|
|
|
|
const publicKey = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAEAQCegvirTL3Dm2qS/jU1GHAy0UW/hYx75ORJMU4v/wU8r37f/7ZIWWUNyEMYMe/EQUm4KA03GPnQ7Rzslub02P85k+wN1mTuaWaY0XCpCh9iETFxpH1Huqgvkp/A8Utdujg5GvIwxnQAQIZkovREC2kr+LUmlr57tWEruv4MZOo3NqscbqoF5YoZa8VnnnPRa6gHHZAbaOmNlOIHx5rNfuqLMXcfI1scrvhT931JXzjb0g38sejbVYWQkApX1eoIiJt/B3nebi3YBlEsNXwQasGURmRD0bdql4uvZwO+v+oJgIsCCuV5zFMvT1zn7bDHyzzD/S60ao8NdIVSwzInelHzGCBFUnQg6uD66iaX0/85ci0z6l5iE0iAAY2Q8WOeb5h8lyUqEekImObwx6kfRBPXRyUeTajWqWIYnSZMnskEvFX2AWvTxqJ8kbm6tjBeAJdeNlnglDGWnyYHmRj1FL9hcZIRIDmIDtvyCxnlHE+korA3hnRHPwfPTleyZY3xTDqkQ89DavCz94J2PDKWGGkcIme8lJVfDbImVfwnMRC5QTM6q63ETAQZy1SzXMG9puiYZrHD56dUCKDfAdc8qzTqRlR/6U7/KV1/6pUIRhSdIGYp0OvtTXC3S3FOAB4CxFvaiE9VG0e+X6uQ+dKmxaDl7RI3Ila/RcreYdWuBUHwl1Putxzv4nDqgFSBauLdayhVDW8fqgMobK7pOiKZLPGdYa0NEdQbJcg1mh9Jm6W8rHSO2k6IkX0f3fUryde9trLIaWjNocs2BMQdusnCF2l12TMnjN7J5aYsw9M1hTJG9POkz8tmiKMEWoLVEv2ikemTNrehcYrpAMbRwx6LYfDeUu7/UutX3706uiV/mLlj/i+jYC1FSGiORbZIp2+HMhCPltNEekuCNAau6K6XvfuRVwmm7NRiIfzgbQWwnPfqRTpcWXhZd07CpCRbQDhRraE+EGX/yukS09Zw3sRAE2qgskLDCvtC01/MSAgJQYzWn+1Vu9CiFRl+5pUVRFVnmT/NVt6AGEows2lcccPdnd0xA83kx10wE1e8wtDgU6mbzU1T2/SevreMdS9xNcTs4x+NruK7bif2ijS+fysmYYpwsLIY9nfYFtdVBU/hB0pGthNQ5E4cqV8gBSf4PKAX0f29xZhB3+vUIVeQzD/WxfSRTBLzKF7WC6dGgINeor3g59Db8DEkVXJ7p0EpKlHYOjAYumf8xk8rTJNYGkM9H3EdXsDTBJZlOE2ePWoS4Vf71chzqJpSZt7AYHEvcs2vrgxx/uP8msbjF00I8jQ47/wlkKedOqtb3LZ9drgRujUan6aWapP0jn25Ry7qu29GMfPS1xqx2sCxkDGyNLYtzZEJ jonas.peeters@icloud.com"
|
|
|
|
let keyPairs = JSON.parse(await $`aws ec2 describe-key-pairs --filters Name=key-name,Values=enterprise-new --region ${targetRegion}`).KeyPairs
|
|
if (keyPairs.length == 0) {
|
|
console.log("No key pair found, importing...")
|
|
await $`aws ec2 import-key-pair --key-name enterprise-new --public-key-material ${publicKey} --region ${targetRegion}`
|
|
}
|
|
|
|
const image = JSON.parse(await $`aws ec2 describe-images --owners amazon --filters "Name=name,Values=ubuntu-minimal/images/hvm-ssd-gp3/ubuntu-noble-24.04-amd64-minimal-20260604" --region ${targetRegion}`).Images[0]
|
|
|
|
const dateFrom = new Date(Math.ceil(new Date().getTime() / 1000) * 1000)
|
|
const dateUntil = new Date(Math.ceil(new Date(dateFrom.getTime() + 10 * 60 * 60 * 1000).getTime() / 1000) * 1000)
|
|
|
|
const setupScript = fs.readFileSync("setup.sh", "utf8")
|
|
const setupScriptBase64 = Buffer.from(setupScript).toString("base64")
|
|
|
|
|
|
/**
|
|
* @type {import("@aws-sdk/client-ec2").LaunchTemplateVersion}
|
|
*/
|
|
const launchTemplate = {
|
|
LaunchTemplateId: "",
|
|
VersionDescription: "1",
|
|
LaunchTemplateData: {
|
|
ImageId: image.ImageId,
|
|
BlockDeviceMappings: [
|
|
{
|
|
DeviceName: "/dev/sda1",
|
|
Ebs: {
|
|
DeleteOnTermination: true,
|
|
SnapshotId: image.BlockDeviceMappings.filter(b => !!b.Ebs)[0].Ebs.SnapshotId,
|
|
VolumeSize: 8,
|
|
VolumeType: "gp3",
|
|
Encrypted: false
|
|
}
|
|
}
|
|
],
|
|
KeyName: "enterprise-new",
|
|
UserData: setupScriptBase64,
|
|
InstanceType: cheapestInstance.type,
|
|
InstanceInitiatedShutdownBehavior: "terminate",
|
|
NetworkInterfaces: [
|
|
{
|
|
DeviceIndex: 0,
|
|
DeleteOnTermination: true,
|
|
Groups: [],
|
|
AssociatePublicIpAddress: false,
|
|
Ipv6AddressCount: 1,
|
|
}
|
|
],
|
|
}
|
|
}
|
|
|
|
let existingLaunchTemplates = JSON.parse(await $`aws ec2 describe-launch-templates --filters Name=launch-template-name,Values=launch-template --region ${targetRegion}`).LaunchTemplates
|
|
|
|
if (!existingLaunchTemplates.length == 0) {
|
|
console.log("Launch template already exists, deleting...")
|
|
await $`aws ec2 delete-launch-template --launch-template-id ${existingLaunchTemplates[0].LaunchTemplateId} --region ${targetRegion}`
|
|
existingLaunchTemplates = []
|
|
}
|
|
|
|
await $`aws ec2 create-launch-template --launch-template-name launch-template --version-description 1 --launch-template-data ${JSON.stringify(launchTemplate.LaunchTemplateData)} --region ${targetRegion}`
|
|
|
|
existingLaunchTemplates = JSON.parse(await $`aws ec2 describe-launch-templates --filters Name=launch-template-name,Values=launch-template --region ${targetRegion}`).LaunchTemplates
|
|
|
|
//exit(0)
|
|
|
|
/**
|
|
* @type {import("@aws-sdk/client-ec2").CreateFleetRequest}
|
|
*/
|
|
const fleet = {
|
|
TargetCapacitySpecification: {
|
|
TotalTargetCapacity: targetNumberOfInstances,
|
|
DefaultTargetCapacityType: "spot"
|
|
},
|
|
SpotOptions: {
|
|
AllocationStrategy: "priceCapacityOptimized",
|
|
MaxTotalPrice: "1.00",
|
|
},
|
|
ValidFrom: dateFrom.toISOString(),
|
|
ValidUntil: dateUntil.toISOString(),
|
|
Type: "request",
|
|
TerminateInstancesWithExpiration: true,
|
|
LaunchTemplateConfigs: subnets.map(s => {
|
|
/**
|
|
* @type {import("@aws-sdk/client-ec2").FleetLaunchTemplateConfigRequest}
|
|
*/
|
|
const template = {
|
|
LaunchTemplateSpecification: {
|
|
LaunchTemplateId: existingLaunchTemplates[0].LaunchTemplateId,
|
|
Version: "1",
|
|
},
|
|
Overrides: [{
|
|
SubnetId: s.SubnetId,
|
|
}]
|
|
}
|
|
return template
|
|
}),
|
|
}
|
|
|
|
console.log("Fleet configuration:", fleet)
|
|
//exit(0)
|
|
|
|
console.log("Requesting spot fleet...")
|
|
await $`aws ec2 create-fleet --cli-input-json ${JSON.stringify(fleet)} --region ${targetRegion}`
|