本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立 EC2 Fleet
若要建立 EC2 機群,請在 JSON 檔案中定義機群組態,並使用 create-fleet 命令參考檔案。在 JSON 檔案中,您必須指定機群的總目標容量、Spot 執行個體和隨需執行個體的個別目標容量,以及定義機群中執行個體組態的啟動範本,例如 AMI、執行個體類型、子網路或可用區域,以及一個或多個安全群組。您可以選擇指定其他組態,例如覆寫啟動範本組態的參數、從 EC2 容量集區中選取 Spot 執行個體和隨需執行個體的配置策略,以及您針對機群所願意支付的最高金額。如需詳細資訊,請參閱EC2 機群或 Spot 機群的組態選項。
EC2 機群會在容量可用時啟動隨需執行個體,並在您的最高價格超過 Spot 價格且容量可用時,啟動 Spot 執行個體。
如果您的機群包含 Spot 執行個體,且類型為 maintain,則 Amazon EC2 會在 Spot 執行個體中斷時,嘗試維護機群目標容量。
EC2 Fleet 限制
下列限制適用於 EC2 Fleet:
-
僅能透過 Amazon EC2 API、AWS CLI、AWS SDK 和 CloudFormation 建立 EC2 機群。
-
EC2 機群請求無法跨越 AWS 區域。您需要為每個區域建立個別的 EC2 Fleet。
-
EC2 Fleet 請求不能橫跨同一個可用區域的不同子網。
建立 EC2 Fleet
若您要使用 EC2 機群啟動執行個體機群,只需在機群請求中指定下列參數,機群將使用其他參數的預設值:
-
LaunchTemplateId或LaunchTemplateName– 指定要使用的啟動範本 (其中包含要啟動的執行個體參數,例如執行個體類型和可用區域) -
TotalTargetCapacity– 指定機群的總目標容量 -
DefaultTargetCapacityType– 指定預設購買選項是隨需還是 Spot
若要覆寫啟動範本中指定的參數,您可以指定一或多個覆寫。每個覆寫可能因執行個體類型、可用區域、子網路和最高價格而異,且可能包含不同的加權容量。做為指定執行個體類型的替代方式,您可以指定執行個體必須具有的屬性,然後 Amazon EC2 會識別具有這些屬性的所有執行個體類型。如需詳細資訊,請參閱 指定屬性,為 EC2 機群或 Spot 機群選取執行個體類型。
對於類型為 的 EC2 機群instant,您也可以覆寫下列啟動範本參數:
-
IamInstanceProfile– 要與執行個體建立關聯的 IAM 執行個體描述檔。如需詳細資訊,請參閱Amazon EC2 的 IAM 的角色。 -
KeyName– 用於執行個體的金鑰對名稱。如需詳細資訊,請參閱Amazon EC2 金鑰對和 Amazon EC2 執行個體。 -
MetadataOptions– 執行個體的執行個體中繼資料服務組態。如需詳細資訊,請參閱使用執行個體中繼資料服務存取執行個體中繼資料。
對於類型為 instant 的 EC2 機群,您可以指定 Systems Manager 參數,而不是 AMI ID。您可以在覆寫或啟動範本中,指定 Systems Manager 參數。如需詳細資訊,請參閱使用 Systems Manager 參數而非 AMI ID。
對於類型為 的 EC2 機群instant,您也可以使用 LaunchTemplateSpecificationUserData 參數在啟動範本規格層級指定使用者資料。使用此參數,您可以提供 base64 編碼的使用者資料,而無需將其包含在啟動範本本身中。在 base64 編碼之前,使用者資料不得超過 16 KB。
您可以指定 JSON 檔案中的機群參數。如需您可以指定的所有可能參數相關資訊,請參閱 檢視所有 EC2 機群組態選項。
如需機群組態的範例,請參閱 EC2 機群的範例 CLI 組態。
目前沒有主控台支援建立 EC2 Fleet。
建立 EC2 機群
使用 create-fleet 命令來建立機群,並指定包含機群組態參數的 JSON 檔案。
aws ec2 create-fleet --cli-input-json file://file_name.json
以下是類型 request 或 maintain 的叢集輸出範例。
{
"FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE"
}
以下是啟動目標容量之類型 instant 的叢集輸出範例。
回應包含每組已啟動執行個體的可用區域 ID、可用區域名稱和子網路 ID。
{
"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,
"AvailabilityZoneId": "use1-az1",
"AvailabilityZone": "us-east-1a",
"SubnetId": "subnet-0123456789abcdefEXAMPLE"
},
{
"LaunchTemplateAndOverrides": {
"LaunchTemplateSpecification": {
"LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE",
"Version": "1"
},
"Overrides": {
"InstanceType": "c4.large",
"AvailabilityZone": "us-east-1a"
}
},
"Lifecycle": "on-demand",
"InstanceIds": [
"i-5678901234abcdef0",
"i-5432109876abcdef9"
],
"AvailabilityZoneId": "use1-az1",
"AvailabilityZone": "us-east-1a",
"SubnetId": "subnet-0123456789abcdefEXAMPLE"
}
]
}
以下是啟動部分目標容量並附有未啟動之執行個體錯誤之類型 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": []
}
建立取代 Spot 執行個體運作狀態不佳的 EC2 機群
EC2 Fleet 會每兩分鐘定期檢查機群中執行個體的運作狀態。執行個體的運作狀態會是 healthy 或 unhealthy。
EC2 Fleet 會根據 Amazon EC2 提供的狀態檢查資訊,來判定執行個體的運作狀態。如果執行個體狀態檢查或系統狀態檢查的運作狀態檢查,出現連續三次為 impaired,則該執行個體即為 unhealthy。如需詳細資訊,請參閱Amazon EC2 執行個體的狀態檢查。
您可以設定機群以取代運作狀態不佳的 競價型執行個體。ReplaceUnhealthyInstances 設為 true 以後,在報告為 unhealthy 時,則 Spot 執行個體會被取代。當取代一個狀態不佳的 Spot 執行個體時,機群可能會低於其目標容量長達幾分鐘。
要求
-
運作狀態檢查取代僅支援維持目標容量的 EC2 Fleet (類型
maintain的機群),不支援類型request或instant的機群。 -
運作狀態檢查取代僅支援 競價型執行個體。此功能不支援 隨需執行個體。
-
您可以設定 EC2 Fleet 只在建立執行個體時取代狀況不良的執行個體。
-
使用者只有在擁有呼叫
ec2:DescribeInstanceStatus動作的許可時,才能使用運作狀態檢查取代功能。
設定 EC2 Fleet 以取代運作狀態不佳的 競價型執行個體
-
使用資訊在 建立 EC2 Fleet 中建立 EC2 機群。
-
若要設定機群以取代運作狀態不佳的 Spot 執行個體,在 JSON 檔案中,針對
ReplaceUnhealthyInstances請指定true。
檢視所有 EC2 機群組態選項
若要檢視 EC2 Fleet 組態參數的完整清單,您可以產生 JSON 檔案。如需每個參數的描述,請參閱 create-fleet。
產生所有可能 EC2 機群參數的 JSON 檔案
使用 create-fleet (AWS CLI) 命令和 --generate-cli-skeleton 參數來產生 EC2 Fleet 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": ""
}