github.com/rogpeppe/juju@v0.0.0-20140613142852-6337964b789e/provider/ec2/instancetype.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package ec2 5 6 import ( 7 "launchpad.net/goamz/aws" 8 9 "github.com/juju/juju/environs/instances" 10 "github.com/juju/juju/juju/arch" 11 ) 12 13 // Type of virtualisation used. 14 var ( 15 paravirtual = "pv" 16 hvm = "hvm" 17 ) 18 19 // all instance types can run amd64 images, and some can also run i386 ones. 20 var ( 21 amd64 = []string{arch.AMD64} 22 both = []string{arch.AMD64, arch.I386} 23 ) 24 25 // allRegions is defined here to allow tests to override the content. 26 var allRegions = aws.Regions 27 28 // allInstanceTypes holds the relevant attributes of every known 29 // instance type. 30 // Note that while the EC2 root disk default is 8G, constraints on disk 31 // for amazon will simply cause the root disk to grow to match the constraint 32 var allInstanceTypes = []instances.InstanceType{ 33 { // General purpose, 1st generation. 34 Name: "m1.small", 35 Arches: both, 36 CpuCores: 1, 37 CpuPower: instances.CpuPower(100), 38 Mem: 1740, 39 VirtType: ¶virtual, 40 }, { 41 Name: "m1.medium", 42 Arches: both, 43 CpuCores: 1, 44 CpuPower: instances.CpuPower(200), 45 Mem: 3840, 46 VirtType: ¶virtual, 47 }, { 48 Name: "m1.large", 49 Arches: amd64, 50 CpuCores: 2, 51 CpuPower: instances.CpuPower(400), 52 Mem: 7680, 53 VirtType: ¶virtual, 54 }, { 55 Name: "m1.xlarge", 56 Arches: amd64, 57 CpuCores: 4, 58 CpuPower: instances.CpuPower(800), 59 Mem: 15360, 60 VirtType: ¶virtual, 61 }, 62 63 { // General purpose, 2nd generation. 64 Name: "m3.medium", 65 Arches: amd64, 66 CpuCores: 1, 67 CpuPower: instances.CpuPower(300), 68 Mem: 3840, 69 VirtType: ¶virtual, 70 }, { 71 Name: "m3.large", 72 Arches: amd64, 73 CpuCores: 2, 74 CpuPower: instances.CpuPower(650), 75 Mem: 7680, 76 VirtType: ¶virtual, 77 }, { 78 Name: "m3.xlarge", 79 Arches: amd64, 80 CpuCores: 4, 81 CpuPower: instances.CpuPower(1300), 82 Mem: 15360, 83 VirtType: ¶virtual, 84 }, { 85 Name: "m3.2xlarge", 86 Arches: amd64, 87 CpuCores: 8, 88 CpuPower: instances.CpuPower(2600), 89 Mem: 30720, 90 VirtType: ¶virtual, 91 }, 92 93 { // Compute-optimized, 1st generation. 94 Name: "c1.medium", 95 Arches: both, 96 CpuCores: 2, 97 CpuPower: instances.CpuPower(500), 98 Mem: 1740, 99 VirtType: ¶virtual, 100 }, { 101 Name: "c1.xlarge", 102 Arches: amd64, 103 CpuCores: 8, 104 CpuPower: instances.CpuPower(2000), 105 Mem: 7168, 106 VirtType: ¶virtual, 107 }, { 108 Name: "cc2.8xlarge", 109 Arches: amd64, 110 CpuCores: 16, 111 CpuPower: instances.CpuPower(8800), 112 Mem: 61952, 113 VirtType: &hvm, 114 }, 115 116 { // Compute-optimized, 2nd generation. 117 Name: "c3.large", 118 Arches: amd64, 119 CpuCores: 2, 120 CpuPower: instances.CpuPower(700), 121 Mem: 3840, 122 VirtType: ¶virtual, 123 }, { 124 Name: "c3.xlarge", 125 Arches: amd64, 126 CpuCores: 4, 127 CpuPower: instances.CpuPower(1400), 128 Mem: 7680, 129 VirtType: ¶virtual, 130 }, { 131 Name: "c3.2xlarge", 132 Arches: amd64, 133 CpuCores: 8, 134 CpuPower: instances.CpuPower(2800), 135 Mem: 15360, 136 VirtType: ¶virtual, 137 }, { 138 Name: "c3.4xlarge", 139 Arches: amd64, 140 CpuCores: 16, 141 CpuPower: instances.CpuPower(5500), 142 Mem: 30720, 143 VirtType: ¶virtual, 144 }, { 145 Name: "c3.8xlarge", 146 Arches: amd64, 147 CpuCores: 32, 148 CpuPower: instances.CpuPower(10800), 149 Mem: 61440, 150 VirtType: ¶virtual, 151 }, 152 153 { // GPU instances, 1st generation. 154 Name: "cg1.4xlarge", 155 Arches: amd64, 156 CpuCores: 8, 157 CpuPower: instances.CpuPower(3350), 158 Mem: 22528, 159 VirtType: &hvm, 160 }, 161 162 { // GPU instances, 2nd generation. 163 Name: "g2.2xlarge", 164 Arches: amd64, 165 CpuCores: 8, 166 CpuPower: instances.CpuPower(2600), 167 Mem: 15360, 168 VirtType: &hvm, 169 }, 170 171 { // Memory-optimized, 1st generation. 172 Name: "m2.xlarge", 173 Arches: amd64, 174 CpuCores: 2, 175 CpuPower: instances.CpuPower(650), 176 Mem: 17408, 177 VirtType: ¶virtual, 178 }, { 179 Name: "m2.2xlarge", 180 Arches: amd64, 181 CpuCores: 4, 182 CpuPower: instances.CpuPower(1300), 183 Mem: 34816, 184 VirtType: ¶virtual, 185 }, { 186 Name: "m2.4xlarge", 187 Arches: amd64, 188 CpuCores: 8, 189 CpuPower: instances.CpuPower(2600), 190 Mem: 69632, 191 VirtType: ¶virtual, 192 }, { 193 Name: "cr1.8xlarge", 194 Arches: amd64, 195 CpuCores: 16, 196 CpuPower: instances.CpuPower(8800), 197 Mem: 249856, 198 VirtType: &hvm, 199 }, 200 201 { // Memory-optimized, 2nd generation. 202 Name: "r3.large", 203 Arches: amd64, 204 CpuCores: 2, 205 CpuPower: instances.CpuPower(650), 206 Mem: 15360, 207 VirtType: &hvm, 208 }, { 209 Name: "r3.xlarge", 210 Arches: amd64, 211 CpuCores: 4, 212 CpuPower: instances.CpuPower(1300), 213 Mem: 31232, 214 VirtType: &hvm, 215 }, { 216 Name: "r3.2xlarge", 217 Arches: amd64, 218 CpuCores: 8, 219 CpuPower: instances.CpuPower(2600), 220 Mem: 62464, 221 VirtType: &hvm, 222 }, { 223 Name: "r3.4xlarge", 224 Arches: amd64, 225 CpuCores: 16, 226 CpuPower: instances.CpuPower(5200), 227 Mem: 124928, 228 VirtType: &hvm, 229 }, { 230 Name: "r3.8xlarge", 231 Arches: amd64, 232 CpuCores: 32, 233 CpuPower: instances.CpuPower(10400), 234 Mem: 249856, 235 VirtType: &hvm, 236 }, 237 238 { // Storage-optimized, 1st generation. 239 Name: "hi1.4xlarge", 240 Arches: amd64, 241 CpuCores: 16, 242 CpuPower: instances.CpuPower(3500), 243 Mem: 61952, 244 VirtType: ¶virtual, 245 }, 246 247 { // Storage-optimized, 2nd generation. 248 Name: "i2.xlarge", 249 Arches: amd64, 250 CpuCores: 4, 251 CpuPower: instances.CpuPower(1400), 252 Mem: 31232, 253 VirtType: &hvm, 254 }, { 255 Name: "i2.2xlarge", 256 Arches: amd64, 257 CpuCores: 8, 258 CpuPower: instances.CpuPower(2700), 259 Mem: 62464, 260 VirtType: &hvm, 261 }, { 262 Name: "i2.4xlarge", 263 Arches: amd64, 264 CpuCores: 16, 265 CpuPower: instances.CpuPower(5300), 266 Mem: 124928, 267 VirtType: &hvm, 268 }, { 269 Name: "i2.8xlarge", 270 Arches: amd64, 271 CpuCores: 32, 272 CpuPower: instances.CpuPower(10400), 273 Mem: 249856, 274 VirtType: &hvm, 275 }, { 276 Name: "hs1.8xlarge", 277 Arches: amd64, 278 CpuCores: 16, 279 CpuPower: instances.CpuPower(3500), 280 Mem: 119808, 281 VirtType: ¶virtual, 282 }, 283 284 { // Tiny-weeny. 285 Name: "t1.micro", 286 Arches: both, 287 CpuCores: 1, 288 CpuPower: instances.CpuPower(20), 289 Mem: 613, 290 VirtType: ¶virtual, 291 }, 292 } 293 294 type instanceTypeCost map[string]uint64 295 type regionCosts map[string]instanceTypeCost 296 297 // allRegionCosts holds the cost in USDe-3/hour for each available instance 298 // type in each region. 299 var allRegionCosts = regionCosts{ 300 "ap-northeast-1": { // Tokyo. 301 "m1.small": 61, 302 "m1.medium": 122, 303 "m1.large": 243, 304 "m1.xlarge": 486, 305 "m3.medium": 101, 306 "m3.large": 203, 307 "m3.xlarge": 405, 308 "m3.2xlarge": 810, 309 310 "c1.medium": 158, 311 "c1.xlarge": 632, 312 "cc2.8xlarge": 2349, 313 "c3.large": 128, 314 "c3.xlarge": 255, 315 "c3.2xlarge": 511, 316 "c3.4xlarge": 1021, 317 "c3.8xlarge": 2043, 318 319 "g2.2xlarge": 898, 320 321 "m2.xlarge": 287, 322 "m2.2xlarge": 575, 323 "m2.4xlarge": 1150, 324 "cr1.8xlarge": 4105, 325 "r3.large": 210, 326 "r3.xlarge": 420, 327 "r3.2xlarge": 840, 328 "r3.4xlarge": 1680, 329 "r3.8xlarge": 3360, 330 331 "hi1.4xlarge": 3276, 332 "i2.xlarge": 1001, 333 "i2.2xlarge": 2001, 334 "i2.4xlarge": 4002, 335 "i2.8xlarge": 8004, 336 "hs1.8xlarge": 5400, 337 338 "t1.micro": 26, 339 }, 340 "ap-southeast-1": { // Singapore. 341 "m1.small": 58, 342 "m1.medium": 117, 343 "m1.large": 233, 344 "m1.xlarge": 467, 345 "m3.medium": 98, 346 "m3.large": 196, 347 "m3.xlarge": 392, 348 "m3.2xlarge": 784, 349 350 "c1.medium": 164, 351 "c1.xlarge": 655, 352 "c3.large": 132, 353 "c3.xlarge": 265, 354 "c3.2xlarge": 529, 355 "c3.4xlarge": 1058, 356 "c3.8xlarge": 2117, 357 358 "m2.xlarge": 296, 359 "m2.2xlarge": 592, 360 "m2.4xlarge": 1183, 361 "r3.large": 210, 362 "r3.xlarge": 420, 363 "r3.2xlarge": 840, 364 "r3.4xlarge": 1680, 365 "r3.8xlarge": 3360, 366 367 "i2.xlarge": 1018, 368 "i2.2xlarge": 2035, 369 "i2.4xlarge": 4070, 370 "i2.8xlarge": 8140, 371 "hs1.8xlarge": 5570, 372 373 "t1.micro": 20, 374 }, 375 "ap-southeast-2": { // Sydney. 376 "m1.small": 58, 377 "m1.medium": 117, 378 "m1.large": 233, 379 "m1.xlarge": 467, 380 "m3.medium": 98, 381 "m3.large": 196, 382 "m3.xlarge": 392, 383 "m3.2xlarge": 784, 384 385 "c1.medium": 164, 386 "c1.xlarge": 655, 387 "c3.large": 132, 388 "c3.xlarge": 265, 389 "c3.2xlarge": 529, 390 "c3.4xlarge": 1058, 391 "c3.8xlarge": 2117, 392 393 "m2.xlarge": 296, 394 "m2.2xlarge": 592, 395 "m2.4xlarge": 1183, 396 "r3.large": 210, 397 "r3.xlarge": 420, 398 "r3.2xlarge": 840, 399 "r3.4xlarge": 1680, 400 "r3.8xlarge": 3360, 401 402 "i2.xlarge": 1018, 403 "i2.2xlarge": 2035, 404 "i2.4xlarge": 4070, 405 "i2.8xlarge": 8140, 406 "hs1.8xlarge": 5570, 407 408 "t1.micro": 20, 409 }, 410 "eu-west-1": { // Ireland. 411 "m1.small": 47, 412 "m1.medium": 95, 413 "m1.large": 190, 414 "m1.xlarge": 379, 415 "m3.medium": 77, 416 "m3.large": 154, 417 "m3.xlarge": 308, 418 "m3.2xlarge": 616, 419 420 "c1.medium": 148, 421 "c1.xlarge": 592, 422 "cc2.8xlarge": 2250, 423 "c3.large": 120, 424 "c3.xlarge": 239, 425 "c3.2xlarge": 478, 426 "c3.4xlarge": 956, 427 "c3.8xlarge": 1912, 428 429 "cg1.4xlarge": 2360, 430 "g2.2xlarge": 702, 431 432 "m2.xlarge": 275, 433 "m2.2xlarge": 550, 434 "m2.4xlarge": 1100, 435 "cr1.8xlarge": 3750, 436 "r3.large": 195, 437 "r3.xlarge": 390, 438 "r3.2xlarge": 780, 439 "r3.4xlarge": 1560, 440 "r3.8xlarge": 3120, 441 442 "hi1.4xlarge": 3100, 443 "i2.xlarge": 938, 444 "i2.2xlarge": 1876, 445 "i2.4xlarge": 3751, 446 "i2.8xlarge": 7502, 447 "hs1.8xlarge": 4900, 448 449 "t1.micro": 20, 450 }, 451 "sa-east-1": { // Sao Paulo. 452 "m1.small": 58, 453 "m1.medium": 117, 454 "m1.large": 233, 455 "m1.xlarge": 467, 456 "m3.medium": 95, 457 "m3.large": 190, 458 "m3.xlarge": 381, 459 "m3.2xlarge": 761, 460 461 "c1.medium": 179, 462 "c1.xlarge": 718, 463 464 "m2.xlarge": 323, 465 "m2.2xlarge": 645, 466 "m2.4xlarge": 1291, 467 468 "t1.micro": 27, 469 }, 470 "us-east-1": { // Northern Virginia. 471 "m1.small": 44, 472 "m1.medium": 87, 473 "m1.large": 175, 474 "m1.xlarge": 350, 475 "m3.medium": 70, 476 "m3.large": 140, 477 "m3.xlarge": 280, 478 "m3.2xlarge": 560, 479 480 "c1.medium": 130, 481 "c1.xlarge": 520, 482 "cc2.8xlarge": 2000, 483 "c3.large": 105, 484 "c3.xlarge": 210, 485 "c3.2xlarge": 420, 486 "c3.4xlarge": 840, 487 "c3.8xlarge": 1680, 488 489 "cg1.4xlarge": 2100, 490 "g2.2xlarge": 650, 491 492 "m2.xlarge": 245, 493 "m2.2xlarge": 490, 494 "m2.4xlarge": 980, 495 "cr1.8xlarge": 3500, 496 "r3.large": 175, 497 "r3.xlarge": 350, 498 "r3.2xlarge": 700, 499 "r3.4xlarge": 1400, 500 "r3.8xlarge": 2800, 501 502 "hi1.4xlarge": 3100, 503 "i2.xlarge": 853, 504 "i2.2xlarge": 1705, 505 "i2.4xlarge": 3410, 506 "i2.8xlarge": 6820, 507 "hs1.8xlarge": 4600, 508 509 "t1.micro": 20, 510 }, 511 "us-west-1": { // Northern California. 512 "m1.small": 47, 513 "m1.medium": 95, 514 "m1.large": 190, 515 "m1.xlarge": 379, 516 "m3.medium": 77, 517 "m3.large": 154, 518 "m3.xlarge": 308, 519 "m3.2xlarge": 616, 520 521 "c1.medium": 148, 522 "c1.xlarge": 592, 523 "c3.large": 120, 524 "c3.xlarge": 239, 525 "c3.2xlarge": 478, 526 "c3.4xlarge": 956, 527 "c3.8xlarge": 1912, 528 529 "g2.2xlarge": 702, 530 531 "m2.xlarge": 275, 532 "m2.2xlarge": 550, 533 "m2.4xlarge": 1100, 534 "r3.large": 195, 535 "r3.xlarge": 390, 536 "r3.2xlarge": 780, 537 "r3.4xlarge": 1560, 538 "r3.8xlarge": 3120, 539 540 "i2.xlarge": 938, 541 "i2.2xlarge": 1876, 542 "i2.4xlarge": 3751, 543 "i2.8xlarge": 7502, 544 545 "t1.micro": 25, 546 }, 547 "us-west-2": { // Oregon. 548 "m1.small": 44, 549 "m1.medium": 87, 550 "m1.large": 175, 551 "m1.xlarge": 350, 552 "m3.medium": 70, 553 "m3.large": 140, 554 "m3.xlarge": 280, 555 "m3.2xlarge": 560, 556 557 "c1.medium": 130, 558 "c1.xlarge": 520, 559 "cc2.8xlarge": 2000, 560 "c3.large": 105, 561 "c3.xlarge": 210, 562 "c3.2xlarge": 420, 563 "c3.4xlarge": 840, 564 "c3.8xlarge": 1680, 565 566 "g2.2xlarge": 650, 567 568 "m2.xlarge": 245, 569 "m2.2xlarge": 490, 570 "m2.4xlarge": 980, 571 "cr1.8xlarge": 3500, 572 "r3.large": 175, 573 "r3.xlarge": 350, 574 "r3.2xlarge": 700, 575 "r3.4xlarge": 1400, 576 "r3.8xlarge": 2800, 577 578 "hi1.4xlarge": 3100, 579 "i2.xlarge": 853, 580 "i2.2xlarge": 1705, 581 "i2.4xlarge": 3410, 582 "i2.8xlarge": 6820, 583 "hs1.8xlarge": 4600, 584 585 "t1.micro": 20, 586 }, 587 }