本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立EC2艦隊
若要建立EC2叢集,請在JSON檔案中定義叢集配置,並使用 create- AWS CLI fleet 指令參考檔案。在JSON檔案中,您必須指定叢集的目標容量總計、Spot 執行個體和隨需執行個體的個別目標容量,以及定義叢集中執行個體組態的啟動範本,例如執行個體類型AMI、子網路或可用區域,以及一或多個安全群組。您可以選擇性地指定其他組態,例如用於覆寫啟動範本設定的參數、從EC2容量集區選取 Spot 執行個體和隨需執行個體的配置策略,以及願意為叢集支付的最高金額。如需詳細資訊,請參閱您的EC2車隊或 Spot 叢集的組態選項。
EC2叢集會在容量可用時啟動隨需執行個體,並在您的最高價超過 Spot 價格和可用容量時啟動 Spot 執行個體。
如果您的叢集包含 Spot 執行個體且屬於類型maintain
,Amazon EC2 會在 Spot 執行個體中斷時嘗試維持叢集目標容量。
EC2機隊限制
下列限制適用於「EC2艦隊」:
-
只有透過 Amazon EC2 API、、AWS CLI和才能建立EC2叢集AWS CloudFormation。AWS SDKs
-
EC2叢集請求無法跨越 AWS 區域。您需要為每個區域建立單獨的EC2艦隊。
-
EC2叢集要求無法跨越來自相同可用區域的不同子網路。
EC2機隊先決條
若要建立EC2叢集,必須符合下列先決條件:
啟動範本
啟動範本會指定要啟動之執行個體的組態資訊,例如執行個體類型和可用區域。如需啟動範本的詳細資訊,請參閱在 Amazon 啟動範本中存放執行個體EC2啟動參數。
叢集的EC2服務連結角色
此AWSServiceRoleForEC2Fleet
角色授與EC2叢集權限,以代表您要求、啟動、終止和標記執行個體。Amazon EC2 使用此服務連結角色來完成下列動作:
-
ec2:RunInstances
– 啟動執行個體。 -
ec2:RequestSpotInstances
– 請求 競價型執行個體。 -
ec2:TerminateInstances
– 終止執行個體。 -
ec2:DescribeImages
— 描述 Amazon 機器映像(AMIs)的實例。 -
ec2:DescribeInstanceStatus
— 描述執行個體的狀態。 -
ec2:DescribeSubnets
— 描述執行個體的子網路。 -
ec2:CreateTags
— 將標籤新增至EC2叢集、執行個體和磁碟區。
在使用 AWS CLI 或建立EC2叢集之前,請確定此角色已存在。API
注意
instant
EC2艦隊不需要此角色。
若要建立角色,請依照下列方式使用IAM主控台。
若要建立EC2艦隊 AWSServiceRoleForEC2Fleet 角色
在開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
在導覽窗格中,選擇 Roles (角色)。
-
選擇 Create Role (建立角色)。
-
在 Select trusted entity (選取信任的實體) 頁面上,執行以下作業:
-
針對信任的實體類型,請選擇 AWS 服務。
-
在 [使用案例] 下,針對 [服務] 或 [使用案例],選擇 EC2 [叢集]
提示
一定要選擇 EC2-艦隊。如果您選擇 EC2,[使用案例] 清單中不會顯示 [EC2-叢集] 使用案例。EC2-叢集使用案例會自動建立具有所需IAM權限的原則,並將建議AWSServiceRoleForEC2Fleet做為角色名稱。
-
選擇 Next (下一步)。
-
-
在 Add permissions (新增許可) 頁面上,選擇 Next (下一步)。
-
在命名、檢閱和建立頁面上,選擇建立角色。
如果您不再需要使用EC2艦隊,建議您刪除該AWSServiceRoleForEC2Fleet角色。從您的帳戶中刪除此角色後,如果您建立其他機群,則可以再次建立此角色。
如需詳細資訊,請參閱IAM使用指南中的服務連結角色。
授予客戶受管金鑰的存取權,以便搭配加密AMIs和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服務連結角色所指定。ARNaws 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叢集使用者的權限
如果您的使用者將建立或管理EC2叢集,請務必授予他們必要的權限。
若要為EC2叢集建立原則
在開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
在導覽窗格中,選擇政策。
-
選擇 Create policy (建立政策)。
-
在 [建立原則] 頁面上,選擇索JSON引標籤,以下列項目取代文字,然後選擇 [檢閱原則]。
{ "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角色的權限、指定EC2叢集角色的iam:PassRole
動作,以及列舉現有執行個體設定檔的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艦隊
若要使用叢集啟動執行個體EC2叢集,您只需在叢集請求中指定下列參數,叢集將使用其他參數的預設值:
-
LaunchTemplateId
或LaunchTemplateName
— 指定要使用的啟動範本 (其中包含要啟動之執行個體的參數,例如執行個體類型和可用區域) -
TotalTargetCapacity
– 指定機群的總目標容量 -
DefaultTargetCapacityType
– 指定預設購買選項是隨需還是 Spot
若要覆寫啟動範本中指定的參數,您可以指定一或多個覆寫。每個覆寫可能會因執行個體類型、可用區域、子網路和最高價格而有所不同,並且可能包含不同的加權容量。作為指定執行個體類型的替代方法,您可以指定執行個體必須具有的屬性,Amazon EC2 將使用這些屬性識別所有執行個體類型。如需詳細資訊,請參閱指定EC2叢集或 Spot 叢集的執行個體類型選取屬性。
對於類型的EC2叢集instant
,您可以指定「Systems Manager」參數而不是 AMI ID。您可以在取代或啟動樣板中指定「Systems Manager」參數。如需詳細資訊,請參閱使用「Systems Manager」參數而不是 AMI ID。
您可以在JSON檔案中指定叢集參數。如需有關可指定之所有可能參數的資訊,請參閱檢視所有EC2車隊配置選項。
如需叢集組態範例,請參閱EC2叢集的範例CLI組態。
目前不支援建立EC2叢集的主控台。
若要建立EC2叢集
-
使用 create-fleet (AWS CLI) 指令來建立叢集,並指定包含叢集組態參數的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叢集每兩分鐘檢查叢集中執行個體的健全狀態。執行個體的運作狀態會是 healthy
或 unhealthy
。
EC2叢集使用 Amazon 提供的狀態檢查來判斷執行個體的運作狀態EC2。如果執行個體狀態檢查或系統狀態檢查的運作狀態檢查,出現連續三次為 impaired
,則該執行個體即為 unhealthy
。如需詳細資訊,請參閱Amazon EC2 執行個體的狀態檢查。
您可以設定機群以取代運作狀態不佳的 競價型執行個體。ReplaceUnhealthyInstances
設為 true
以後,在報告為 unhealthy
時,則 Spot 執行個體會被取代。當取代一個狀態不佳的 Spot 執行個體時,機群可能會低於其目標容量長達幾分鐘。
要求
-
只有維持目標容量 (類型的機EC2隊
maintain
) 的機隊才支援 Health 狀態檢查更換,而不支援或類型的機隊。request
instant
-
運作狀態檢查取代僅支援 競價型執行個體。此功能不支援 隨需執行個體。
-
您可以將EC2叢集設定為只有在建立時才更換運作狀態不良的執行個體。
-
使用者只有在擁有呼叫
ec2:DescribeInstanceStatus
動作的許可時,才能使用運作狀態檢查取代功能。
設定EC2叢集以取代運作狀態不良的 Spot 執行個體
-
使用資訊在中建立EC2叢集建立EC2艦隊。
-
若要設定叢集以取代運作狀態不良的 Spot 執行個體,請在JSON檔案中指定
true
。ReplaceUnhealthyInstances
檢視所有EC2車隊配置選項
若要檢視EC2叢集組態參數的完整清單,您可以產生JSON檔案。如需每個參數的說明,請參閱 AWS CLI 命令參考中的 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": ""
}