创建 EC2 实例集 - Amazon Elastic Compute Cloud

创建 EC2 实例集

要创建 EC2 实例集,请在 JSON 文件中定义实例集配置,然后使用 create-fleet 命令引用该文件。在 JSON 文件中,您必须指定实例集的总目标容量、竞价型实例和按需型实例的单独目标容量,以及用于定义实例集中实例配置(例如 AMI、实例类型、子网、可用区、一个或多个安全组)的启动模板。您可以选择指定其他配置,例如用于覆盖启动模板配置的参数、从 EC2 容量池中选择竞价型实例和按需型实例的分配策略,以及愿意为实例集支付的最高金额。有关更多信息,请参阅 EC2 实例集或竞价型实例集配置选项

EC2 实例集在有可用容量时启动按需型实例,在最高价超过竞价型实例价格并且有可用容量时启动竞价型实例。

如果实例集包含竞价型实例且类型为 maintain,Amazon EC2 会尝试在竞价型实例中断时维持实例集的目标容量。

EC2 队列限制

以下限制适用于 EC2 队列。

  • EC2 实例集仅可通过 Amazon EC2 APIAWS CLIAWS SDKAWS CloudFormation 创建。

  • EC2 队列请求不能跨 AWS 区域。您需要为每个区域创建单独的 EC2 队列。

  • EC2 队列请求不能跨同一可用区内的不同子网。

创建 EC2 实例集

要使用 EC2 实例集启动实例的实例集,只需在实例集请求中指定以下参数,实例集会使用其他参数的默认值:

  • LaunchTemplateIdLaunchTemplateName – 指定要使用的启动模板(其中包含要启动的实例的参数,例如实例类型和可用区)

  • TotalTargetCapacity – 指定机群的总目标容量

  • DefaultTargetCapacityType – 指定默认购买选项是按需型还是竞价型

要覆盖启动模板中指定的参数,可指定一个或多个覆盖。每个覆盖可以有不同的实例类型、可用区、子网和最高价,并且可以包含不同的权重容量。除了指定实例类型外,还可以指定实例必须具有的属性,Amazon EC2 将使用这些属性标识所有实例类型。有关更多信息,请参阅指定 EC2 实例集或竞价型实例集的实例类型选择属性

对于 instant 类型的 EC2 实例集,可以指定 Systems Manager 参数而非 AMI ID。您可以在覆盖或启动模板中指定 Systems Manager 参数。有关更多信息,请参阅 使用 Systems Manager 参数而非 AMI ID

在 JSON 文件中指定实例集参数。有关可以指定的所有可能参数的信息,请参阅查看所有的 EC2 实例集配置选项

有关实例集配置示例,请参阅 EC2 实例集 CLI 配置示例

目前没有控制台支持创建 EC2 Fleet。

创建 EC2 实例集

使用 create-fleet 命令创建实例集,并指定包含实例集配置参数的 JSON 文件。

aws ec2 create-fleet --cli-input-json file://file_name.json

以下是 requestmaintain 类型的队列的示例输出。

{ "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE" }

以下是启动了目标容量的 instant 类型队列的示例输出。

{ "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE", "Errors": [], "Instances": [ { "LaunchTemplateAndOverrides": { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE", "Version": "1" }, "Overrides": { "InstanceType": "c5.large", "AvailabilityZone": "us-east-1a" } }, "Lifecycle": "on-demand", "InstanceIds": [ "i-1234567890abcdef0", "i-9876543210abcdef9" ], "InstanceType": "c5.large", "Platform": null }, { "LaunchTemplateAndOverrides": { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE", "Version": "1" }, "Overrides": { "InstanceType": "c4.large", "AvailabilityZone": "us-east-1a" } }, "Lifecycle": "on-demand", "InstanceIds": [ "i-5678901234abcdef0", "i-5432109876abcdef9" ] ] }

以下是启动了部分目标容量并且出现“无法启动实例”错误的 instant 类型队列的示例输出。

{ "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE", "Errors": [ { "LaunchTemplateAndOverrides": { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE", "Version": "1" }, "Overrides": { "InstanceType": "c4.xlarge", "AvailabilityZone": "us-east-1a", } }, "Lifecycle": "on-demand", "ErrorCode": "InsufficientInstanceCapacity", "ErrorMessage": "" }, ], "Instances": [ { "LaunchTemplateAndOverrides": { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE", "Version": "1" }, "Overrides": { "InstanceType": "c5.large", "AvailabilityZone": "us-east-1a" } }, "Lifecycle": "on-demand", "InstanceIds": [ "i-1234567890abcdef0", "i-9876543210abcdef9" ] ] }

以下是未启动任何实例的 instant 类型队列的示例输出。

{ "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE", "Errors": [ { "LaunchTemplateAndOverrides": { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE", "Version": "1" }, "Overrides": { "InstanceType": "c4.xlarge", "AvailabilityZone": "us-east-1a", } }, "Lifecycle": "on-demand", "ErrorCode": "InsufficientCapacity", "ErrorMessage": "" }, { "LaunchTemplateAndOverrides": { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE", "Version": "1" }, "Overrides": { "InstanceType": "c5.large", "AvailabilityZone": "us-east-1a", } }, "Lifecycle": "on-demand", "ErrorCode": "InsufficientCapacity", "ErrorMessage": "" }, ], "Instances": [] }

创建 EC2 实例集来替换运行状况不佳的竞价型实例

EC2 队列每 2 分钟检查一次队列中实例的运行状况。实例的运行状况为 healthyunhealthy

EC2 队列 将使用 Amazon EC2 提供的状态检查来确定实例的运行状况。如果在连续三次运行状况检查中,实例状态检查或系统状态检查的状态有任一项为 unhealthy,则确定该实例的运行状况为 impaired。有关更多信息,请参阅Amazon EC2 实例的状态检查

您可以配置您的队列以替换运行状况不佳的竞价型实例。将 ReplaceUnhealthyInstances 设置为 true 以后,若竞价型实例报告为 unhealthy 则将其替换。在替换运行状况不佳的竞价型实例时,队列可能在几分钟内降至其目标容量之下。

要求
  • 仅对保持目标容量的 EC2 队列(类型 maintain 的队列)支持运行状况检查替换,不支持类型为 requestinstant 的队列。

  • 仅对竞价型实例支持运行状况检查替换。对于 按需型实例 不支持此功能。

  • 您可以将 EC2 队列配置为仅在您创建它时替换运行状况不佳的实例。

  • 用户仅在其有权调用 ec2:DescribeInstanceStatus 操作时才能使用运行状况检查替换。

配置 EC2 实例集 以替换运行状况不佳的竞价型实例
  1. 使用创建 EC2 实例集中用于创建 EC2 实例集的信息。

  2. 要将实例集配置为替换运行状况不佳的竞价型实例,请在 JSON 文件中将 ReplaceUnhealthyInstances 指定 true

查看所有的 EC2 实例集配置选项

要查看 EC2 机群配置参数的完整列表,可以生成 JSON 文件。有关每个参数的描述,请参阅 create-fleet

通过所有可能的 EC2 实例集参数生成 JSON 文件

使用 create-fleet (AWS CLI) 命令和 --generate-cli-skeleton 参数生成 EC2 机群 JSON 文件,并将输出定向到某个文件以将其保存。

aws ec2 create-fleet \ --generate-cli-skeleton input > ec2createfleet.json

下面是示例输出。

{ "DryRun": true, "ClientToken": "", "SpotOptions": { "AllocationStrategy": "price-capacity-optimized", "MaintenanceStrategies": { "CapacityRebalance": { "ReplacementStrategy": "launch" } }, "InstanceInterruptionBehavior": "hibernate", "InstancePoolsToUseCount": 0, "SingleInstanceType": true, "SingleAvailabilityZone": true, "MinTargetCapacity": 0, "MaxTotalPrice": "" }, "OnDemandOptions": { "AllocationStrategy": "prioritized", "CapacityReservationOptions": { "UsageStrategy": "use-capacity-reservations-first" }, "SingleInstanceType": true, "SingleAvailabilityZone": true, "MinTargetCapacity": 0, "MaxTotalPrice": "" }, "ExcessCapacityTerminationPolicy": "termination", "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateId": "", "LaunchTemplateName": "", "Version": "" }, "Overrides": [ { "InstanceType": "r5.metal", "MaxPrice": "", "SubnetId": "", "AvailabilityZone": "", "WeightedCapacity": 0.0, "Priority": 0.0, "Placement": { "AvailabilityZone": "", "Affinity": "", "GroupName": "", "PartitionNumber": 0, "HostId": "", "Tenancy": "dedicated", "SpreadDomain": "", "HostResourceGroupArn": "" }, "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 0 }, "MemoryMiB": { "Min": 0, "Max": 0 }, "CpuManufacturers": [ "amd" ], "MemoryGiBPerVCpu": { "Min": 0.0, "Max": 0.0 }, "ExcludedInstanceTypes": [ "" ], "InstanceGenerations": [ "previous" ], "SpotMaxPricePercentageOverLowestPrice": 0, "OnDemandMaxPricePercentageOverLowestPrice": 0, "BareMetal": "included", "BurstablePerformance": "required", "RequireHibernateSupport": true, "NetworkInterfaceCount": { "Min": 0, "Max": 0 }, "LocalStorage": "excluded", "LocalStorageTypes": [ "ssd" ], "TotalLocalStorageGB": { "Min": 0.0, "Max": 0.0 }, "BaselineEbsBandwidthMbps": { "Min": 0, "Max": 0 }, "AcceleratorTypes": [ "inference" ], "AcceleratorCount": { "Min": 0, "Max": 0 }, "AcceleratorManufacturers": [ "amd" ], "AcceleratorNames": [ "a100" ], "AcceleratorTotalMemoryMiB": { "Min": 0, "Max": 0 } } } ] } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 0, "OnDemandTargetCapacity": 0, "SpotTargetCapacity": 0, "DefaultTargetCapacityType": "on-demand", "TargetCapacityUnitType": "memory-mib" }, "TerminateInstancesWithExpiration": true, "Type": "instant", "ValidFrom": "1970-01-01T00:00:00", "ValidUntil": "1970-01-01T00:00:00", "ReplaceUnhealthyInstances": true, "TagSpecifications": [ { "ResourceType": "fleet", "Tags": [ { "Key": "", "Value": "" } ] } ], "Context": "" }