github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/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  	"gopkg.in/amz.v3/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: &paravirtual,
    40  	}, {
    41  		Name:     "m1.medium",
    42  		Arches:   both,
    43  		CpuCores: 1,
    44  		CpuPower: instances.CpuPower(200),
    45  		Mem:      3840,
    46  		VirtType: &paravirtual,
    47  	}, {
    48  		Name:     "m1.large",
    49  		Arches:   amd64,
    50  		CpuCores: 2,
    51  		CpuPower: instances.CpuPower(400),
    52  		Mem:      7680,
    53  		VirtType: &paravirtual,
    54  	}, {
    55  		Name:     "m1.xlarge",
    56  		Arches:   amd64,
    57  		CpuCores: 4,
    58  		CpuPower: instances.CpuPower(800),
    59  		Mem:      15360,
    60  		VirtType: &paravirtual,
    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: &paravirtual,
    70  	}, {
    71  		Name:     "m3.large",
    72  		Arches:   amd64,
    73  		CpuCores: 2,
    74  		CpuPower: instances.CpuPower(650),
    75  		Mem:      7680,
    76  		VirtType: &paravirtual,
    77  	}, {
    78  		Name:     "m3.xlarge",
    79  		Arches:   amd64,
    80  		CpuCores: 4,
    81  		CpuPower: instances.CpuPower(1300),
    82  		Mem:      15360,
    83  		VirtType: &paravirtual,
    84  	}, {
    85  		Name:     "m3.2xlarge",
    86  		Arches:   amd64,
    87  		CpuCores: 8,
    88  		CpuPower: instances.CpuPower(2600),
    89  		Mem:      30720,
    90  		VirtType: &paravirtual,
    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: &paravirtual,
   100  	}, {
   101  		Name:     "c1.xlarge",
   102  		Arches:   amd64,
   103  		CpuCores: 8,
   104  		CpuPower: instances.CpuPower(2000),
   105  		Mem:      7168,
   106  		VirtType: &paravirtual,
   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: &paravirtual,
   123  	}, {
   124  		Name:     "c3.xlarge",
   125  		Arches:   amd64,
   126  		CpuCores: 4,
   127  		CpuPower: instances.CpuPower(1400),
   128  		Mem:      7680,
   129  		VirtType: &paravirtual,
   130  	}, {
   131  		Name:     "c3.2xlarge",
   132  		Arches:   amd64,
   133  		CpuCores: 8,
   134  		CpuPower: instances.CpuPower(2800),
   135  		Mem:      15360,
   136  		VirtType: &paravirtual,
   137  	}, {
   138  		Name:     "c3.4xlarge",
   139  		Arches:   amd64,
   140  		CpuCores: 16,
   141  		CpuPower: instances.CpuPower(5500),
   142  		Mem:      30720,
   143  		VirtType: &paravirtual,
   144  	}, {
   145  		Name:     "c3.8xlarge",
   146  		Arches:   amd64,
   147  		CpuCores: 32,
   148  		CpuPower: instances.CpuPower(10800),
   149  		Mem:      61440,
   150  		VirtType: &paravirtual,
   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: &paravirtual,
   178  	}, {
   179  		Name:     "m2.2xlarge",
   180  		Arches:   amd64,
   181  		CpuCores: 4,
   182  		CpuPower: instances.CpuPower(1300),
   183  		Mem:      34816,
   184  		VirtType: &paravirtual,
   185  	}, {
   186  		Name:     "m2.4xlarge",
   187  		Arches:   amd64,
   188  		CpuCores: 8,
   189  		CpuPower: instances.CpuPower(2600),
   190  		Mem:      69632,
   191  		VirtType: &paravirtual,
   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:      15616,
   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: &paravirtual,
   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: &paravirtual,
   282  	},
   283  
   284  	{ // Tiny-weeny.
   285  		Name:     "t1.micro",
   286  		Arches:   both,
   287  		CpuCores: 1,
   288  		// Burstable baseline is 20%
   289  		CpuPower: instances.CpuPower(20),
   290  		Mem:      613,
   291  		VirtType: &paravirtual,
   292  	},
   293  
   294  	{ // General Purpose, 3rd generation.
   295  		Name:     "t2.micro",
   296  		Arches:   amd64,
   297  		CpuCores: 1,
   298  		Mem:      1024,
   299  		// Burstable baseline is 10% (from http://aws.amazon.com/ec2/faqs/#burst)
   300  		CpuPower: instances.CpuPower(10),
   301  		VirtType: &hvm,
   302  	},
   303  	{ // General Purpose, 3rd generation.
   304  		Name:     "t2.small",
   305  		Arches:   amd64,
   306  		CpuCores: 1,
   307  		Mem:      2048,
   308  		// Burstable baseline is 20% (from http://aws.amazon.com/ec2/faqs/#burst)
   309  		CpuPower: instances.CpuPower(20),
   310  		VirtType: &hvm,
   311  	},
   312  	{ // General Purpose, 3rd generation.
   313  		Name:     "t2.medium",
   314  		Arches:   amd64,
   315  		CpuCores: 2,
   316  		Mem:      4096,
   317  		// Burstable baseline is 40% (from http://aws.amazon.com/ec2/faqs/#burst)
   318  		CpuPower: instances.CpuPower(40),
   319  		VirtType: &hvm,
   320  	},
   321  
   322  	{ // Compute-optimized, 3rd generation.
   323  		Name:     "c4.large",
   324  		Arches:   amd64,
   325  		CpuCores: 2,
   326  		Mem:      3840,
   327  		CpuPower: instances.CpuPower(800),
   328  		VirtType: &hvm,
   329  	}, {
   330  		Name:     "c4.xlarge",
   331  		Arches:   amd64,
   332  		CpuCores: 4,
   333  		Mem:      7680,
   334  		CpuPower: instances.CpuPower(1600),
   335  		VirtType: &hvm,
   336  	}, {
   337  		Name:     "c4.2xlarge",
   338  		Arches:   amd64,
   339  		CpuCores: 8,
   340  		Mem:      15360,
   341  		CpuPower: instances.CpuPower(3100),
   342  		VirtType: &hvm,
   343  	}, {
   344  		Name:     "c4.4xlarge",
   345  		Arches:   amd64,
   346  		CpuCores: 16,
   347  		Mem:      30720,
   348  		CpuPower: instances.CpuPower(6200),
   349  		VirtType: &hvm,
   350  	}, {
   351  		Name:   "c4.8xlarge",
   352  		Arches: amd64,
   353  		// The source of this information at http://aws.amazon.com/ec2/instance-types/
   354  		CpuCores: 36,
   355  		Mem:      61440,
   356  		CpuPower: instances.CpuPower(13200),
   357  		VirtType: &hvm,
   358  	},
   359  }
   360  
   361  type instanceTypeCost map[string]uint64
   362  type regionCosts map[string]instanceTypeCost
   363  
   364  // allRegionCosts holds the cost in USDe-3/hour for each available instance
   365  // type in each region.
   366  var allRegionCosts = regionCosts{
   367  	"ap-northeast-1": { // Tokyo.
   368  		"m1.small":  61,
   369  		"m1.medium": 122,
   370  		"m1.large":  243,
   371  		"m1.xlarge": 486,
   372  
   373  		"m3.medium":  101,
   374  		"m3.large":   203,
   375  		"m3.xlarge":  405,
   376  		"m3.2xlarge": 810,
   377  
   378  		"c1.medium": 158,
   379  		"c1.xlarge": 632,
   380  
   381  		"cc2.8xlarge": 2349,
   382  
   383  		"c3.large":   128,
   384  		"c3.xlarge":  255,
   385  		"c3.2xlarge": 511,
   386  		"c3.4xlarge": 1021,
   387  		"c3.8xlarge": 2043,
   388  
   389  		"g2.2xlarge": 898,
   390  
   391  		"m2.xlarge":  287,
   392  		"m2.2xlarge": 575,
   393  		"m2.4xlarge": 1150,
   394  
   395  		"cr1.8xlarge": 4105,
   396  
   397  		"r3.large":   210,
   398  		"r3.xlarge":  420,
   399  		"r3.2xlarge": 840,
   400  		"r3.4xlarge": 1680,
   401  		"r3.8xlarge": 3360,
   402  
   403  		"hi1.4xlarge": 3276,
   404  
   405  		"i2.xlarge":  1001,
   406  		"i2.2xlarge": 2001,
   407  		"i2.4xlarge": 4002,
   408  		"i2.8xlarge": 8004,
   409  
   410  		"hs1.8xlarge": 5400,
   411  
   412  		"t1.micro": 26,
   413  
   414  		"t2.micro":  20,
   415  		"t2.small":  40,
   416  		"t2.medium": 80,
   417  
   418  		"c4.large":   147,
   419  		"c4.xlarge":  294,
   420  		"c4.2xlarge": 588,
   421  		"c4.4xlarge": 1176,
   422  		"c4.8xlarge": 2352,
   423  	},
   424  	"ap-southeast-1": { // Singapore.
   425  		"m1.small":  58,
   426  		"m1.medium": 117,
   427  		"m1.large":  233,
   428  		"m1.xlarge": 467,
   429  
   430  		"m3.medium":  98,
   431  		"m3.large":   196,
   432  		"m3.xlarge":  392,
   433  		"m3.2xlarge": 784,
   434  
   435  		"c1.medium": 164,
   436  		"c1.xlarge": 655,
   437  
   438  		"c3.large":   132,
   439  		"c3.xlarge":  265,
   440  		"c3.2xlarge": 529,
   441  		"c3.4xlarge": 1058,
   442  		"c3.8xlarge": 2117,
   443  
   444  		"m2.xlarge":  296,
   445  		"m2.2xlarge": 592,
   446  		"m2.4xlarge": 1183,
   447  
   448  		"r3.large":   210,
   449  		"r3.xlarge":  420,
   450  		"r3.2xlarge": 840,
   451  		"r3.4xlarge": 1680,
   452  		"r3.8xlarge": 3360,
   453  
   454  		"i2.xlarge":  1018,
   455  		"i2.2xlarge": 2035,
   456  		"i2.4xlarge": 4070,
   457  		"i2.8xlarge": 8140,
   458  
   459  		"hs1.8xlarge": 5570,
   460  
   461  		"t1.micro": 20,
   462  
   463  		"t2.micro":  20,
   464  		"t2.small":  40,
   465  		"t2.medium": 80,
   466  
   467  		"c4.large":   152,
   468  		"c4.xlarge":  304,
   469  		"c4.2xlarge": 608,
   470  		"c4.4xlarge": 1216,
   471  		"c4.8xlarge": 2432,
   472  
   473  		"g2.2xlarge": 1000,
   474  	},
   475  	"ap-southeast-2": { // Sydney.
   476  		"m1.small":  58,
   477  		"m1.medium": 117,
   478  		"m1.large":  233,
   479  		"m1.xlarge": 467,
   480  
   481  		"m3.medium":  98,
   482  		"m3.large":   196,
   483  		"m3.xlarge":  392,
   484  		"m3.2xlarge": 784,
   485  
   486  		"c1.medium": 164,
   487  		"c1.xlarge": 655,
   488  
   489  		"c3.large":   132,
   490  		"c3.xlarge":  265,
   491  		"c3.2xlarge": 529,
   492  		"c3.4xlarge": 1058,
   493  		"c3.8xlarge": 2117,
   494  
   495  		"m2.xlarge":  296,
   496  		"m2.2xlarge": 592,
   497  		"m2.4xlarge": 1183,
   498  
   499  		"r3.large":   210,
   500  		"r3.xlarge":  420,
   501  		"r3.2xlarge": 840,
   502  		"r3.4xlarge": 1680,
   503  		"r3.8xlarge": 3360,
   504  
   505  		"i2.xlarge":  1018,
   506  		"i2.2xlarge": 2035,
   507  		"i2.4xlarge": 4070,
   508  		"i2.8xlarge": 8140,
   509  
   510  		"hs1.8xlarge": 5570,
   511  
   512  		"t1.micro": 20,
   513  
   514  		"t2.micro":  20,
   515  		"t2.small":  40,
   516  		"t2.medium": 80,
   517  
   518  		"c4.large":   152,
   519  		"c4.xlarge":  304,
   520  		"c4.2xlarge": 608,
   521  		"c4.4xlarge": 1216,
   522  		"c4.8xlarge": 2432,
   523  
   524  		"g2.2xlarge": 898,
   525  	},
   526  	"eu-west-1": { // Ireland.
   527  		"m1.small":  47,
   528  		"m1.medium": 95,
   529  		"m1.large":  190,
   530  		"m1.xlarge": 379,
   531  
   532  		"m3.medium":  77,
   533  		"m3.large":   154,
   534  		"m3.xlarge":  308,
   535  		"m3.2xlarge": 616,
   536  
   537  		"c1.medium": 148,
   538  		"c1.xlarge": 592,
   539  
   540  		"cc2.8xlarge": 2250,
   541  
   542  		"c3.large":   120,
   543  		"c3.xlarge":  239,
   544  		"c3.2xlarge": 478,
   545  		"c3.4xlarge": 956,
   546  		"c3.8xlarge": 1912,
   547  
   548  		"cg1.4xlarge": 2360,
   549  
   550  		"g2.2xlarge": 702,
   551  
   552  		"m2.xlarge":  275,
   553  		"m2.2xlarge": 550,
   554  		"m2.4xlarge": 1100,
   555  
   556  		"cr1.8xlarge": 3750,
   557  
   558  		"r3.large":   195,
   559  		"r3.xlarge":  390,
   560  		"r3.2xlarge": 780,
   561  		"r3.4xlarge": 1560,
   562  		"r3.8xlarge": 3120,
   563  
   564  		"hi1.4xlarge": 3100,
   565  
   566  		"i2.xlarge":  938,
   567  		"i2.2xlarge": 1876,
   568  		"i2.4xlarge": 3751,
   569  		"i2.8xlarge": 7502,
   570  
   571  		"hs1.8xlarge": 4900,
   572  
   573  		"t1.micro": 20,
   574  
   575  		"t2.micro":  14,
   576  		"t2.small":  28,
   577  		"t2.medium": 56,
   578  
   579  		"c4.large":   132,
   580  		"c4.xlarge":  264,
   581  		"c4.2xlarge": 528,
   582  		"c4.4xlarge": 1056,
   583  		"c4.8xlarge": 2112,
   584  	},
   585  	"sa-east-1": { // Sao Paulo.
   586  		"m1.small":  58,
   587  		"m1.medium": 117,
   588  		"m1.large":  233,
   589  		"m1.xlarge": 467,
   590  
   591  		"m3.medium":  95,
   592  		"m3.large":   190,
   593  		"m3.xlarge":  381,
   594  		"m3.2xlarge": 761,
   595  
   596  		"c1.medium": 179,
   597  		"c1.xlarge": 718,
   598  
   599  		"m2.xlarge":  323,
   600  		"m2.2xlarge": 645,
   601  		"m2.4xlarge": 1291,
   602  
   603  		"t1.micro": 27,
   604  
   605  		"t2.micro":  27,
   606  		"t2.small":  54,
   607  		"t2.medium": 108,
   608  
   609  		"c3.large":   163,
   610  		"c3.xlarge":  325,
   611  		"c3.2xlarge": 650,
   612  		"c3.4xlarge": 1300,
   613  		"c3.8xlarge": 2600,
   614  	},
   615  	"us-east-1": { // Northern Virginia.
   616  		"m1.small":  44,
   617  		"m1.medium": 87,
   618  		"m1.large":  175,
   619  		"m1.xlarge": 350,
   620  
   621  		"m3.medium":  70,
   622  		"m3.large":   140,
   623  		"m3.xlarge":  280,
   624  		"m3.2xlarge": 560,
   625  
   626  		"c1.medium": 130,
   627  		"c1.xlarge": 520,
   628  
   629  		"cc2.8xlarge": 2000,
   630  
   631  		"c3.large":   105,
   632  		"c3.xlarge":  210,
   633  		"c3.2xlarge": 420,
   634  		"c3.4xlarge": 840,
   635  		"c3.8xlarge": 1680,
   636  
   637  		"cg1.4xlarge": 2100,
   638  
   639  		"g2.2xlarge": 650,
   640  
   641  		"m2.xlarge":  245,
   642  		"m2.2xlarge": 490,
   643  		"m2.4xlarge": 980,
   644  
   645  		"cr1.8xlarge": 3500,
   646  
   647  		"r3.large":   175,
   648  		"r3.xlarge":  350,
   649  		"r3.2xlarge": 700,
   650  		"r3.4xlarge": 1400,
   651  		"r3.8xlarge": 2800,
   652  
   653  		"hi1.4xlarge": 3100,
   654  
   655  		"i2.xlarge":  853,
   656  		"i2.2xlarge": 1705,
   657  		"i2.4xlarge": 3410,
   658  		"i2.8xlarge": 6820,
   659  
   660  		"hs1.8xlarge": 4600,
   661  
   662  		"t1.micro": 20,
   663  
   664  		"t2.micro":  13,
   665  		"t2.small":  26,
   666  		"t2.medium": 52,
   667  
   668  		"c4.large":   116,
   669  		"c4.xlarge":  232,
   670  		"c4.2xlarge": 464,
   671  		"c4.4xlarge": 928,
   672  		"c4.8xlarge": 1856,
   673  	},
   674  	"us-west-1": { // Northern California.
   675  		"m1.small":  47,
   676  		"m1.medium": 95,
   677  		"m1.large":  190,
   678  		"m1.xlarge": 379,
   679  
   680  		"m3.medium":  77,
   681  		"m3.large":   154,
   682  		"m3.xlarge":  308,
   683  		"m3.2xlarge": 616,
   684  
   685  		"c1.medium": 148,
   686  		"c1.xlarge": 592,
   687  
   688  		"c3.large":   120,
   689  		"c3.xlarge":  239,
   690  		"c3.2xlarge": 478,
   691  		"c3.4xlarge": 956,
   692  		"c3.8xlarge": 1912,
   693  
   694  		"g2.2xlarge": 702,
   695  
   696  		"m2.xlarge":  275,
   697  		"m2.2xlarge": 550,
   698  		"m2.4xlarge": 1100,
   699  
   700  		"r3.large":   195,
   701  		"r3.xlarge":  390,
   702  		"r3.2xlarge": 780,
   703  		"r3.4xlarge": 1560,
   704  		"r3.8xlarge": 3120,
   705  
   706  		"i2.xlarge":  938,
   707  		"i2.2xlarge": 1876,
   708  		"i2.4xlarge": 3751,
   709  		"i2.8xlarge": 7502,
   710  
   711  		"t1.micro": 25,
   712  
   713  		"t2.micro":  17,
   714  		"t2.small":  34,
   715  		"t2.medium": 68,
   716  
   717  		"c4.large":   138,
   718  		"c4.xlarge":  276,
   719  		"c4.2xlarge": 552,
   720  		"c4.4xlarge": 1104,
   721  		"c4.8xlarge": 2208,
   722  	},
   723  	"us-west-2": { // Oregon.
   724  		"m1.small":  44,
   725  		"m1.medium": 87,
   726  		"m1.large":  175,
   727  		"m1.xlarge": 350,
   728  
   729  		"m3.medium":  70,
   730  		"m3.large":   140,
   731  		"m3.xlarge":  280,
   732  		"m3.2xlarge": 560,
   733  
   734  		"c1.medium": 130,
   735  		"c1.xlarge": 520,
   736  
   737  		"cc2.8xlarge": 2000,
   738  
   739  		"c3.large":   105,
   740  		"c3.xlarge":  210,
   741  		"c3.2xlarge": 420,
   742  		"c3.4xlarge": 840,
   743  		"c3.8xlarge": 1680,
   744  
   745  		"g2.2xlarge": 650,
   746  
   747  		"m2.xlarge":   245,
   748  		"m2.2xlarge":  490,
   749  		"m2.4xlarge":  980,
   750  		"cr1.8xlarge": 3500,
   751  
   752  		"r3.large":   175,
   753  		"r3.xlarge":  350,
   754  		"r3.2xlarge": 700,
   755  		"r3.4xlarge": 1400,
   756  		"r3.8xlarge": 2800,
   757  
   758  		"hi1.4xlarge": 3100,
   759  
   760  		"i2.xlarge":  853,
   761  		"i2.2xlarge": 1705,
   762  		"i2.4xlarge": 3410,
   763  		"i2.8xlarge": 6820,
   764  
   765  		"hs1.8xlarge": 4600,
   766  
   767  		"t1.micro": 20,
   768  
   769  		"t2.micro":  13,
   770  		"t2.small":  26,
   771  		"t2.medium": 52,
   772  
   773  		"c4.large":   116,
   774  		"c4.xlarge":  232,
   775  		"c4.2xlarge": 464,
   776  		"c4.4xlarge": 928,
   777  		"c4.8xlarge": 1856,
   778  	},
   779  	"eu-central-1": { // Frankfurt.
   780  		"t2.micro":  15,
   781  		"t2.small":  30,
   782  		"t2.medium": 60,
   783  
   784  		"m3.medium":  83,
   785  		"m3.large":   166,
   786  		"m3.xlarge":  332,
   787  		"m3.2xlarge": 665,
   788  
   789  		"c3.large":   129,
   790  		"c3.xlarge":  258,
   791  		"c3.2xlarge": 516,
   792  		"c3.4xlarge": 1032,
   793  		"c3.8xlarge": 2064,
   794  
   795  		"r3.large":   210,
   796  		"r3.xlarge":  421,
   797  		"r3.2xlarge": 842,
   798  		"r3.4xlarge": 1684,
   799  		"r3.8xlarge": 3369,
   800  
   801  		"i2.xlarge":  1013,
   802  		"i2.2xlarge": 2026,
   803  		"i2.4xlarge": 4051,
   804  		"i2.8xlarge": 8102,
   805  	},
   806  	"us-gov-west-1": { // Isolated region - US GovCloud.
   807  		"t2.micro":  15,
   808  		"t2.small":  31,
   809  		"t2.medium": 62,
   810  
   811  		"m3.medium":  84,
   812  		"m3.large":   168,
   813  		"m3.xlarge":  336,
   814  		"m3.2xlarge": 672,
   815  
   816  		"c3.large":   126,
   817  		"c3.xlarge":  252,
   818  		"c3.2xlarge": 504,
   819  		"c3.4xlarge": 1008,
   820  		"c3.8xlarge": 2016,
   821  
   822  		"r3.large":   210,
   823  		"r3.xlarge":  420,
   824  		"r3.2xlarge": 840,
   825  		"r3.4xlarge": 1680,
   826  		"r3.8xlarge": 3360,
   827  
   828  		"i2.xlarge":  1023,
   829  		"i2.2xlarge": 2046,
   830  		"i2.4xlarge": 4092,
   831  		"i2.8xlarge": 8184,
   832  
   833  		"hs1.8xlarge": 5520,
   834  	},
   835  	"cn-north-1": { // Isolated region - China, Beijing.
   836  		// Instance type information is from
   837  		// http://www.amazonaws.cn/en/ec2/details/
   838  		// TODO (anastasiamac 2015-03-05):
   839  		// To compensate for lack of pricing, we
   840  		// are putting in arbitrary values that reflect the relative costs.
   841  		// This is justified by the fact that, in Juju, we use instance-by-region cost
   842  		// to identify least expensive machine with desired constraints.
   843  		"t1.micro": 1,
   844  
   845  		"m1.small": 2,
   846  
   847  		"m3.medium":  3,
   848  		"m3.large":   5,
   849  		"m3.xlarge":  7,
   850  		"m3.2xlarge": 9,
   851  
   852  		"c3.large":   4,
   853  		"c3.xlarge":  6,
   854  		"c3.2xlarge": 8,
   855  		"c3.4xlarge": 10,
   856  		"c3.8xlarge": 11,
   857  	},
   858  }