本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立 EC2 Fleet
若要建立 EC2 機群,請在 JSON 檔案中定義機群組態,並使用 create-fleet
EC2 機群會在容量可用時啟動隨需執行個體,並在您的最高價格超過 Spot 價格且容量可用時,啟動 Spot 執行個體。
如果您的機群包含 Spot 執行個體,且類型為 maintain
,則 Amazon EC2 會在 Spot 執行個體中斷時,嘗試維護機群目標容量。
EC2 Fleet 限制
下列限制適用於 EC2 Fleet:
-
僅能透過 Amazon EC2 API、AWS CLI
、AWS SDK 和 AWS CloudFormation 建立 EC2 機群。 -
EC2 機群請求無法跨越 AWS 區域。您需要為每個區域建立個別的 EC2 Fleet。
-
EC2 Fleet 請求不能橫跨同一個可用區域的不同子網。
EC2 Fleet 先決條件
若要建立 EC2 Fleet,必須具備下列必要條件:
啟動範本
啟動範本會指定所要啟動執行個體的組態資訊,例如執行個體類型和可用區域。如需啟動範本的詳細資訊,請參閱 將執行個體啟動參數存放在 Amazon EC2 啟動範本中。
EC2 Fleet 的服務連結角色
AWSServiceRoleForEC2Fleet
角色會授與 EC2 Fleet 許可,以代表您請求、啟動、終止和標記執行個體。Amazon EC2 會使用此服務連結角色來完成下列動作:
-
ec2:RunInstances
– 啟動執行個體。 -
ec2:RequestSpotInstances
– 請求 競價型執行個體。 -
ec2:TerminateInstances
– 終止執行個體。 -
ec2:DescribeImages
- 描述執行個體的 Amazon Machine Images (AMI)。 -
ec2:DescribeInstanceStatus
- 描述執行個體的狀態。 -
ec2:DescribeSubnets
- 描述執行個體的子網絡。 -
ec2:CreateTags
– 將標籤新增至 EC2 Fleet、執行個體和磁碟區。
在使用 AWS CLI 或 API 建立 EC2 機群之前,請確定此角色存在。
注意
instant
EC2 Fleet 不需要此角色。
若要建立角色,請依照下列所示使用 IAM 主控台。
為 EC2 Fleet 建立 AWSServiceRoleForEC2Fleet 角色
在以下網址開啟 IAM 主控台:https://console.aws.amazon.com/iam/
。 -
在導覽窗格中,選擇角色。
-
選擇 Create Role (建立角色)。
-
在 Select trusted entity (選取信任的實體) 頁面上,執行以下作業:
-
針對信任的實體類型,請選擇 AWS 服務。
-
在使用案例下,針對服務或使用案例,選擇 EC2 - 機群。
提示
請務必選擇 EC2 - 機群。如果您選擇 EC2,則 EC2 - 機群使用案例不會出現在使用案例清單中。EC2 - 機群使用案例會自動建立具有必要 IAM 許可的政策,並將建議 AWSServiceRoleForEC2Fleet 做為角色名稱。
-
選擇 Next (下一步)。
-
-
在 Add permissions (新增許可) 頁面上,選擇 Next (下一步)。
-
在命名、檢閱和建立頁面上,選擇建立角色。
如果您不再需要使用 EC2 Fleet,建議您刪除 AWSServiceRoleForEC2Fleet 角色。從您的帳戶中刪除此角色後,如果您建立其他機群,則可以再次建立此角色。
如需詳細資訊,請參閱「IAM 使用者指南」中的服務連結角色。
授予客戶受管金鑰存取權,以便與加密的 AMI 和 EBS 快照搭配使用
如果您在 EC2 機群中指定加密的 AMI 或加密的 Amazon EBS 快照,並使用 AWS KMS 金鑰進行加密,您必須授予 AWSServiceRoleForEC2Fleet 角色許可,才能使用客戶受管金鑰,以便 Amazon EC2 可以代表您啟動執行個體。若要執行此動作,您必須將授予新增至客戶受管金鑰,如下列程序所示。
提供許可時,授與為金鑰政策的替代方案。如需詳細資訊,請參閱「AWS Key Management Service 開發人員指南」中的使用授與和在 AWS KMS中使用金鑰政策。
若要授予 AWSServiceRoleForEC2Fleet 角色許可以使用客戶受管金鑰
-
使用 create-grant
命令將授予新增至客戶受管金鑰,並指定獲授予許可能夠執行授予所允許作業的主體 (AWSServiceRoleForEC2Fleet 服務連結角色)。客戶受管金鑰由 key-id
參數和客戶受管金鑰的 ARN 指定。委託人是透過grantee-principal
參數和 AWSServiceRoleForEC2Fleet 服務連結角色的 ARN 指定。aws kms create-grant \ --region
us-east-1
\ --key-id arn:aws:kms:us-east-1
:444455556666
:key/1234abcd-12ab-34cd-56ef-1234567890ab
\ --grantee-principal arn:aws:iam::111122223333
:role/AWSServiceRoleForEC2Fleet \ --operations "Decrypt" "Encrypt" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "CreateGrant" "DescribeKey" "ReEncryptFrom" "ReEncryptTo"
EC2 Fleet 使用者的許可
如果使用者將會建立或管理 EC2 Fleet,請務必授予這些使用者所需的許可。
為 EC2 Fleet 建立政策
開啟位於 https://console.aws.amazon.com/iam/
的 IAM 主控台。 -
在導覽窗格中,選擇政策。
-
選擇 Create policy (建立政策)。
-
在 Create policy (建立政策) 頁面上,選擇 JSON 索引標籤,接著使用下列內容來取代其文字,然後選擇 Review policy (檢閱政策)。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:ListRoles", "iam:PassRole", "iam:ListInstanceProfiles" ], "Resource":"arn:aws:iam::123456789012:role/DevTeam*" } ] }
ec2:*
會授與使用者權限,以呼叫所有 Amazon EC2 API 動作。若要將使用者限制於特定的 Amazon EC2 API 動作,請改為指定這些動作。使用者必須具有呼叫下列動作的權限:
iam:ListRoles
動作 (以列舉現有的 IAM 角色)、iam:PassRole
動作 (以指定 EC2 Fleet 角色) 和iam:ListInstanceProfiles
動作 (以列舉現有的執行個體設定檔)。(選用) 若要讓使用者能夠使用 IAM 主控台建立角色或執行個體設定檔,您也必須將下列動作新增至政策中:
-
iam:AddRoleToInstanceProfile
-
iam:AttachRolePolicy
-
iam:CreateInstanceProfile
-
iam:CreateRole
-
iam:GetRole
-
iam:ListPolicies
-
-
在 Review policy (檢閱政策) 頁面上,輸入政策名稱和說明,然後選擇 Create policy (建立政策)。
-
若要提供存取權,請新增權限至您的使用者、群組或角色:
-
中的使用者和群組 AWS IAM Identity Center:
建立權限合集。請按照 AWS IAM Identity Center 使用者指南 中的 建立權限合集 說明進行操作。
-
透過身分提供者在 IAM 中管理的使用者:
建立聯合身分的角色。遵循「IAM 使用者指南」的為第三方身分提供者 (聯合) 建立角色中的指示。
-
IAM 使用者:
-
建立您的使用者可擔任的角色。請按照「IAM 使用者指南」的為 IAM 使用者建立角色中的指示。
-
(不建議) 將政策直接附加至使用者,或將使用者新增至使用者群組。請遵循 IAM 使用者指南的新增許可到使用者 (主控台) 中的指示。
-
-
建立 EC2 Fleet
若您要使用 EC2 機群啟動執行個體機群,只需在機群請求中指定下列參數,機群將使用其他參數的預設值:
-
LaunchTemplateId
或LaunchTemplateName
– 指定要使用的啟動範本 (其中包含要啟動的執行個體參數,例如執行個體類型和可用區域) -
TotalTargetCapacity
– 指定機群的總目標容量 -
DefaultTargetCapacityType
– 指定預設購買選項是隨需還是 Spot
若要覆寫啟動範本中指定的參數,您可以指定一或多個覆寫。每個覆寫可能因執行個體類型、可用區域、子網路和最高價格而異,且可能包含不同的加權容量。做為指定執行個體類型的替代方式,您可以指定執行個體必須具有的屬性,然後 Amazon EC2 會識別具有這些屬性的所有執行個體類型。如需詳細資訊,請參閱 指定屬性,為 EC2 機群或 Spot 機群選取執行個體類型。
對於類型為 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
以下是類型 request
或 maintain
的叢集輸出範例。
{
"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": []
}
建立取代 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--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": ""
}