github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/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/utils/arch"
    11  )
    12  
    13  var (
    14  	// Type of virtualisation used.
    15  	paravirtual = "pv"
    16  	hvm         = "hvm"
    17  
    18  	// all instance types can run amd64 images, and some can also run
    19  	// i386 ones.
    20  	amd64 = []string{arch.AMD64}
    21  	both  = []string{arch.AMD64, arch.I386}
    22  )
    23  
    24  // allRegions is defined here to allow tests to override the content.
    25  var allRegions = aws.Regions
    26  
    27  // allInstanceTypes holds the relevant attributes of every known
    28  // instance type.
    29  //
    30  // Note that while the EC2 root disk default is 8G, constraints on
    31  // disk for amazon will simply cause the root disk to grow to match
    32  // the constraint
    33  var allInstanceTypes = []instances.InstanceType{
    34  	{ // General purpose, 1st generation.  m1.* instance types are deprecated
    35  		// and should only be used if explicitly requested by name.
    36  		Name:       "m1.small",
    37  		Arches:     both,
    38  		CpuCores:   1,
    39  		CpuPower:   instances.CpuPower(100),
    40  		Mem:        1740,
    41  		VirtType:   &paravirtual,
    42  		Deprecated: true,
    43  	}, {
    44  		Name:       "m1.medium",
    45  		Arches:     both,
    46  		CpuCores:   1,
    47  		CpuPower:   instances.CpuPower(200),
    48  		Mem:        3840,
    49  		VirtType:   &paravirtual,
    50  		Deprecated: true,
    51  	}, {
    52  		Name:       "m1.large",
    53  		Arches:     amd64,
    54  		CpuCores:   2,
    55  		CpuPower:   instances.CpuPower(400),
    56  		Mem:        7680,
    57  		VirtType:   &paravirtual,
    58  		Deprecated: true,
    59  	}, {
    60  		Name:       "m1.xlarge",
    61  		Arches:     amd64,
    62  		CpuCores:   4,
    63  		CpuPower:   instances.CpuPower(800),
    64  		Mem:        15360,
    65  		VirtType:   &paravirtual,
    66  		Deprecated: true,
    67  	},
    68  	// M4 instances are the latest generation of General Purpose
    69  	// Instances. This family provides a balance of compute, memory,
    70  	// and network resources, and it is a good choice for many
    71  	// applications.
    72  	{
    73  		Name:     "m4.large",
    74  		Arches:   amd64,
    75  		CpuCores: 2,
    76  		CpuPower: instances.CpuPower(650),
    77  		Mem:      8192,
    78  		VirtType: &hvm,
    79  	},
    80  	{
    81  		Name:     "m4.xlarge",
    82  		Arches:   amd64,
    83  		CpuCores: 4,
    84  		CpuPower: instances.CpuPower(1300),
    85  		Mem:      16384,
    86  		VirtType: &hvm,
    87  	},
    88  	{
    89  		Name:     "m4.2xlarge",
    90  		Arches:   amd64,
    91  		CpuCores: 8,
    92  		CpuPower: instances.CpuPower(2600),
    93  		Mem:      32768,
    94  		VirtType: &hvm,
    95  	},
    96  	{
    97  		Name:     "m4.4xlarge",
    98  		Arches:   amd64,
    99  		CpuCores: 16,
   100  		CpuPower: instances.CpuPower(5350),
   101  		Mem:      65536,
   102  		VirtType: &hvm,
   103  	},
   104  	{
   105  		Name:     "m4.10xlarge",
   106  		Arches:   amd64,
   107  		CpuCores: 40,
   108  		CpuPower: instances.CpuPower(12450),
   109  		Mem:      163840,
   110  		VirtType: &hvm,
   111  	},
   112  
   113  	{ // General purpose, 2nd generation.
   114  		Name:     "m3.medium",
   115  		Arches:   amd64,
   116  		CpuCores: 1,
   117  		CpuPower: instances.CpuPower(300),
   118  		Mem:      3840,
   119  		VirtType: &paravirtual,
   120  	}, {
   121  		Name:     "m3.large",
   122  		Arches:   amd64,
   123  		CpuCores: 2,
   124  		CpuPower: instances.CpuPower(650),
   125  		Mem:      7680,
   126  		VirtType: &paravirtual,
   127  	}, {
   128  		Name:     "m3.xlarge",
   129  		Arches:   amd64,
   130  		CpuCores: 4,
   131  		CpuPower: instances.CpuPower(1300),
   132  		Mem:      15360,
   133  		VirtType: &paravirtual,
   134  	}, {
   135  		Name:     "m3.2xlarge",
   136  		Arches:   amd64,
   137  		CpuCores: 8,
   138  		CpuPower: instances.CpuPower(2600),
   139  		Mem:      30720,
   140  		VirtType: &paravirtual,
   141  	},
   142  
   143  	{ // Compute-optimized, 1st generation.
   144  		Name:     "c1.medium",
   145  		Arches:   both,
   146  		CpuCores: 2,
   147  		CpuPower: instances.CpuPower(500),
   148  		Mem:      1740,
   149  		VirtType: &paravirtual,
   150  	}, {
   151  		Name:     "c1.xlarge",
   152  		Arches:   amd64,
   153  		CpuCores: 8,
   154  		CpuPower: instances.CpuPower(2000),
   155  		Mem:      7168,
   156  		VirtType: &paravirtual,
   157  	}, {
   158  		Name:     "cc2.8xlarge",
   159  		Arches:   amd64,
   160  		CpuCores: 16,
   161  		CpuPower: instances.CpuPower(8800),
   162  		Mem:      61952,
   163  		VirtType: &hvm,
   164  	},
   165  
   166  	{ // Compute-optimized, 2nd generation.
   167  		Name:     "c3.large",
   168  		Arches:   amd64,
   169  		CpuCores: 2,
   170  		CpuPower: instances.CpuPower(700),
   171  		Mem:      3840,
   172  		VirtType: &paravirtual,
   173  	}, {
   174  		Name:     "c3.xlarge",
   175  		Arches:   amd64,
   176  		CpuCores: 4,
   177  		CpuPower: instances.CpuPower(1400),
   178  		Mem:      7680,
   179  		VirtType: &paravirtual,
   180  	}, {
   181  		Name:     "c3.2xlarge",
   182  		Arches:   amd64,
   183  		CpuCores: 8,
   184  		CpuPower: instances.CpuPower(2800),
   185  		Mem:      15360,
   186  		VirtType: &paravirtual,
   187  	}, {
   188  		Name:     "c3.4xlarge",
   189  		Arches:   amd64,
   190  		CpuCores: 16,
   191  		CpuPower: instances.CpuPower(5500),
   192  		Mem:      30720,
   193  		VirtType: &paravirtual,
   194  	}, {
   195  		Name:     "c3.8xlarge",
   196  		Arches:   amd64,
   197  		CpuCores: 32,
   198  		CpuPower: instances.CpuPower(10800),
   199  		Mem:      61440,
   200  		VirtType: &paravirtual,
   201  	},
   202  
   203  	{ // GPU instances, 1st generation.
   204  		Name:     "cg1.4xlarge",
   205  		Arches:   amd64,
   206  		CpuCores: 8,
   207  		CpuPower: instances.CpuPower(3350),
   208  		Mem:      22528,
   209  		VirtType: &hvm,
   210  	},
   211  
   212  	{ // GPU instances, 2nd generation.
   213  		Name:     "g2.2xlarge",
   214  		Arches:   amd64,
   215  		CpuCores: 8,
   216  		CpuPower: instances.CpuPower(2600),
   217  		Mem:      15360,
   218  		VirtType: &hvm,
   219  	},
   220  
   221  	{ // Memory-optimized, 1st generation.
   222  		Name:     "m2.xlarge",
   223  		Arches:   amd64,
   224  		CpuCores: 2,
   225  		CpuPower: instances.CpuPower(650),
   226  		Mem:      17408,
   227  		VirtType: &paravirtual,
   228  	}, {
   229  		Name:     "m2.2xlarge",
   230  		Arches:   amd64,
   231  		CpuCores: 4,
   232  		CpuPower: instances.CpuPower(1300),
   233  		Mem:      34816,
   234  		VirtType: &paravirtual,
   235  	}, {
   236  		Name:     "m2.4xlarge",
   237  		Arches:   amd64,
   238  		CpuCores: 8,
   239  		CpuPower: instances.CpuPower(2600),
   240  		Mem:      69632,
   241  		VirtType: &paravirtual,
   242  	}, {
   243  		Name:     "cr1.8xlarge",
   244  		Arches:   amd64,
   245  		CpuCores: 16,
   246  		CpuPower: instances.CpuPower(8800),
   247  		Mem:      249856,
   248  		VirtType: &hvm,
   249  	},
   250  
   251  	{ // Memory-optimized, 2nd generation.
   252  		Name:     "r3.large",
   253  		Arches:   amd64,
   254  		CpuCores: 2,
   255  		CpuPower: instances.CpuPower(650),
   256  		Mem:      15616,
   257  		VirtType: &hvm,
   258  	}, {
   259  		Name:     "r3.xlarge",
   260  		Arches:   amd64,
   261  		CpuCores: 4,
   262  		CpuPower: instances.CpuPower(1300),
   263  		Mem:      31232,
   264  		VirtType: &hvm,
   265  	}, {
   266  		Name:     "r3.2xlarge",
   267  		Arches:   amd64,
   268  		CpuCores: 8,
   269  		CpuPower: instances.CpuPower(2600),
   270  		Mem:      62464,
   271  		VirtType: &hvm,
   272  	}, {
   273  		Name:     "r3.4xlarge",
   274  		Arches:   amd64,
   275  		CpuCores: 16,
   276  		CpuPower: instances.CpuPower(5200),
   277  		Mem:      124928,
   278  		VirtType: &hvm,
   279  	}, {
   280  		Name:     "r3.8xlarge",
   281  		Arches:   amd64,
   282  		CpuCores: 32,
   283  		CpuPower: instances.CpuPower(10400),
   284  		Mem:      249856,
   285  		VirtType: &hvm,
   286  	},
   287  
   288  	{ // Storage-optimized, 1st generation.
   289  		Name:     "hi1.4xlarge",
   290  		Arches:   amd64,
   291  		CpuCores: 16,
   292  		CpuPower: instances.CpuPower(3500),
   293  		Mem:      61952,
   294  		VirtType: &paravirtual,
   295  	},
   296  
   297  	{ // Storage-optimized, 2nd generation.
   298  		Name:     "i2.xlarge",
   299  		Arches:   amd64,
   300  		CpuCores: 4,
   301  		CpuPower: instances.CpuPower(1400),
   302  		Mem:      31232,
   303  		VirtType: &hvm,
   304  	}, {
   305  		Name:     "i2.2xlarge",
   306  		Arches:   amd64,
   307  		CpuCores: 8,
   308  		CpuPower: instances.CpuPower(2700),
   309  		Mem:      62464,
   310  		VirtType: &hvm,
   311  	}, {
   312  		Name:     "i2.4xlarge",
   313  		Arches:   amd64,
   314  		CpuCores: 16,
   315  		CpuPower: instances.CpuPower(5300),
   316  		Mem:      124928,
   317  		VirtType: &hvm,
   318  	}, {
   319  		Name:     "i2.8xlarge",
   320  		Arches:   amd64,
   321  		CpuCores: 32,
   322  		CpuPower: instances.CpuPower(10400),
   323  		Mem:      249856,
   324  		VirtType: &hvm,
   325  	}, {
   326  		Name:     "hs1.8xlarge",
   327  		Arches:   amd64,
   328  		CpuCores: 16,
   329  		CpuPower: instances.CpuPower(3500),
   330  		Mem:      119808,
   331  		VirtType: &paravirtual,
   332  	},
   333  
   334  	{ // Tiny-weeny.
   335  		Name:     "t1.micro",
   336  		Arches:   both,
   337  		CpuCores: 1,
   338  		// Burstable baseline is 20%
   339  		CpuPower: instances.CpuPower(20),
   340  		Mem:      613,
   341  		VirtType: &paravirtual,
   342  	},
   343  
   344  	{ // General Purpose, 3rd generation.
   345  		Name:     "t2.micro",
   346  		Arches:   amd64,
   347  		CpuCores: 1,
   348  		Mem:      1024,
   349  		// Burstable baseline is 10% (from http://aws.amazon.com/ec2/faqs/#burst)
   350  		CpuPower: instances.CpuPower(10),
   351  		VirtType: &hvm,
   352  	},
   353  	{ // General Purpose, 3rd generation.
   354  		Name:     "t2.small",
   355  		Arches:   amd64,
   356  		CpuCores: 1,
   357  		Mem:      2048,
   358  		// Burstable baseline is 20% (from http://aws.amazon.com/ec2/faqs/#burst)
   359  		CpuPower: instances.CpuPower(20),
   360  		VirtType: &hvm,
   361  	},
   362  	{ // General Purpose, 3rd generation.
   363  		Name:     "t2.medium",
   364  		Arches:   amd64,
   365  		CpuCores: 2,
   366  		Mem:      4096,
   367  		// Burstable baseline is 40% (from http://aws.amazon.com/ec2/faqs/#burst)
   368  		CpuPower: instances.CpuPower(40),
   369  		VirtType: &hvm,
   370  	},
   371  
   372  	{ // Compute-optimized, 3rd generation.
   373  		Name:     "c4.large",
   374  		Arches:   amd64,
   375  		CpuCores: 2,
   376  		Mem:      3840,
   377  		CpuPower: instances.CpuPower(800),
   378  		VirtType: &hvm,
   379  	}, {
   380  		Name:     "c4.xlarge",
   381  		Arches:   amd64,
   382  		CpuCores: 4,
   383  		Mem:      7680,
   384  		CpuPower: instances.CpuPower(1600),
   385  		VirtType: &hvm,
   386  	}, {
   387  		Name:     "c4.2xlarge",
   388  		Arches:   amd64,
   389  		CpuCores: 8,
   390  		Mem:      15360,
   391  		CpuPower: instances.CpuPower(3100),
   392  		VirtType: &hvm,
   393  	}, {
   394  		Name:     "c4.4xlarge",
   395  		Arches:   amd64,
   396  		CpuCores: 16,
   397  		Mem:      30720,
   398  		CpuPower: instances.CpuPower(6200),
   399  		VirtType: &hvm,
   400  	}, {
   401  		Name:   "c4.8xlarge",
   402  		Arches: amd64,
   403  		// The source of this information at http://aws.amazon.com/ec2/instance-types/
   404  		CpuCores: 36,
   405  		Mem:      61440,
   406  		CpuPower: instances.CpuPower(13200),
   407  		VirtType: &hvm,
   408  	},
   409  }
   410  
   411  type instanceTypeCost map[string]uint64
   412  type regionCosts map[string]instanceTypeCost
   413  
   414  // allRegionCosts holds the cost in USDe-3/hour for each available instance
   415  // type in each region.
   416  var allRegionCosts = regionCosts{
   417  	"ap-northeast-1": { // Tokyo.
   418  		"m1.small":  61,
   419  		"m1.medium": 122,
   420  		"m1.large":  243,
   421  		"m1.xlarge": 486,
   422  
   423  		"m3.medium":  101,
   424  		"m3.large":   203,
   425  		"m3.xlarge":  405,
   426  		"m3.2xlarge": 810,
   427  
   428  		"m4.large":    174,
   429  		"m4.xlarge":   348,
   430  		"m4.2xlarge":  695,
   431  		"m4.4xlarge":  1391,
   432  		"m4.10xlarge": 3477,
   433  
   434  		"c1.medium": 158,
   435  		"c1.xlarge": 632,
   436  
   437  		"cc2.8xlarge": 2349,
   438  
   439  		"c3.large":   128,
   440  		"c3.xlarge":  255,
   441  		"c3.2xlarge": 511,
   442  		"c3.4xlarge": 1021,
   443  		"c3.8xlarge": 2043,
   444  
   445  		"g2.2xlarge": 898,
   446  
   447  		"m2.xlarge":  287,
   448  		"m2.2xlarge": 575,
   449  		"m2.4xlarge": 1150,
   450  
   451  		"cr1.8xlarge": 4105,
   452  
   453  		"r3.large":   210,
   454  		"r3.xlarge":  420,
   455  		"r3.2xlarge": 840,
   456  		"r3.4xlarge": 1680,
   457  		"r3.8xlarge": 3360,
   458  
   459  		"hi1.4xlarge": 3276,
   460  
   461  		"i2.xlarge":  1001,
   462  		"i2.2xlarge": 2001,
   463  		"i2.4xlarge": 4002,
   464  		"i2.8xlarge": 8004,
   465  
   466  		"hs1.8xlarge": 5400,
   467  
   468  		"t1.micro": 26,
   469  
   470  		"t2.micro":  20,
   471  		"t2.small":  40,
   472  		"t2.medium": 80,
   473  
   474  		"c4.large":   147,
   475  		"c4.xlarge":  294,
   476  		"c4.2xlarge": 588,
   477  		"c4.4xlarge": 1176,
   478  		"c4.8xlarge": 2352,
   479  	},
   480  	"ap-northeast-2": { // Seoul.
   481  		"t2.nano":   10,
   482  		"t2.micro":  20,
   483  		"t2.small":  40,
   484  		"t2.medium": 80,
   485  		"t2.large":  160,
   486  
   487  		"m4.large":    165,
   488  		"m4.xlarge":   331,
   489  		"m4.2xlarge":  660,
   490  		"m4.4xlarge":  1321,
   491  		"m4.10xlarge": 3303,
   492  
   493  		"c4.large":   120,
   494  		"c4.xlarge":  239,
   495  		"c4.2xlarge": 478,
   496  		"c4.4xlarge": 955,
   497  		"c4.8xlarge": 1910,
   498  
   499  		"r3.large":   200,
   500  		"r3.xlarge":  399,
   501  		"r3.2xlarge": 798,
   502  		"r3.4xlarge": 1596,
   503  		"r3.8xlarge": 3192,
   504  
   505  		"i2.xlarge":  1001,
   506  		"i2.2xlarge": 2001,
   507  		"i2.4xlarge": 4002,
   508  		"i2.8xlarge": 8004,
   509  		// TODO(gz): Add d2 types below per lp:1535838
   510  		//"d2.xlarge":  844,
   511  		//"d2.2xlarge": 1688,
   512  		//"d2.4xlarge": 3376,
   513  		//"d2.8xlarge": 6752,
   514  	},
   515  	"ap-southeast-1": { // Singapore.
   516  		"m1.small":  58,
   517  		"m1.medium": 117,
   518  		"m1.large":  233,
   519  		"m1.xlarge": 467,
   520  
   521  		"m3.medium":  98,
   522  		"m3.large":   196,
   523  		"m3.xlarge":  392,
   524  		"m3.2xlarge": 784,
   525  
   526  		"m4.large":    178,
   527  		"m4.xlarge":   355,
   528  		"m4.2xlarge":  711,
   529  		"m4.4xlarge":  1421,
   530  		"m4.10xlarge": 3553,
   531  
   532  		"c1.medium": 164,
   533  		"c1.xlarge": 655,
   534  
   535  		"c3.large":   132,
   536  		"c3.xlarge":  265,
   537  		"c3.2xlarge": 529,
   538  		"c3.4xlarge": 1058,
   539  		"c3.8xlarge": 2117,
   540  
   541  		"m2.xlarge":  296,
   542  		"m2.2xlarge": 592,
   543  		"m2.4xlarge": 1183,
   544  
   545  		"r3.large":   210,
   546  		"r3.xlarge":  420,
   547  		"r3.2xlarge": 840,
   548  		"r3.4xlarge": 1680,
   549  		"r3.8xlarge": 3360,
   550  
   551  		"i2.xlarge":  1018,
   552  		"i2.2xlarge": 2035,
   553  		"i2.4xlarge": 4070,
   554  		"i2.8xlarge": 8140,
   555  
   556  		"hs1.8xlarge": 5570,
   557  
   558  		"t1.micro": 20,
   559  
   560  		"t2.micro":  20,
   561  		"t2.small":  40,
   562  		"t2.medium": 80,
   563  
   564  		"c4.large":   152,
   565  		"c4.xlarge":  304,
   566  		"c4.2xlarge": 608,
   567  		"c4.4xlarge": 1216,
   568  		"c4.8xlarge": 2432,
   569  
   570  		"g2.2xlarge": 1000,
   571  	},
   572  	"ap-southeast-2": { // Sydney.
   573  		"m1.small":  58,
   574  		"m1.medium": 117,
   575  		"m1.large":  233,
   576  		"m1.xlarge": 467,
   577  
   578  		"m3.medium":  98,
   579  		"m3.large":   196,
   580  		"m3.xlarge":  392,
   581  		"m3.2xlarge": 784,
   582  
   583  		"m4.large":    168,
   584  		"m4.xlarge":   336,
   585  		"m4.2xlarge":  673,
   586  		"m4.4xlarge":  1345,
   587  		"m4.10xlarge": 3363,
   588  
   589  		"c1.medium": 164,
   590  		"c1.xlarge": 655,
   591  
   592  		"c3.large":   132,
   593  		"c3.xlarge":  265,
   594  		"c3.2xlarge": 529,
   595  		"c3.4xlarge": 1058,
   596  		"c3.8xlarge": 2117,
   597  
   598  		"m2.xlarge":  296,
   599  		"m2.2xlarge": 592,
   600  		"m2.4xlarge": 1183,
   601  
   602  		"r3.large":   210,
   603  		"r3.xlarge":  420,
   604  		"r3.2xlarge": 840,
   605  		"r3.4xlarge": 1680,
   606  		"r3.8xlarge": 3360,
   607  
   608  		"i2.xlarge":  1018,
   609  		"i2.2xlarge": 2035,
   610  		"i2.4xlarge": 4070,
   611  		"i2.8xlarge": 8140,
   612  
   613  		"hs1.8xlarge": 5570,
   614  
   615  		"t1.micro": 20,
   616  
   617  		"t2.micro":  20,
   618  		"t2.small":  40,
   619  		"t2.medium": 80,
   620  
   621  		"c4.large":   152,
   622  		"c4.xlarge":  304,
   623  		"c4.2xlarge": 608,
   624  		"c4.4xlarge": 1216,
   625  		"c4.8xlarge": 2432,
   626  
   627  		"g2.2xlarge": 898,
   628  	},
   629  	"eu-west-1": { // Ireland.
   630  		"m1.small":  47,
   631  		"m1.medium": 95,
   632  		"m1.large":  190,
   633  		"m1.xlarge": 379,
   634  
   635  		"m3.medium":  77,
   636  		"m3.large":   154,
   637  		"m3.xlarge":  308,
   638  		"m3.2xlarge": 616,
   639  
   640  		"m4.large":    132,
   641  		"m4.xlarge":   264,
   642  		"m4.2xlarge":  528,
   643  		"m4.4xlarge":  1056,
   644  		"m4.10xlarge": 2641,
   645  
   646  		"c1.medium": 148,
   647  		"c1.xlarge": 592,
   648  
   649  		"cc2.8xlarge": 2250,
   650  
   651  		"c3.large":   120,
   652  		"c3.xlarge":  239,
   653  		"c3.2xlarge": 478,
   654  		"c3.4xlarge": 956,
   655  		"c3.8xlarge": 1912,
   656  
   657  		"cg1.4xlarge": 2360,
   658  
   659  		"g2.2xlarge": 702,
   660  
   661  		"m2.xlarge":  275,
   662  		"m2.2xlarge": 550,
   663  		"m2.4xlarge": 1100,
   664  
   665  		"cr1.8xlarge": 3750,
   666  
   667  		"r3.large":   195,
   668  		"r3.xlarge":  390,
   669  		"r3.2xlarge": 780,
   670  		"r3.4xlarge": 1560,
   671  		"r3.8xlarge": 3120,
   672  
   673  		"hi1.4xlarge": 3100,
   674  
   675  		"i2.xlarge":  938,
   676  		"i2.2xlarge": 1876,
   677  		"i2.4xlarge": 3751,
   678  		"i2.8xlarge": 7502,
   679  
   680  		"hs1.8xlarge": 4900,
   681  
   682  		"t1.micro": 20,
   683  
   684  		"t2.micro":  14,
   685  		"t2.small":  28,
   686  		"t2.medium": 56,
   687  
   688  		"c4.large":   132,
   689  		"c4.xlarge":  264,
   690  		"c4.2xlarge": 528,
   691  		"c4.4xlarge": 1056,
   692  		"c4.8xlarge": 2112,
   693  	},
   694  	"sa-east-1": { // Sao Paulo.
   695  		"m1.small":  58,
   696  		"m1.medium": 117,
   697  		"m1.large":  233,
   698  		"m1.xlarge": 467,
   699  
   700  		"m3.medium":  95,
   701  		"m3.large":   190,
   702  		"m3.xlarge":  381,
   703  		"m3.2xlarge": 761,
   704  
   705  		"c1.medium": 179,
   706  		"c1.xlarge": 718,
   707  
   708  		"m2.xlarge":  323,
   709  		"m2.2xlarge": 645,
   710  		"m2.4xlarge": 1291,
   711  
   712  		"t1.micro": 27,
   713  
   714  		"t2.micro":  27,
   715  		"t2.small":  54,
   716  		"t2.medium": 108,
   717  
   718  		"c3.large":   163,
   719  		"c3.xlarge":  325,
   720  		"c3.2xlarge": 650,
   721  		"c3.4xlarge": 1300,
   722  		"c3.8xlarge": 2600,
   723  	},
   724  	"us-east-1": { // Northern Virginia.
   725  		"m1.small":  44,
   726  		"m1.medium": 87,
   727  		"m1.large":  175,
   728  		"m1.xlarge": 350,
   729  
   730  		"m3.medium":  70,
   731  		"m3.large":   140,
   732  		"m3.xlarge":  280,
   733  		"m3.2xlarge": 560,
   734  
   735  		"m4.large":    120,
   736  		"m4.xlarge":   239,
   737  		"m4.2xlarge":  479,
   738  		"m4.4xlarge":  958,
   739  		"m4.10xlarge": 2394,
   740  
   741  		"c1.medium": 130,
   742  		"c1.xlarge": 520,
   743  
   744  		"cc2.8xlarge": 2000,
   745  
   746  		"c3.large":   105,
   747  		"c3.xlarge":  210,
   748  		"c3.2xlarge": 420,
   749  		"c3.4xlarge": 840,
   750  		"c3.8xlarge": 1680,
   751  
   752  		"cg1.4xlarge": 2100,
   753  
   754  		"g2.2xlarge": 650,
   755  
   756  		"m2.xlarge":  245,
   757  		"m2.2xlarge": 490,
   758  		"m2.4xlarge": 980,
   759  
   760  		"cr1.8xlarge": 3500,
   761  
   762  		"r3.large":   175,
   763  		"r3.xlarge":  350,
   764  		"r3.2xlarge": 700,
   765  		"r3.4xlarge": 1400,
   766  		"r3.8xlarge": 2800,
   767  
   768  		"hi1.4xlarge": 3100,
   769  
   770  		"i2.xlarge":  853,
   771  		"i2.2xlarge": 1705,
   772  		"i2.4xlarge": 3410,
   773  		"i2.8xlarge": 6820,
   774  
   775  		"hs1.8xlarge": 4600,
   776  
   777  		"t1.micro": 20,
   778  
   779  		"t2.micro":  13,
   780  		"t2.small":  26,
   781  		"t2.medium": 52,
   782  
   783  		"c4.large":   116,
   784  		"c4.xlarge":  232,
   785  		"c4.2xlarge": 464,
   786  		"c4.4xlarge": 928,
   787  		"c4.8xlarge": 1856,
   788  	},
   789  	"us-west-1": { // Northern California.
   790  		"m1.small":  47,
   791  		"m1.medium": 95,
   792  		"m1.large":  190,
   793  		"m1.xlarge": 379,
   794  
   795  		"m3.medium":  77,
   796  		"m3.large":   154,
   797  		"m3.xlarge":  308,
   798  		"m3.2xlarge": 616,
   799  
   800  		"m4.large":    140,
   801  		"m4.xlarge":   279,
   802  		"m4.2xlarge":  559,
   803  		"m4.4xlarge":  1117,
   804  		"m4.10xlarge": 2793,
   805  
   806  		"c1.medium": 148,
   807  		"c1.xlarge": 592,
   808  
   809  		"c3.large":   120,
   810  		"c3.xlarge":  239,
   811  		"c3.2xlarge": 478,
   812  		"c3.4xlarge": 956,
   813  		"c3.8xlarge": 1912,
   814  
   815  		"g2.2xlarge": 702,
   816  
   817  		"m2.xlarge":  275,
   818  		"m2.2xlarge": 550,
   819  		"m2.4xlarge": 1100,
   820  
   821  		"r3.large":   195,
   822  		"r3.xlarge":  390,
   823  		"r3.2xlarge": 780,
   824  		"r3.4xlarge": 1560,
   825  		"r3.8xlarge": 3120,
   826  
   827  		"i2.xlarge":  938,
   828  		"i2.2xlarge": 1876,
   829  		"i2.4xlarge": 3751,
   830  		"i2.8xlarge": 7502,
   831  
   832  		"t1.micro": 25,
   833  
   834  		"t2.micro":  17,
   835  		"t2.small":  34,
   836  		"t2.medium": 68,
   837  
   838  		"c4.large":   138,
   839  		"c4.xlarge":  276,
   840  		"c4.2xlarge": 552,
   841  		"c4.4xlarge": 1104,
   842  		"c4.8xlarge": 2208,
   843  	},
   844  	"us-west-2": { // Oregon.
   845  		"m1.small":  44,
   846  		"m1.medium": 87,
   847  		"m1.large":  175,
   848  		"m1.xlarge": 350,
   849  
   850  		"m3.medium":  70,
   851  		"m3.large":   140,
   852  		"m3.xlarge":  280,
   853  		"m3.2xlarge": 560,
   854  
   855  		"m4.large":    120,
   856  		"m4.xlarge":   239,
   857  		"m4.2xlarge":  479,
   858  		"m4.4xlarge":  958,
   859  		"m4.10xlarge": 2394,
   860  
   861  		"c1.medium": 130,
   862  		"c1.xlarge": 520,
   863  
   864  		"cc2.8xlarge": 2000,
   865  
   866  		"c3.large":   105,
   867  		"c3.xlarge":  210,
   868  		"c3.2xlarge": 420,
   869  		"c3.4xlarge": 840,
   870  		"c3.8xlarge": 1680,
   871  
   872  		"g2.2xlarge": 650,
   873  
   874  		"m2.xlarge":   245,
   875  		"m2.2xlarge":  490,
   876  		"m2.4xlarge":  980,
   877  		"cr1.8xlarge": 3500,
   878  
   879  		"r3.large":   175,
   880  		"r3.xlarge":  350,
   881  		"r3.2xlarge": 700,
   882  		"r3.4xlarge": 1400,
   883  		"r3.8xlarge": 2800,
   884  
   885  		"hi1.4xlarge": 3100,
   886  
   887  		"i2.xlarge":  853,
   888  		"i2.2xlarge": 1705,
   889  		"i2.4xlarge": 3410,
   890  		"i2.8xlarge": 6820,
   891  
   892  		"hs1.8xlarge": 4600,
   893  
   894  		"t1.micro": 20,
   895  
   896  		"t2.micro":  13,
   897  		"t2.small":  26,
   898  		"t2.medium": 52,
   899  
   900  		"c4.large":   116,
   901  		"c4.xlarge":  232,
   902  		"c4.2xlarge": 464,
   903  		"c4.4xlarge": 928,
   904  		"c4.8xlarge": 1856,
   905  	},
   906  	"eu-central-1": { // Frankfurt.
   907  		"t2.micro":  15,
   908  		"t2.small":  30,
   909  		"t2.medium": 60,
   910  		"t2.large":  120,
   911  
   912  		"m3.medium":  79,
   913  		"m3.large":   158,
   914  		"m3.xlarge":  315,
   915  		"m3.2xlarge": 632,
   916  
   917  		"m4.large":    143,
   918  		"m4.xlarge":   285,
   919  		"m4.2xlarge":  570,
   920  		"m4.4xlarge":  1140,
   921  		"m4.10xlarge": 2850,
   922  
   923  		"c3.large":   129,
   924  		"c3.xlarge":  258,
   925  		"c3.2xlarge": 516,
   926  		"c3.4xlarge": 1032,
   927  		"c3.8xlarge": 2064,
   928  
   929  		"c4.large":   134,
   930  		"c4.xlarge":  267,
   931  		"c4.2xlarge": 534,
   932  		"c4.4xlarge": 1069,
   933  		"c4.8xlarge": 2138,
   934  
   935  		"r3.large":   200,
   936  		"r3.xlarge":  420,
   937  		"r3.2xlarge": 800,
   938  		"r3.4xlarge": 1600,
   939  		"r3.8xlarge": 3201,
   940  
   941  		"i2.xlarge":  1013,
   942  		"i2.2xlarge": 2026,
   943  		"i2.4xlarge": 4051,
   944  		"i2.8xlarge": 8102,
   945  	},
   946  	"us-gov-west-1": { // Isolated region - US GovCloud.
   947  		"t2.micro":  15,
   948  		"t2.small":  31,
   949  		"t2.medium": 62,
   950  
   951  		"m3.medium":  84,
   952  		"m3.large":   168,
   953  		"m3.xlarge":  336,
   954  		"m3.2xlarge": 672,
   955  
   956  		"c3.large":   126,
   957  		"c3.xlarge":  252,
   958  		"c3.2xlarge": 504,
   959  		"c3.4xlarge": 1008,
   960  		"c3.8xlarge": 2016,
   961  
   962  		"r3.large":   210,
   963  		"r3.xlarge":  420,
   964  		"r3.2xlarge": 840,
   965  		"r3.4xlarge": 1680,
   966  		"r3.8xlarge": 3360,
   967  
   968  		"i2.xlarge":  1023,
   969  		"i2.2xlarge": 2046,
   970  		"i2.4xlarge": 4092,
   971  		"i2.8xlarge": 8184,
   972  
   973  		"hs1.8xlarge": 5520,
   974  	},
   975  	"cn-north-1": { // Isolated region - China, Beijing.
   976  		// Instance type information is from
   977  		// http://www.amazonaws.cn/en/ec2/details/
   978  		// TODO (anastasiamac 2015-03-05):
   979  		// To compensate for lack of pricing, we
   980  		// are putting in arbitrary values that reflect the relative costs.
   981  		// This is justified by the fact that, in Juju, we use instance-by-region cost
   982  		// to identify least expensive machine with desired constraints.
   983  		"t1.micro": 1,
   984  
   985  		"m1.small": 2,
   986  
   987  		"m3.medium":  3,
   988  		"m3.large":   5,
   989  		"m3.xlarge":  7,
   990  		"m3.2xlarge": 9,
   991  
   992  		"c3.large":   4,
   993  		"c3.xlarge":  6,
   994  		"c3.2xlarge": 8,
   995  		"c3.4xlarge": 10,
   996  		"c3.8xlarge": 11,
   997  	},
   998  }