mirror of https://github.com/kubernetes/kops.git
Switch to using ec2.DescribeInstanceTypes for building the MachineType list
This commit is contained in:
parent
c4d8fcf34a
commit
1b29afb45d
|
@ -2,18 +2,14 @@ load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
|
|||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = [
|
||||
"machine_types.go",
|
||||
"vpc_ip_resource_limit.go",
|
||||
],
|
||||
srcs = ["machine_types.go"],
|
||||
importpath = "k8s.io/kops/hack/machine_types",
|
||||
visibility = ["//visibility:private"],
|
||||
deps = [
|
||||
"//upup/pkg/fi/cloudup/awsup:go_default_library",
|
||||
"//vendor/github.com/aws/aws-sdk-go/aws:go_default_library",
|
||||
"//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library",
|
||||
"//vendor/github.com/aws/aws-sdk-go/aws/session:go_default_library",
|
||||
"//vendor/github.com/aws/aws-sdk-go/service/pricing:go_default_library",
|
||||
"//vendor/github.com/aws/aws-sdk-go/service/ec2:go_default_library",
|
||||
"//vendor/k8s.io/klog:go_default_library",
|
||||
],
|
||||
)
|
||||
|
|
|
@ -22,15 +22,14 @@ import (
|
|||
"flag"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"math"
|
||||
"os"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||
"github.com/aws/aws-sdk-go/aws/session"
|
||||
"github.com/aws/aws-sdk-go/service/pricing"
|
||||
"github.com/aws/aws-sdk-go/service/ec2"
|
||||
"k8s.io/klog"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
)
|
||||
|
@ -55,10 +54,104 @@ func run() error {
|
|||
|
||||
klog.Info("Beginning AWS Machine Refresh")
|
||||
|
||||
machines := []awsup.AWSMachineTypeInfo{}
|
||||
families := make(map[string]struct{})
|
||||
// These are instance types not available in every account
|
||||
// If they're not available, they wont be in the ec2.DescribeInstanceTypes response
|
||||
// so they are hardcoded here for reference.
|
||||
// Note that the m6g instances do not have ENI or IP information
|
||||
machines := []awsup.AWSMachineTypeInfo{
|
||||
{
|
||||
Name: "cr1.8xlarge",
|
||||
MemoryGB: 244,
|
||||
Cores: 32,
|
||||
InstanceENIs: 8,
|
||||
InstanceIPsPerENI: 30,
|
||||
EphemeralDisks: []int{120, 120},
|
||||
},
|
||||
{
|
||||
Name: "hs1.8xlarge",
|
||||
MemoryGB: 117,
|
||||
Cores: 16,
|
||||
InstanceENIs: 8,
|
||||
InstanceIPsPerENI: 30,
|
||||
EphemeralDisks: []int{2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000},
|
||||
},
|
||||
{
|
||||
Name: "m6g.medium",
|
||||
MemoryGB: 4,
|
||||
Cores: 1,
|
||||
InstanceENIs: 0,
|
||||
InstanceIPsPerENI: 0,
|
||||
EphemeralDisks: nil,
|
||||
},
|
||||
|
||||
prices := []aws.JSONValue{}
|
||||
{
|
||||
Name: "m6g.large",
|
||||
MemoryGB: 8,
|
||||
Cores: 2,
|
||||
InstanceENIs: 0,
|
||||
InstanceIPsPerENI: 0,
|
||||
EphemeralDisks: nil,
|
||||
},
|
||||
|
||||
{
|
||||
Name: "m6g.xlarge",
|
||||
MemoryGB: 16,
|
||||
Cores: 4,
|
||||
InstanceENIs: 0,
|
||||
InstanceIPsPerENI: 0,
|
||||
EphemeralDisks: nil,
|
||||
},
|
||||
|
||||
{
|
||||
Name: "m6g.2xlarge",
|
||||
MemoryGB: 32,
|
||||
Cores: 8,
|
||||
InstanceENIs: 0,
|
||||
InstanceIPsPerENI: 0,
|
||||
EphemeralDisks: nil,
|
||||
},
|
||||
|
||||
{
|
||||
Name: "m6g.4xlarge",
|
||||
MemoryGB: 64,
|
||||
Cores: 16,
|
||||
InstanceENIs: 0,
|
||||
InstanceIPsPerENI: 0,
|
||||
EphemeralDisks: nil,
|
||||
},
|
||||
|
||||
{
|
||||
Name: "m6g.8xlarge",
|
||||
MemoryGB: 128,
|
||||
Cores: 32,
|
||||
InstanceENIs: 0,
|
||||
InstanceIPsPerENI: 0,
|
||||
EphemeralDisks: nil,
|
||||
},
|
||||
|
||||
{
|
||||
Name: "m6g.12xlarge",
|
||||
MemoryGB: 192,
|
||||
Cores: 48,
|
||||
InstanceENIs: 0,
|
||||
InstanceIPsPerENI: 0,
|
||||
EphemeralDisks: nil,
|
||||
},
|
||||
|
||||
{
|
||||
Name: "m6g.16xlarge",
|
||||
MemoryGB: 256,
|
||||
Cores: 64,
|
||||
InstanceENIs: 0,
|
||||
InstanceIPsPerENI: 0,
|
||||
EphemeralDisks: nil,
|
||||
},
|
||||
}
|
||||
families := map[string]struct{}{
|
||||
"cr1": {},
|
||||
"hs1": {},
|
||||
"m6g": {},
|
||||
}
|
||||
|
||||
config := aws.NewConfig()
|
||||
// Give verbose errors on auth problems
|
||||
|
@ -70,144 +163,54 @@ func run() error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
svc := pricing.New(sess, config)
|
||||
typeTerm := pricing.FilterTypeTermMatch
|
||||
input := &pricing.GetProductsInput{
|
||||
Filters: []*pricing.Filter{
|
||||
{
|
||||
Field: aws.String("operatingSystem"),
|
||||
Type: &typeTerm,
|
||||
Value: aws.String("Linux"),
|
||||
},
|
||||
{
|
||||
Field: aws.String("tenancy"),
|
||||
Type: &typeTerm,
|
||||
Value: aws.String("shared"),
|
||||
},
|
||||
{
|
||||
Field: aws.String("location"),
|
||||
Type: &typeTerm,
|
||||
Value: aws.String("US East (N. Virginia)"),
|
||||
},
|
||||
{
|
||||
Field: aws.String("preInstalledSw"),
|
||||
Type: &typeTerm,
|
||||
Value: aws.String("NA"),
|
||||
},
|
||||
},
|
||||
FormatVersion: aws.String("aws_v1"),
|
||||
ServiceCode: aws.String("AmazonEC2"),
|
||||
}
|
||||
|
||||
for {
|
||||
result, err := svc.GetProducts(input)
|
||||
|
||||
if err != nil {
|
||||
if aerr, ok := err.(awserr.Error); ok {
|
||||
switch aerr.Code() {
|
||||
case pricing.ErrCodeInternalErrorException:
|
||||
return fmt.Errorf("%s: %v", pricing.ErrCodeInternalErrorException, aerr)
|
||||
case pricing.ErrCodeInvalidParameterException:
|
||||
return fmt.Errorf("%s: %v", pricing.ErrCodeInvalidParameterException, aerr)
|
||||
case pricing.ErrCodeNotFoundException:
|
||||
return fmt.Errorf("%s: %v", pricing.ErrCodeNotFoundException, aerr)
|
||||
case pricing.ErrCodeInvalidNextTokenException:
|
||||
return fmt.Errorf("%s: %v", pricing.ErrCodeInvalidNextTokenException, aerr)
|
||||
case pricing.ErrCodeExpiredNextTokenException:
|
||||
return fmt.Errorf("%s: %v", pricing.ErrCodeExpiredNextTokenException, aerr)
|
||||
default:
|
||||
return aerr
|
||||
}
|
||||
} else {
|
||||
// Print the error, cast err to awserr.Error to get the Code and
|
||||
// Message from an error.
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
prices = append(prices, result.PriceList...)
|
||||
|
||||
if result.NextToken != nil {
|
||||
input.NextToken = result.NextToken
|
||||
} else {
|
||||
break
|
||||
}
|
||||
client := ec2.New(sess, config)
|
||||
instanceTypes := make([]*ec2.InstanceTypeInfo, 0)
|
||||
err = client.DescribeInstanceTypesPages(&ec2.DescribeInstanceTypesInput{},
|
||||
func(page *ec2.DescribeInstanceTypesOutput, lastPage bool) bool {
|
||||
instanceTypes = append(instanceTypes, page.InstanceTypes...)
|
||||
return true
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var warnings []string
|
||||
|
||||
seen := map[string]bool{}
|
||||
for _, item := range prices {
|
||||
for k, v := range item {
|
||||
if k == "product" {
|
||||
product := v.(map[string]interface{})
|
||||
attributes := map[string]string{}
|
||||
for k, v := range product["attributes"].(map[string]interface{}) {
|
||||
attributes[k] = v.(string)
|
||||
}
|
||||
for _, typeInfo := range instanceTypes {
|
||||
instanceType := *typeInfo.InstanceType
|
||||
|
||||
instanceType := attributes["instanceType"]
|
||||
|
||||
if _, ok := seen[instanceType]; ok {
|
||||
continue
|
||||
}
|
||||
seen[instanceType] = true
|
||||
|
||||
machine := awsup.AWSMachineTypeInfo{
|
||||
Name: instanceType,
|
||||
Cores: stringToInt(attributes["vcpu"]),
|
||||
}
|
||||
|
||||
memory := strings.TrimSuffix(attributes["memory"], " GiB")
|
||||
machine.MemoryGB = stringToFloat32(memory)
|
||||
|
||||
if attributes["storage"] != "EBS only" {
|
||||
storage := strings.Split(attributes["storage"], " ")
|
||||
var size int
|
||||
var count int
|
||||
if len(storage) > 1 {
|
||||
count = stringToInt(storage[0])
|
||||
if storage[2] == "NVMe" {
|
||||
count = 1
|
||||
size = stringToInt(storage[0])
|
||||
} else {
|
||||
size = stringToInt(storage[2])
|
||||
}
|
||||
} else {
|
||||
count = 0
|
||||
}
|
||||
|
||||
ephemeralDisks := []int{}
|
||||
for i := 0; i < count; i++ {
|
||||
ephemeralDisks = append(ephemeralDisks, size)
|
||||
}
|
||||
|
||||
machine.EphemeralDisks = ephemeralDisks
|
||||
}
|
||||
|
||||
if attributes["instanceFamily"] == "GPU instance" {
|
||||
machine.GPU = true
|
||||
}
|
||||
|
||||
if enis, enisOK := InstanceENIsAvailable[instanceType]; enisOK {
|
||||
machine.InstanceENIs = enis
|
||||
} else {
|
||||
warnings = append(warnings, fmt.Sprintf("ENIs not known for %s", instanceType))
|
||||
}
|
||||
|
||||
if ipsPerENI, ipsOK := InstanceIPsAvailable[instanceType]; ipsOK {
|
||||
machine.InstanceIPsPerENI = int(ipsPerENI)
|
||||
} else {
|
||||
warnings = append(warnings, fmt.Sprintf("IPs per ENI not known for %s", instanceType))
|
||||
}
|
||||
|
||||
machines = append(machines, machine)
|
||||
|
||||
family := strings.Split(instanceType, ".")[0]
|
||||
families[family] = struct{}{}
|
||||
|
||||
}
|
||||
if _, ok := seen[instanceType]; ok {
|
||||
continue
|
||||
}
|
||||
seen[instanceType] = true
|
||||
machine := awsup.AWSMachineTypeInfo{
|
||||
Name: instanceType,
|
||||
GPU: typeInfo.GpuInfo != nil,
|
||||
InstanceENIs: intValue(typeInfo.NetworkInfo.MaximumNetworkInterfaces),
|
||||
InstanceIPsPerENI: intValue(typeInfo.NetworkInfo.Ipv4AddressesPerInterface),
|
||||
}
|
||||
memoryGB := float64(intValue(typeInfo.MemoryInfo.SizeInMiB)) / 1024
|
||||
machine.MemoryGB = float32(math.Round(memoryGB*100) / 100)
|
||||
|
||||
if typeInfo.VCpuInfo != nil && typeInfo.VCpuInfo.DefaultVCpus != nil {
|
||||
machine.Cores = intValue(typeInfo.VCpuInfo.DefaultVCpus)
|
||||
}
|
||||
if typeInfo.InstanceStorageInfo != nil && len(typeInfo.InstanceStorageInfo.Disks) > 0 {
|
||||
disks := make([]int, 0)
|
||||
for _, disk := range typeInfo.InstanceStorageInfo.Disks {
|
||||
for i := 0; i < intValue(disk.Count); i++ {
|
||||
disks = append(disks, intValue(disk.SizeInGB))
|
||||
}
|
||||
}
|
||||
machine.EphemeralDisks = disks
|
||||
}
|
||||
|
||||
machines = append(machines, machine)
|
||||
|
||||
family := strings.Split(instanceType, ".")[0]
|
||||
families[family] = struct{}{}
|
||||
|
||||
}
|
||||
|
||||
sortedFamilies := []string{}
|
||||
|
@ -248,6 +251,7 @@ func run() error {
|
|||
output = output + fmt.Sprintf("\n// %s family", f)
|
||||
for _, m := range machines {
|
||||
if family := strings.Split(m.Name, ".")[0]; family == f {
|
||||
|
||||
body := fmt.Sprintf(`
|
||||
{
|
||||
Name: "%s",
|
||||
|
@ -319,22 +323,6 @@ func run() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func stringToFloat32(s string) float32 {
|
||||
// For 1,000 case
|
||||
clean := strings.Replace(s, ",", "", -1)
|
||||
value, err := strconv.ParseFloat(clean, 32)
|
||||
if err != nil {
|
||||
klog.Errorf("error converting string to float32: %v", err)
|
||||
}
|
||||
return float32(value)
|
||||
}
|
||||
|
||||
func stringToInt(s string) int {
|
||||
// For 1,000 case
|
||||
clean := strings.Replace(s, ",", "", -1)
|
||||
value, err := strconv.Atoi(clean)
|
||||
if err != nil {
|
||||
klog.Error(err)
|
||||
}
|
||||
return value
|
||||
func intValue(v *int64) int {
|
||||
return int(aws.Int64Value(v))
|
||||
}
|
||||
|
|
|
@ -1,566 +0,0 @@
|
|||
/*
|
||||
Copyright 2019 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
// Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License"). You may
|
||||
// not use this file except in compliance with the License. A copy of the
|
||||
// License is located at
|
||||
//
|
||||
// http://aws.amazon.com/apache2.0/
|
||||
//
|
||||
// or in the "license" file accompanying this file. This file is distributed
|
||||
// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
// express or implied. See the License for the specific language governing
|
||||
// permissions and limitations under the License.
|
||||
|
||||
package main
|
||||
|
||||
// InstanceENIsAvailable contains a mapping of instance types to the number of ENIs available which is described at
|
||||
// https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI
|
||||
var InstanceENIsAvailable = map[string]int{
|
||||
"a1.2xlarge": 4,
|
||||
"a1.4xlarge": 8,
|
||||
"a1.large": 3,
|
||||
"a1.medium": 2,
|
||||
"a1.metal": 8,
|
||||
"a1.xlarge": 4,
|
||||
"c1.medium": 2,
|
||||
"c1.xlarge": 4,
|
||||
"c3.2xlarge": 4,
|
||||
"c3.4xlarge": 8,
|
||||
"c3.8xlarge": 8,
|
||||
"c3.large": 3,
|
||||
"c3.xlarge": 4,
|
||||
"c4.2xlarge": 4,
|
||||
"c4.4xlarge": 8,
|
||||
"c4.8xlarge": 8,
|
||||
"c4.large": 3,
|
||||
"c4.xlarge": 4,
|
||||
"c5.12xlarge": 8,
|
||||
"c5.18xlarge": 15,
|
||||
"c5.24xlarge": 15,
|
||||
"c5.2xlarge": 4,
|
||||
"c5.4xlarge": 8,
|
||||
"c5.9xlarge": 8,
|
||||
"c5.large": 3,
|
||||
"c5.metal": 15,
|
||||
"c5.xlarge": 4,
|
||||
"c5d.12xlarge": 8,
|
||||
"c5d.18xlarge": 15,
|
||||
"c5d.24xlarge": 15,
|
||||
"c5d.2xlarge": 4,
|
||||
"c5d.4xlarge": 8,
|
||||
"c5d.9xlarge": 8,
|
||||
"c5d.large": 3,
|
||||
"c5d.metal": 15,
|
||||
"c5d.xlarge": 4,
|
||||
"c5n.18xlarge": 15,
|
||||
"c5n.2xlarge": 4,
|
||||
"c5n.4xlarge": 8,
|
||||
"c5n.9xlarge": 8,
|
||||
"c5n.large": 3,
|
||||
"c5n.metal": 15,
|
||||
"c5n.xlarge": 4,
|
||||
"cc2.8xlarge": 8,
|
||||
"cr1.8xlarge": 8,
|
||||
"d2.2xlarge": 4,
|
||||
"d2.4xlarge": 8,
|
||||
"d2.8xlarge": 8,
|
||||
"d2.xlarge": 4,
|
||||
"f1.16xlarge": 8,
|
||||
"f1.2xlarge": 4,
|
||||
"f1.4xlarge": 8,
|
||||
"g2.2xlarge": 4,
|
||||
"g2.8xlarge": 8,
|
||||
"g3.16xlarge": 15,
|
||||
"g3.4xlarge": 8,
|
||||
"g3.8xlarge": 8,
|
||||
"g3s.xlarge": 4,
|
||||
"g4dn.12xlarge": 8,
|
||||
"g4dn.16xlarge": 15,
|
||||
"g4dn.2xlarge": 3,
|
||||
"g4dn.4xlarge": 3,
|
||||
"g4dn.8xlarge": 4,
|
||||
"g4dn.xlarge": 3,
|
||||
"h1.16xlarge": 15,
|
||||
"h1.2xlarge": 4,
|
||||
"h1.4xlarge": 8,
|
||||
"h1.8xlarge": 8,
|
||||
"hs1.8xlarge": 8,
|
||||
"i2.2xlarge": 4,
|
||||
"i2.4xlarge": 8,
|
||||
"i2.8xlarge": 8,
|
||||
"i2.xlarge": 4,
|
||||
"i3.16xlarge": 15,
|
||||
"i3.2xlarge": 4,
|
||||
"i3.4xlarge": 8,
|
||||
"i3.8xlarge": 8,
|
||||
"i3.large": 3,
|
||||
"i3.metal": 15,
|
||||
"i3.xlarge": 4,
|
||||
"i3en.12xlarge": 8,
|
||||
"i3en.24xlarge": 15,
|
||||
"i3en.2xlarge": 4,
|
||||
"i3en.3xlarge": 4,
|
||||
"i3en.6xlarge": 8,
|
||||
"i3en.large": 3,
|
||||
"i3en.metal": 15,
|
||||
"i3en.xlarge": 4,
|
||||
"inf1.xlarge": 4,
|
||||
"inf1.2xlarge": 4,
|
||||
"inf1.6xlarge": 8,
|
||||
"inf1.24xlarge": 15,
|
||||
"m1.large": 3,
|
||||
"m1.medium": 2,
|
||||
"m1.small": 2,
|
||||
"m1.xlarge": 4,
|
||||
"m2.2xlarge": 4,
|
||||
"m2.4xlarge": 8,
|
||||
"m2.xlarge": 4,
|
||||
"m3.2xlarge": 4,
|
||||
"m3.large": 3,
|
||||
"m3.medium": 2,
|
||||
"m3.xlarge": 4,
|
||||
"m4.10xlarge": 8,
|
||||
"m4.16xlarge": 8,
|
||||
"m4.2xlarge": 4,
|
||||
"m4.4xlarge": 8,
|
||||
"m4.large": 2,
|
||||
"m4.xlarge": 4,
|
||||
"m5.12xlarge": 8,
|
||||
"m5.16xlarge": 15,
|
||||
"m5.24xlarge": 15,
|
||||
"m5.2xlarge": 4,
|
||||
"m5.4xlarge": 8,
|
||||
"m5.8xlarge": 8,
|
||||
"m5.large": 3,
|
||||
"m5.metal": 15,
|
||||
"m5.xlarge": 4,
|
||||
"m5a.12xlarge": 8,
|
||||
"m5a.16xlarge": 15,
|
||||
"m5a.24xlarge": 15,
|
||||
"m5a.2xlarge": 4,
|
||||
"m5a.4xlarge": 8,
|
||||
"m5a.8xlarge": 8,
|
||||
"m5a.large": 3,
|
||||
"m5a.xlarge": 4,
|
||||
"m5ad.12xlarge": 8,
|
||||
"m5ad.24xlarge": 15,
|
||||
"m5ad.2xlarge": 4,
|
||||
"m5ad.4xlarge": 8,
|
||||
"m5ad.large": 3,
|
||||
"m5ad.xlarge": 4,
|
||||
"m5d.12xlarge": 8,
|
||||
"m5d.16xlarge": 15,
|
||||
"m5d.24xlarge": 15,
|
||||
"m5d.2xlarge": 4,
|
||||
"m5d.4xlarge": 8,
|
||||
"m5d.8xlarge": 8,
|
||||
"m5d.large": 3,
|
||||
"m5d.metal": 15,
|
||||
"m5d.xlarge": 4,
|
||||
"m5dn.12xlarge": 8,
|
||||
"m5dn.16xlarge": 15,
|
||||
"m5dn.24xlarge": 15,
|
||||
"m5dn.2xlarge": 4,
|
||||
"m5dn.4xlarge": 8,
|
||||
"m5dn.8xlarge": 8,
|
||||
"m5dn.large": 3,
|
||||
"m5dn.xlarge": 4,
|
||||
"m5n.12xlarge": 8,
|
||||
"m5n.16xlarge": 15,
|
||||
"m5n.24xlarge": 15,
|
||||
"m5n.2xlarge": 4,
|
||||
"m5n.4xlarge": 8,
|
||||
"m5n.8xlarge": 8,
|
||||
"m5n.large": 3,
|
||||
"m5n.xlarge": 4,
|
||||
"p2.16xlarge": 8,
|
||||
"p2.8xlarge": 8,
|
||||
"p2.xlarge": 4,
|
||||
"p3.16xlarge": 8,
|
||||
"p3.2xlarge": 4,
|
||||
"p3.8xlarge": 8,
|
||||
"p3dn.24xlarge": 15,
|
||||
"r3.2xlarge": 4,
|
||||
"r3.4xlarge": 8,
|
||||
"r3.8xlarge": 8,
|
||||
"r3.large": 3,
|
||||
"r3.xlarge": 4,
|
||||
"r4.16xlarge": 15,
|
||||
"r4.2xlarge": 4,
|
||||
"r4.4xlarge": 8,
|
||||
"r4.8xlarge": 8,
|
||||
"r4.large": 3,
|
||||
"r4.xlarge": 4,
|
||||
"r5.12xlarge": 8,
|
||||
"r5.16xlarge": 15,
|
||||
"r5.24xlarge": 15,
|
||||
"r5.2xlarge": 4,
|
||||
"r5.4xlarge": 8,
|
||||
"r5.8xlarge": 8,
|
||||
"r5.large": 3,
|
||||
"r5.metal": 15,
|
||||
"r5.xlarge": 4,
|
||||
"r5a.12xlarge": 8,
|
||||
"r5a.16xlarge": 15,
|
||||
"r5a.24xlarge": 15,
|
||||
"r5a.2xlarge": 4,
|
||||
"r5a.4xlarge": 8,
|
||||
"r5a.8xlarge": 8,
|
||||
"r5a.large": 3,
|
||||
"r5a.xlarge": 4,
|
||||
"r5ad.12xlarge": 8,
|
||||
"r5ad.24xlarge": 15,
|
||||
"r5ad.2xlarge": 4,
|
||||
"r5ad.4xlarge": 8,
|
||||
"r5ad.large": 3,
|
||||
"r5ad.xlarge": 4,
|
||||
"r5d.12xlarge": 8,
|
||||
"r5d.16xlarge": 15,
|
||||
"r5d.24xlarge": 15,
|
||||
"r5d.2xlarge": 4,
|
||||
"r5d.4xlarge": 8,
|
||||
"r5d.8xlarge": 8,
|
||||
"r5d.large": 3,
|
||||
"r5d.metal": 15,
|
||||
"r5d.xlarge": 4,
|
||||
"r5dn.12xlarge": 8,
|
||||
"r5dn.16xlarge": 15,
|
||||
"r5dn.24xlarge": 15,
|
||||
"r5dn.2xlarge": 4,
|
||||
"r5dn.4xlarge": 8,
|
||||
"r5dn.8xlarge": 8,
|
||||
"r5dn.large": 3,
|
||||
"r5dn.xlarge": 4,
|
||||
"r5n.12xlarge": 8,
|
||||
"r5n.16xlarge": 15,
|
||||
"r5n.24xlarge": 15,
|
||||
"r5n.2xlarge": 4,
|
||||
"r5n.4xlarge": 8,
|
||||
"r5n.8xlarge": 8,
|
||||
"r5n.large": 3,
|
||||
"r5n.xlarge": 4,
|
||||
"t1.micro": 2,
|
||||
"t2.2xlarge": 3,
|
||||
"t2.large": 3,
|
||||
"t2.medium": 3,
|
||||
"t2.micro": 2,
|
||||
"t2.nano": 2,
|
||||
"t2.small": 3,
|
||||
"t2.xlarge": 3,
|
||||
"t3.2xlarge": 4,
|
||||
"t3.large": 3,
|
||||
"t3.medium": 3,
|
||||
"t3.micro": 2,
|
||||
"t3.nano": 2,
|
||||
"t3.small": 3,
|
||||
"t3.xlarge": 4,
|
||||
"t3a.2xlarge": 4,
|
||||
"t3a.large": 3,
|
||||
"t3a.medium": 3,
|
||||
"t3a.micro": 2,
|
||||
"t3a.nano": 2,
|
||||
"t3a.small": 3,
|
||||
"t3a.xlarge": 4,
|
||||
"u-12tb1.metal": 5,
|
||||
"u-6tb1.metal": 5,
|
||||
"u-9tb1.metal": 5,
|
||||
"x1.16xlarge": 8,
|
||||
"x1.32xlarge": 8,
|
||||
"x1e.16xlarge": 8,
|
||||
"x1e.2xlarge": 4,
|
||||
"x1e.32xlarge": 8,
|
||||
"x1e.4xlarge": 4,
|
||||
"x1e.8xlarge": 4,
|
||||
"x1e.xlarge": 3,
|
||||
"z1d.12xlarge": 15,
|
||||
"z1d.2xlarge": 4,
|
||||
"z1d.3xlarge": 8,
|
||||
"z1d.6xlarge": 8,
|
||||
"z1d.large": 3,
|
||||
"z1d.metal": 15,
|
||||
"z1d.xlarge": 4,
|
||||
}
|
||||
|
||||
// InstanceIPsAvailable contains a mapping of instance types to the number of IPs per ENI
|
||||
// https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI
|
||||
var InstanceIPsAvailable = map[string]int64{
|
||||
"a1.2xlarge": 15,
|
||||
"a1.4xlarge": 30,
|
||||
"a1.large": 10,
|
||||
"a1.medium": 4,
|
||||
"a1.metal": 30,
|
||||
"a1.xlarge": 15,
|
||||
"c1.medium": 6,
|
||||
"c1.xlarge": 15,
|
||||
"c3.2xlarge": 15,
|
||||
"c3.4xlarge": 30,
|
||||
"c3.8xlarge": 30,
|
||||
"c3.large": 10,
|
||||
"c3.xlarge": 15,
|
||||
"c4.2xlarge": 15,
|
||||
"c4.4xlarge": 30,
|
||||
"c4.8xlarge": 30,
|
||||
"c4.large": 10,
|
||||
"c4.xlarge": 15,
|
||||
"c5.12xlarge": 30,
|
||||
"c5.18xlarge": 50,
|
||||
"c5.24xlarge": 50,
|
||||
"c5.2xlarge": 15,
|
||||
"c5.4xlarge": 30,
|
||||
"c5.9xlarge": 30,
|
||||
"c5.large": 10,
|
||||
"c5.metal": 50,
|
||||
"c5.xlarge": 15,
|
||||
"c5d.12xlarge": 30,
|
||||
"c5d.18xlarge": 50,
|
||||
"c5d.24xlarge": 50,
|
||||
"c5d.2xlarge": 15,
|
||||
"c5d.4xlarge": 30,
|
||||
"c5d.9xlarge": 30,
|
||||
"c5d.large": 10,
|
||||
"c5d.metal": 50,
|
||||
"c5d.xlarge": 15,
|
||||
"c5n.18xlarge": 50,
|
||||
"c5n.2xlarge": 15,
|
||||
"c5n.4xlarge": 30,
|
||||
"c5n.9xlarge": 30,
|
||||
"c5n.large": 10,
|
||||
"c5n.metal": 50,
|
||||
"c5n.xlarge": 15,
|
||||
"cc2.8xlarge": 30,
|
||||
"cr1.8xlarge": 30,
|
||||
"d2.2xlarge": 15,
|
||||
"d2.4xlarge": 30,
|
||||
"d2.8xlarge": 30,
|
||||
"d2.xlarge": 15,
|
||||
"f1.16xlarge": 50,
|
||||
"f1.2xlarge": 15,
|
||||
"f1.4xlarge": 30,
|
||||
"g2.2xlarge": 15,
|
||||
"g2.8xlarge": 30,
|
||||
"g3.16xlarge": 50,
|
||||
"g3.4xlarge": 30,
|
||||
"g3.8xlarge": 30,
|
||||
"g3s.xlarge": 15,
|
||||
"g4dn.12xlarge": 30,
|
||||
"g4dn.16xlarge": 50,
|
||||
"g4dn.2xlarge": 10,
|
||||
"g4dn.4xlarge": 10,
|
||||
"g4dn.8xlarge": 15,
|
||||
"g4dn.xlarge": 10,
|
||||
"h1.16xlarge": 50,
|
||||
"h1.2xlarge": 15,
|
||||
"h1.4xlarge": 30,
|
||||
"h1.8xlarge": 30,
|
||||
"hs1.8xlarge": 30,
|
||||
"i2.2xlarge": 15,
|
||||
"i2.4xlarge": 30,
|
||||
"i2.8xlarge": 30,
|
||||
"i2.xlarge": 15,
|
||||
"i3.16xlarge": 50,
|
||||
"i3.2xlarge": 15,
|
||||
"i3.4xlarge": 30,
|
||||
"i3.8xlarge": 30,
|
||||
"i3.large": 10,
|
||||
"i3.metal": 50,
|
||||
"i3.xlarge": 15,
|
||||
"i3en.12xlarge": 30,
|
||||
"i3en.24xlarge": 50,
|
||||
"i3en.2xlarge": 15,
|
||||
"i3en.3xlarge": 15,
|
||||
"i3en.6xlarge": 30,
|
||||
"i3en.large": 10,
|
||||
"i3en.metal": 50,
|
||||
"i3en.xlarge": 15,
|
||||
"inf1.xlarge": 10,
|
||||
"inf1.2xlarge": 10,
|
||||
"inf1.6xlarge": 30,
|
||||
"inf1.24xlarge": 50,
|
||||
"m1.large": 10,
|
||||
"m1.medium": 6,
|
||||
"m1.small": 4,
|
||||
"m1.xlarge": 15,
|
||||
"m2.2xlarge": 30,
|
||||
"m2.4xlarge": 30,
|
||||
"m2.xlarge": 15,
|
||||
"m3.2xlarge": 30,
|
||||
"m3.large": 10,
|
||||
"m3.medium": 6,
|
||||
"m3.xlarge": 15,
|
||||
"m4.10xlarge": 30,
|
||||
"m4.16xlarge": 30,
|
||||
"m4.2xlarge": 15,
|
||||
"m4.4xlarge": 30,
|
||||
"m4.large": 10,
|
||||
"m4.xlarge": 15,
|
||||
"m5.12xlarge": 30,
|
||||
"m5.16xlarge": 30,
|
||||
"m5.24xlarge": 50,
|
||||
"m5.2xlarge": 15,
|
||||
"m5.4xlarge": 30,
|
||||
"m5.8xlarge": 30,
|
||||
"m5.large": 10,
|
||||
"m5.metal": 50,
|
||||
"m5.xlarge": 15,
|
||||
"m5a.12xlarge": 30,
|
||||
"m5a.16xlarge": 30,
|
||||
"m5a.24xlarge": 50,
|
||||
"m5a.2xlarge": 15,
|
||||
"m5a.4xlarge": 30,
|
||||
"m5a.8xlarge": 30,
|
||||
"m5a.large": 10,
|
||||
"m5a.xlarge": 15,
|
||||
"m5ad.12xlarge": 30,
|
||||
"m5ad.24xlarge": 50,
|
||||
"m5ad.2xlarge": 15,
|
||||
"m5ad.4xlarge": 30,
|
||||
"m5ad.large": 10,
|
||||
"m5ad.xlarge": 15,
|
||||
"m5d.12xlarge": 30,
|
||||
"m5d.16xlarge": 30,
|
||||
"m5d.24xlarge": 50,
|
||||
"m5d.2xlarge": 15,
|
||||
"m5d.4xlarge": 30,
|
||||
"m5d.8xlarge": 30,
|
||||
"m5d.large": 10,
|
||||
"m5d.metal": 50,
|
||||
"m5d.xlarge": 15,
|
||||
"m5dn.12xlarge": 30,
|
||||
"m5dn.16xlarge": 50,
|
||||
"m5dn.24xlarge": 50,
|
||||
"m5dn.2xlarge": 15,
|
||||
"m5dn.4xlarge": 30,
|
||||
"m5dn.8xlarge": 30,
|
||||
"m5dn.large": 10,
|
||||
"m5dn.xlarge": 15,
|
||||
"m5n.12xlarge": 30,
|
||||
"m5n.16xlarge": 50,
|
||||
"m5n.24xlarge": 50,
|
||||
"m5n.2xlarge": 15,
|
||||
"m5n.4xlarge": 30,
|
||||
"m5n.8xlarge": 30,
|
||||
"m5n.large": 10,
|
||||
"m5n.xlarge": 15,
|
||||
"p2.16xlarge": 30,
|
||||
"p2.8xlarge": 30,
|
||||
"p2.xlarge": 15,
|
||||
"p3.16xlarge": 30,
|
||||
"p3.2xlarge": 15,
|
||||
"p3.8xlarge": 30,
|
||||
"p3dn.24xlarge": 50,
|
||||
"r3.2xlarge": 15,
|
||||
"r3.4xlarge": 30,
|
||||
"r3.8xlarge": 30,
|
||||
"r3.large": 10,
|
||||
"r3.xlarge": 15,
|
||||
"r4.16xlarge": 50,
|
||||
"r4.2xlarge": 15,
|
||||
"r4.4xlarge": 30,
|
||||
"r4.8xlarge": 30,
|
||||
"r4.large": 10,
|
||||
"r4.xlarge": 15,
|
||||
"r5.12xlarge": 30,
|
||||
"r5.16xlarge": 50,
|
||||
"r5.24xlarge": 50,
|
||||
"r5.2xlarge": 15,
|
||||
"r5.4xlarge": 30,
|
||||
"r5.8xlarge": 30,
|
||||
"r5.large": 10,
|
||||
"r5.metal": 50,
|
||||
"r5.xlarge": 15,
|
||||
"r5a.12xlarge": 30,
|
||||
"r5a.16xlarge": 50,
|
||||
"r5a.24xlarge": 50,
|
||||
"r5a.2xlarge": 15,
|
||||
"r5a.4xlarge": 30,
|
||||
"r5a.8xlarge": 30,
|
||||
"r5a.large": 10,
|
||||
"r5a.xlarge": 15,
|
||||
"r5ad.12xlarge": 30,
|
||||
"r5ad.24xlarge": 50,
|
||||
"r5ad.2xlarge": 15,
|
||||
"r5ad.4xlarge": 30,
|
||||
"r5ad.large": 10,
|
||||
"r5ad.xlarge": 15,
|
||||
"r5d.12xlarge": 30,
|
||||
"r5d.16xlarge": 50,
|
||||
"r5d.24xlarge": 50,
|
||||
"r5d.2xlarge": 15,
|
||||
"r5d.4xlarge": 30,
|
||||
"r5d.8xlarge": 30,
|
||||
"r5d.large": 10,
|
||||
"r5d.metal": 50,
|
||||
"r5d.xlarge": 15,
|
||||
"r5dn.12xlarge": 30,
|
||||
"r5dn.16xlarge": 50,
|
||||
"r5dn.24xlarge": 50,
|
||||
"r5dn.2xlarge": 15,
|
||||
"r5dn.4xlarge": 30,
|
||||
"r5dn.8xlarge": 30,
|
||||
"r5dn.large": 10,
|
||||
"r5dn.xlarge": 15,
|
||||
"r5n.12xlarge": 30,
|
||||
"r5n.16xlarge": 50,
|
||||
"r5n.24xlarge": 50,
|
||||
"r5n.2xlarge": 15,
|
||||
"r5n.4xlarge": 30,
|
||||
"r5n.8xlarge": 30,
|
||||
"r5n.large": 10,
|
||||
"r5n.xlarge": 15,
|
||||
"t1.micro": 2,
|
||||
"t2.2xlarge": 15,
|
||||
"t2.large": 12,
|
||||
"t2.medium": 6,
|
||||
"t2.micro": 2,
|
||||
"t2.nano": 2,
|
||||
"t2.small": 4,
|
||||
"t2.xlarge": 15,
|
||||
"t3.2xlarge": 15,
|
||||
"t3.large": 12,
|
||||
"t3.medium": 6,
|
||||
"t3.micro": 2,
|
||||
"t3.nano": 2,
|
||||
"t3.small": 4,
|
||||
"t3.xlarge": 15,
|
||||
"t3a.2xlarge": 15,
|
||||
"t3a.large": 12,
|
||||
"t3a.medium": 6,
|
||||
"t3a.micro": 2,
|
||||
"t3a.nano": 2,
|
||||
"t3a.small": 4,
|
||||
"t3a.xlarge": 15,
|
||||
"u-12tb1.metal": 30,
|
||||
"u-6tb1.metal": 30,
|
||||
"u-9tb1.metal": 30,
|
||||
"x1.16xlarge": 30,
|
||||
"x1.32xlarge": 30,
|
||||
"x1e.16xlarge": 30,
|
||||
"x1e.2xlarge": 15,
|
||||
"x1e.32xlarge": 30,
|
||||
"x1e.4xlarge": 15,
|
||||
"x1e.8xlarge": 15,
|
||||
"x1e.xlarge": 10,
|
||||
"z1d.12xlarge": 50,
|
||||
"z1d.2xlarge": 15,
|
||||
"z1d.3xlarge": 30,
|
||||
"z1d.6xlarge": 30,
|
||||
"z1d.large": 10,
|
||||
"z1d.metal": 50,
|
||||
"z1d.xlarge": 15,
|
||||
}
|
|
@ -75,23 +75,6 @@ var MachineTypes []AWSMachineTypeInfo = []AWSMachineTypeInfo{
|
|||
// NOTE: Content below is auto generated by `make update-machine-types`
|
||||
// BEGIN GENERATED CONTENT
|
||||
|
||||
// WARNING: ENIs not known for m6g.medium
|
||||
// WARNING: IPs per ENI not known for m6g.medium
|
||||
// WARNING: ENIs not known for m6g.8xlarge
|
||||
// WARNING: IPs per ENI not known for m6g.8xlarge
|
||||
// WARNING: ENIs not known for m6g.16xlarge
|
||||
// WARNING: IPs per ENI not known for m6g.16xlarge
|
||||
// WARNING: ENIs not known for m6g.2xlarge
|
||||
// WARNING: IPs per ENI not known for m6g.2xlarge
|
||||
// WARNING: ENIs not known for m6g.xlarge
|
||||
// WARNING: IPs per ENI not known for m6g.xlarge
|
||||
// WARNING: ENIs not known for m6g.4xlarge
|
||||
// WARNING: IPs per ENI not known for m6g.4xlarge
|
||||
// WARNING: ENIs not known for m6g.12xlarge
|
||||
// WARNING: IPs per ENI not known for m6g.12xlarge
|
||||
// WARNING: ENIs not known for m6g.large
|
||||
// WARNING: IPs per ENI not known for m6g.large
|
||||
|
||||
// a1 family
|
||||
{
|
||||
Name: "a1.medium",
|
||||
|
@ -513,7 +496,7 @@ var MachineTypes []AWSMachineTypeInfo = []AWSMachineTypeInfo{
|
|||
Cores: 4,
|
||||
InstanceENIs: 4,
|
||||
InstanceIPsPerENI: 15,
|
||||
EphemeralDisks: []int{2000, 2000, 2000},
|
||||
EphemeralDisks: []int{2048, 2048, 2048},
|
||||
},
|
||||
|
||||
{
|
||||
|
@ -522,7 +505,7 @@ var MachineTypes []AWSMachineTypeInfo = []AWSMachineTypeInfo{
|
|||
Cores: 8,
|
||||
InstanceENIs: 4,
|
||||
InstanceIPsPerENI: 15,
|
||||
EphemeralDisks: []int{2000, 2000, 2000, 2000, 2000, 2000},
|
||||
EphemeralDisks: []int{2048, 2048, 2048, 2048, 2048, 2048},
|
||||
},
|
||||
|
||||
{
|
||||
|
@ -531,7 +514,7 @@ var MachineTypes []AWSMachineTypeInfo = []AWSMachineTypeInfo{
|
|||
Cores: 16,
|
||||
InstanceENIs: 8,
|
||||
InstanceIPsPerENI: 30,
|
||||
EphemeralDisks: []int{2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000},
|
||||
EphemeralDisks: []int{2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048},
|
||||
},
|
||||
|
||||
{
|
||||
|
@ -540,7 +523,7 @@ var MachineTypes []AWSMachineTypeInfo = []AWSMachineTypeInfo{
|
|||
Cores: 36,
|
||||
InstanceENIs: 8,
|
||||
InstanceIPsPerENI: 30,
|
||||
EphemeralDisks: []int{2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000},
|
||||
EphemeralDisks: []int{2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048},
|
||||
},
|
||||
|
||||
// f1 family
|
||||
|
@ -689,8 +672,8 @@ var MachineTypes []AWSMachineTypeInfo = []AWSMachineTypeInfo{
|
|||
Name: "g4dn.16xlarge",
|
||||
MemoryGB: 256,
|
||||
Cores: 64,
|
||||
InstanceENIs: 15,
|
||||
InstanceIPsPerENI: 50,
|
||||
InstanceENIs: 4,
|
||||
InstanceIPsPerENI: 15,
|
||||
EphemeralDisks: []int{900},
|
||||
GPU: true,
|
||||
},
|
||||
|
@ -837,7 +820,7 @@ var MachineTypes []AWSMachineTypeInfo = []AWSMachineTypeInfo{
|
|||
{
|
||||
Name: "i3.metal",
|
||||
MemoryGB: 512,
|
||||
Cores: 64,
|
||||
Cores: 72,
|
||||
InstanceENIs: 15,
|
||||
InstanceIPsPerENI: 50,
|
||||
EphemeralDisks: []int{1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900},
|
||||
|
@ -949,7 +932,7 @@ var MachineTypes []AWSMachineTypeInfo = []AWSMachineTypeInfo{
|
|||
MemoryGB: 192,
|
||||
Cores: 96,
|
||||
InstanceENIs: 15,
|
||||
InstanceIPsPerENI: 50,
|
||||
InstanceIPsPerENI: 30,
|
||||
EphemeralDisks: nil,
|
||||
},
|
||||
|
||||
|
@ -965,7 +948,7 @@ var MachineTypes []AWSMachineTypeInfo = []AWSMachineTypeInfo{
|
|||
|
||||
{
|
||||
Name: "m1.medium",
|
||||
MemoryGB: 3.75,
|
||||
MemoryGB: 3.7,
|
||||
Cores: 1,
|
||||
InstanceENIs: 2,
|
||||
InstanceIPsPerENI: 6,
|
||||
|
@ -1170,7 +1153,7 @@ var MachineTypes []AWSMachineTypeInfo = []AWSMachineTypeInfo{
|
|||
MemoryGB: 256,
|
||||
Cores: 64,
|
||||
InstanceENIs: 15,
|
||||
InstanceIPsPerENI: 30,
|
||||
InstanceIPsPerENI: 50,
|
||||
EphemeralDisks: nil,
|
||||
},
|
||||
|
||||
|
@ -1252,7 +1235,7 @@ var MachineTypes []AWSMachineTypeInfo = []AWSMachineTypeInfo{
|
|||
MemoryGB: 256,
|
||||
Cores: 64,
|
||||
InstanceENIs: 15,
|
||||
InstanceIPsPerENI: 30,
|
||||
InstanceIPsPerENI: 50,
|
||||
EphemeralDisks: nil,
|
||||
},
|
||||
|
||||
|
@ -1380,7 +1363,7 @@ var MachineTypes []AWSMachineTypeInfo = []AWSMachineTypeInfo{
|
|||
MemoryGB: 256,
|
||||
Cores: 64,
|
||||
InstanceENIs: 15,
|
||||
InstanceIPsPerENI: 30,
|
||||
InstanceIPsPerENI: 50,
|
||||
EphemeralDisks: []int{600, 600, 600, 600},
|
||||
},
|
||||
|
||||
|
@ -1697,7 +1680,7 @@ var MachineTypes []AWSMachineTypeInfo = []AWSMachineTypeInfo{
|
|||
// r3 family
|
||||
{
|
||||
Name: "r3.large",
|
||||
MemoryGB: 15.25,
|
||||
MemoryGB: 15,
|
||||
Cores: 2,
|
||||
InstanceENIs: 3,
|
||||
InstanceIPsPerENI: 10,
|
||||
|
@ -2236,7 +2219,7 @@ var MachineTypes []AWSMachineTypeInfo = []AWSMachineTypeInfo{
|
|||
// t1 family
|
||||
{
|
||||
Name: "t1.micro",
|
||||
MemoryGB: 0.613,
|
||||
MemoryGB: 0.61,
|
||||
Cores: 1,
|
||||
InstanceENIs: 2,
|
||||
InstanceIPsPerENI: 2,
|
||||
|
@ -2394,7 +2377,7 @@ var MachineTypes []AWSMachineTypeInfo = []AWSMachineTypeInfo{
|
|||
Name: "t3a.small",
|
||||
MemoryGB: 2,
|
||||
Cores: 2,
|
||||
InstanceENIs: 3,
|
||||
InstanceENIs: 2,
|
||||
InstanceIPsPerENI: 4,
|
||||
EphemeralDisks: nil,
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue