Scalr\Modules\Platforms\Ec2\Ec2PlatformModule::getInstanceTypes PHP Method

getInstanceTypes() public method

See also: Scalr\Modules\PlatformModuleInterface::getInstanceTypes()
public getInstanceTypes ( Scalr_Environment $env = null, $cloudLocation = null, $details = false )
$env Scalr_Environment
    public function getInstanceTypes(\Scalr_Environment $env = null, $cloudLocation = null, $details = false)
    {
        //http://aws.amazon.com/amazon-linux-ami/instance-type-matrix/
        //http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html
        //http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html
        static $restrictions = ['t1' => ['ebs' => true, 'hvm' => false], 't2' => ['t2.nano' => ['ebs' => true, 'hvm' => true, 'vpc' => true], 't2.micro' => ['ebs' => true, 'hvm' => true, 'vpc' => true], 't2.small' => ['ebs' => true, 'hvm' => true, 'vpc' => true], 't2.medium' => ['ebs' => true, 'hvm' => true, 'vpc' => true], 't2.large' => ['ebs' => true, 'hvm' => true, 'vpc' => true, 'x64' => true]], 'm1' => ['m1.small' => ['hvm' => false], 'm1.medium' => ['hvm' => false], 'm1.large' => ['hvm' => false, 'x64' => true], 'm1.xlarge' => ['hvm' => false, 'x64' => true]], 'm2' => ['hvm' => false, 'x64' => true], 'm3' => ['x64' => true], 'm4' => ['ebs' => true, 'x64' => true, 'vpc' => true, 'hvm' => true], 'c1' => ['c1.medium' => ['hvm' => false], 'c1.xlarge' => ['hvm' => false, 'x64' => true]], 'c4' => ['ebs' => true, 'hvm' => true, 'vpc' => true, 'x64' => true], 'c3' => ['x64' => true], 'd2' => ['hvm' => true, 'x64' => true], 'r3' => ['hvm' => true, 'x64' => true], 'i2' => ['hvm' => true, 'x64' => true], 'g2' => ['ebs' => true, 'hvm' => true, 'x64' => true], 'hs1' => ['x64' => true], 'cc2' => ['hvm' => true, 'x64' => true], 'cg1' => ['hvm' => true, 'x64' => true], 'hi1' => ['x64' => true], 'cr1' => ['ebs' => true, 'hvm' => true, 'x64' => true]];
        static $definition = array('t1.micro' => array('name' => 't1.micro', 'ram' => '625', 'vcpus' => '1', 'disk' => '', 'type' => '', 'note' => 'SHARED CPU'), 't2.nano' => array('name' => 't2.nano', 'ram' => '512', 'vcpus' => '1', 'disk' => '', 'type' => '', 'note' => 'SHARED CPU', 'ebsencryption' => true), 't2.micro' => array('name' => 't2.micro', 'ram' => '1024', 'vcpus' => '1', 'disk' => '', 'type' => '', 'note' => 'SHARED CPU', 'ebsencryption' => true), 't2.small' => array('name' => 't2.small', 'ram' => '2048', 'vcpus' => '1', 'disk' => '', 'type' => '', 'note' => 'SHARED CPU', 'ebsencryption' => true), 't2.medium' => array('name' => 't2.medium', 'ram' => '4096', 'vcpus' => '2', 'disk' => '', 'type' => '', 'note' => 'SHARED CPU', 'ebsencryption' => true), 't2.large' => array('name' => 't2.large', 'ram' => '8192', 'vcpus' => '2', 'disk' => '', 'type' => '', 'note' => 'SHARED CPU', 'ebsencryption' => true), 'm1.small' => array('name' => 'm1.small', 'ram' => '1740', 'vcpus' => '1', 'disk' => '160', 'type' => 'HDD', 'instancestore' => ['number' => 1, 'size' => 160]), 'm1.medium' => array('name' => 'm1.medium', 'ram' => '3840', 'vcpus' => '1', 'disk' => '410', 'type' => 'HDD', 'instancestore' => ['number' => 1, 'size' => 410]), 'm1.large' => array('name' => 'm1.large', 'ram' => '7680', 'vcpus' => '2', 'disk' => '840', 'type' => 'HDD', 'ebsoptimized' => true, 'instancestore' => ['number' => 2, 'size' => 420]), 'm1.xlarge' => array('name' => 'm1.xlarge', 'ram' => '15360', 'vcpus' => '4', 'disk' => '1680', 'type' => 'HDD', 'ebsoptimized' => true, 'instancestore' => ['number' => 4, 'size' => 420]), 'm2.xlarge' => array('name' => 'm2.xlarge', 'ram' => '17510', 'vcpus' => '2', 'disk' => '420', 'type' => 'HDD', 'instancestore' => ['number' => 1, 'size' => 420]), 'm2.2xlarge' => array('name' => 'm2.2xlarge', 'ram' => '35021', 'vcpus' => '4', 'disk' => '850', 'type' => 'HDD', 'ebsoptimized' => true, 'instancestore' => ['number' => 1, 'size' => 850]), 'm2.4xlarge' => array('name' => 'm2.4xlarge', 'ram' => '66355', 'vcpus' => '8', 'disk' => '1680', 'type' => 'HDD', 'ebsoptimized' => true, 'instancestore' => ['number' => 2, 'size' => 840]), 'm3.medium' => array('name' => 'm3.medium', 'ram' => '3840', 'vcpus' => '1', 'disk' => '4', 'type' => 'SSD', 'ebsencryption' => true, 'instancestore' => ['number' => 1, 'size' => 4]), 'm3.large' => array('name' => 'm3.large', 'ram' => '7680', 'vcpus' => '2', 'disk' => '32', 'type' => 'SSD', 'ebsencryption' => true, 'instancestore' => ['number' => 1, 'size' => 32]), 'm3.xlarge' => array('name' => 'm3.xlarge', 'ram' => '15360', 'vcpus' => '4', 'disk' => '80', 'type' => 'SSD', 'ebsencryption' => true, 'ebsoptimized' => true, 'instancestore' => ['number' => 2, 'size' => 40]), 'm3.2xlarge' => array('name' => 'm3.2xlarge', 'ram' => '30720', 'vcpus' => '8', 'disk' => '160', 'type' => 'SSD', 'ebsencryption' => true, 'ebsoptimized' => true, 'instancestore' => ['number' => 2, 'size' => 80]), 'm4.large' => array('name' => 'm4.large', 'ram' => '8192', 'vcpus' => '2', 'disk' => '', 'type' => '', 'ebsencryption' => true, 'ebsoptimized' => 'default', 'placementgroups' => true, 'enhancednetworking' => true), 'm4.xlarge' => array('name' => 'm4.xlarge', 'ram' => '16384', 'vcpus' => '4', 'disk' => '', 'type' => '', 'ebsencryption' => true, 'ebsoptimized' => 'default', 'placementgroups' => true, 'enhancednetworking' => true), 'm4.2xlarge' => array('name' => 'm4.2xlarge', 'ram' => '32768', 'vcpus' => '8', 'disk' => '', 'type' => '', 'ebsencryption' => true, 'ebsoptimized' => 'default', 'placementgroups' => true, 'enhancednetworking' => true), 'm4.4xlarge' => array('name' => 'm4.4xlarge', 'ram' => '65536', 'vcpus' => '16', 'disk' => '', 'type' => '', 'ebsencryption' => true, 'ebsoptimized' => 'default', 'placementgroups' => true, 'enhancednetworking' => true), 'm4.10xlarge' => array('name' => 'm4.10xlarge', 'ram' => '163840', 'vcpus' => '40', 'disk' => '', 'type' => '', 'ebsencryption' => true, 'ebsoptimized' => 'default', 'placementgroups' => true, 'enhancednetworking' => true), 'c1.medium' => array('name' => 'c1.medium', 'ram' => '1741', 'vcpus' => '2', 'disk' => '350', 'type' => 'HDD', 'instancestore' => ['number' => 1, 'size' => 350]), 'c1.xlarge' => array('name' => 'c1.xlarge', 'ram' => '7168', 'vcpus' => '8', 'disk' => '1680', 'type' => 'HDD', 'ebsoptimized' => true, 'instancestore' => ['number' => 4, 'size' => 420]), 'c4.large' => array('name' => 'c4.large', 'ram' => '3840', 'vcpus' => '2', 'disk' => '32', 'type' => 'SSD', 'ebsencryption' => true, 'ebsoptimized' => 'default', 'placementgroups' => true, 'enhancednetworking' => true), 'c4.xlarge' => array('name' => 'c4.xlarge', 'ram' => '7680', 'vcpus' => '4', 'disk' => '80', 'type' => 'SSD', 'ebsencryption' => true, 'ebsoptimized' => 'default', 'placementgroups' => true, 'enhancednetworking' => true), 'c4.2xlarge' => array('name' => 'c4.2xlarge', 'ram' => '15360', 'vcpus' => '8', 'disk' => '160', 'type' => 'SSD', 'ebsencryption' => true, 'ebsoptimized' => 'default', 'placementgroups' => true, 'enhancednetworking' => true), 'c4.4xlarge' => array('name' => 'c4.4xlarge', 'ram' => '30720', 'vcpus' => '16', 'disk' => '320', 'type' => 'SSD', 'ebsencryption' => true, 'ebsoptimized' => 'default', 'placementgroups' => true, 'enhancednetworking' => true), 'c4.8xlarge' => array('name' => 'c4.8xlarge', 'ram' => '61440', 'vcpus' => '36', 'disk' => '640', 'type' => 'SSD', 'ebsencryption' => true, 'ebsoptimized' => 'default', 'placementgroups' => true, 'enhancednetworking' => true), 'c3.large' => array('name' => 'c3.large', 'ram' => '3840', 'vcpus' => '2', 'disk' => '32', 'type' => 'SSD', 'ebsencryption' => true, 'placementgroups' => true, 'enhancednetworking' => true, 'instancestore' => ['number' => 2, 'size' => 16]), 'c3.xlarge' => array('name' => 'c3.xlarge', 'ram' => '7680', 'vcpus' => '4', 'disk' => '80', 'type' => 'SSD', 'ebsencryption' => true, 'ebsoptimized' => true, 'placementgroups' => true, 'enhancednetworking' => true, 'instancestore' => ['number' => 2, 'size' => 40]), 'c3.2xlarge' => array('name' => 'c3.2xlarge', 'ram' => '15360', 'vcpus' => '8', 'disk' => '160', 'type' => 'SSD', 'ebsencryption' => true, 'ebsoptimized' => true, 'placementgroups' => true, 'enhancednetworking' => true, 'instancestore' => ['number' => 2, 'size' => 80]), 'c3.4xlarge' => array('name' => 'c3.4xlarge', 'ram' => '30720', 'vcpus' => '16', 'disk' => '320', 'type' => 'SSD', 'ebsencryption' => true, 'ebsoptimized' => true, 'placementgroups' => true, 'enhancednetworking' => true, 'instancestore' => ['number' => 2, 'size' => 160]), 'c3.8xlarge' => array('name' => 'c3.8xlarge', 'ram' => '61440', 'vcpus' => '32', 'disk' => '640', 'type' => 'SSD', 'ebsencryption' => true, 'placementgroups' => true, 'enhancednetworking' => true, 'instancestore' => ['number' => 2, 'size' => 320]), 'r3.large' => array('name' => 'r3.large', 'ram' => '15360', 'vcpus' => '2', 'disk' => '32', 'type' => 'SSD', 'ebsencryption' => true, 'placementgroups' => true, 'enhancednetworking' => true, 'instancestore' => ['number' => 1, 'size' => 32]), 'r3.xlarge' => array('name' => 'r3.xlarge', 'ram' => '31232', 'vcpus' => '4', 'disk' => '80', 'type' => 'SSD', 'ebsencryption' => true, 'ebsoptimized' => true, 'placementgroups' => true, 'enhancednetworking' => true, 'instancestore' => ['number' => 1, 'size' => 80]), 'r3.2xlarge' => array('name' => 'r3.2xlarge', 'ram' => '62464', 'vcpus' => '8', 'disk' => '160', 'type' => 'SSD', 'ebsencryption' => true, 'ebsoptimized' => true, 'placementgroups' => true, 'enhancednetworking' => true, 'instancestore' => ['number' => 1, 'size' => 160]), 'r3.4xlarge' => array('name' => 'r3.4xlarge', 'ram' => '124928', 'vcpus' => '16', 'disk' => '320', 'type' => 'SSD', 'ebsencryption' => true, 'ebsoptimized' => true, 'placementgroups' => true, 'enhancednetworking' => true, 'instancestore' => ['number' => 1, 'size' => 320]), 'r3.8xlarge' => array('name' => 'r3.8xlarge', 'ram' => '249856', 'vcpus' => '32', 'disk' => '640', 'type' => 'SSD', 'ebsencryption' => true, 'placementgroups' => true, 'enhancednetworking' => true, 'instancestore' => ['number' => 2, 'size' => 320]), 'i2.xlarge' => array('name' => 'i2.xlarge', 'ram' => '31232', 'vcpus' => '4', 'disk' => '800', 'type' => 'SSD', 'ebsencryption' => true, 'ebsoptimized' => true, 'placementgroups' => true, 'enhancednetworking' => true, 'instancestore' => ['number' => 1, 'size' => 800]), 'i2.2xlarge' => array('name' => 'i2.2xlarge', 'ram' => '62464', 'vcpus' => '8', 'disk' => '1600', 'type' => 'SSD', 'ebsencryption' => true, 'ebsoptimized' => true, 'placementgroups' => true, 'enhancednetworking' => true, 'instancestore' => ['number' => 2, 'size' => 800]), 'i2.4xlarge' => array('name' => 'i2.4xlarge', 'ram' => '124928', 'vcpus' => '16', 'disk' => '3200', 'type' => 'SSD', 'ebsencryption' => true, 'ebsoptimized' => true, 'placementgroups' => true, 'enhancednetworking' => true, 'instancestore' => ['number' => 4, 'size' => 800]), 'i2.8xlarge' => array('name' => 'i2.8xlarge', 'ram' => '249856', 'vcpus' => '32', 'disk' => '6400', 'type' => 'SSD', 'ebsencryption' => true, 'placementgroups' => true, 'enhancednetworking' => true, 'instancestore' => ['number' => 8, 'size' => 800]), 'd2.xlarge' => array('name' => 'd2.xlarge', 'ram' => '31232', 'vcpus' => '4', 'disk' => '4000', 'type' => 'HDD', 'ebsencryption' => true, 'ebsoptimized' => 'default', 'placementgroups' => true, 'enhancednetworking' => true, 'instancestore' => ['number' => 3, 'size' => 2000]), 'd2.2xlarge' => array('name' => 'd2.2xlarge', 'ram' => '62464', 'vcpus' => '8', 'disk' => '6000', 'type' => 'HDD', 'ebsencryption' => true, 'ebsoptimized' => 'default', 'placementgroups' => true, 'enhancednetworking' => true, 'instancestore' => ['number' => 6, 'size' => 2000]), 'd2.4xlarge' => array('name' => 'd2.4xlarge', 'ram' => '124928', 'vcpus' => '16', 'disk' => '24000', 'type' => 'HDD', 'ebsencryption' => true, 'ebsoptimized' => 'default', 'placementgroups' => true, 'enhancednetworking' => true, 'instancestore' => ['number' => 12, 'size' => 2000]), 'd2.8xlarge' => array('name' => 'd2.8xlarge', 'ram' => '249856', 'vcpus' => '36', 'disk' => '48000', 'type' => 'HDD', 'ebsencryption' => true, 'ebsoptimized' => 'default', 'placementgroups' => true, 'enhancednetworking' => true, 'instancestore' => ['number' => 24, 'size' => 2000]), 'g2.2xlarge' => array('name' => 'g2.2xlarge', 'ram' => '15360', 'vcpus' => '8', 'disk' => '60', 'type' => 'SSD', 'note' => 'GPU', 'ebsencryption' => true, 'ebsoptimized' => true, 'placementgroups' => true, 'instancestore' => ['number' => 1, 'size' => 60]), 'g2.8xlarge' => array('name' => 'g2.8xlarge', 'ram' => '61440', 'vcpus' => '32', 'disk' => '240', 'type' => 'SSD', 'note' => 'GPU', 'ebsencryption' => true, 'ebsoptimized' => true, 'placementgroups' => true, 'instancestore' => ['number' => 2, 'size' => 120]), 'hs1.8xlarge' => array('name' => 'hs1.8xlarge', 'ram' => '119808', 'vcpus' => '16', 'disk' => '49152', 'type' => 'SSD', 'placementgroups' => true, 'instancestore' => ['number' => 24, 'size' => 2000]), 'cc2.8xlarge' => array('name' => 'cc2.8xlarge', 'ram' => '61952', 'vcpus' => '32', 'disk' => '3360', 'type' => 'HDD', 'placementgroups' => true, 'instancestore' => ['number' => 4, 'size' => 840]), 'cg1.4xlarge' => array('name' => 'cg1.4xlarge', 'ram' => '23040', 'vcpus' => '16', 'disk' => '1680', 'type' => 'HDD', 'note' => 'GPU', 'placementgroups' => true, 'instancestore' => ['number' => 2, 'size' => 840]), 'hi1.4xlarge' => array('name' => 'hi1.4xlarge', 'ram' => '61952', 'vcpus' => '16', 'disk' => '2048', 'type' => 'SSD', 'placementgroups' => true, 'instancestore' => ['number' => 2, 'size' => 1024]), 'cr1.8xlarge' => array('name' => 'cr1.8xlarge', 'ram' => '249856', 'vcpus' => '32', 'disk' => '240', 'type' => 'SSD', 'ebsencryption' => true, 'placementgroups' => true, 'instancestore' => ['number' => 2, 'size' => 120]));
        static $supportedFamilies = [Aws::REGION_EU_CENTRAL_1 => ['t2', 'm3', 'm4', 'c3', 'r3', 'i2'], Aws::REGION_AP_NORTHEAST_2 => ['t2', 'm4', 'c4', 'r3', 'i2', 'd2']];
        $filter = isset($supportedFamilies[$cloudLocation]) ? array_flip($supportedFamilies[$cloudLocation]) : null;
        return array_filter($definition, function (&$entry, $key) use($filter, $restrictions, $details) {
            $family = explode('.', $key)[0];
            if (isset($filter) && !isset($filter[$family])) {
                return false;
            }
            if ($details) {
                $entry['family'] = $family;
                if (isset($restrictions[$family])) {
                    $entry['restrictions'] = isset($restrictions[$family][$key]) ? $restrictions[$family][$key] : $restrictions[$family];
                }
            } else {
                $entry = $key;
            }
            return true;
        }, ARRAY_FILTER_USE_BOTH);
    }