使用 EC2 Fleet - Amazon Elastic Compute Cloud

使用 EC2 Fleet

若要開始使用 EC2 Fleet,您需要建立一個請求,其中包含總目標容量、隨需容量、Spot 容量、執行個體的一或多個啟動規格,以及您願意支付的最高價格。機群請求必須包含啟動範本,該範本定義機群啟動執行個體所需的資訊,例如 AMI、執行個體類型、子網或可用區域,以及一或多個安全群組。您可以為執行個體類型、子網、可用區域和您願意支付的最高價格指定啟動規格覆寫,並且可以為每個啟動規格覆寫指派加權容量。

EC2 Fleet 會在有可用容量時啟動 隨需執行個體,並在最高價格超過 Spot 價格和容量可用時啟動 競價型執行個體。

如果您的叢集包含 競價型執行個體,則 Amazon EC2 會在 Spot 價格變更時嘗試維持您的叢集目標容量。

maintainrequest 類型的 EC2 Fleet 請求會一直保持作用中狀態直到過期或您將其刪除。當您刪除 maintainrequest 類型的機群時,您可以指定該刪除是否會終止該機群中的執行個體。否則,隨需執行個體 會一直執行直到您將其終止為止,而 Spot 執行個體會一直執行直到中斷或您將其終止為止。

EC2 Fleet 請求狀態

EC2 Fleet 請求可以是下列任一狀態:

submitted

正在評估 EC2 Fleet 請求且 Amazon EC2 正準備啟動執行個體的目標數量。請求可以包含 隨需執行個體、競價型執行個體 或兩者皆包含。

active

EC2 Fleet 請求已驗證且 Amazon EC2 正在嘗試維持執行中的執行個體目標數目。此請求會一直維持在該狀態,直到修改或刪除。

modifying

正在修改 EC2 Fleet 請求。此請求會一直維持在該狀態,直到已完成修改或已刪除請求。只有 maintain 機群類型可以修改。此狀態不適用於其他請求類型。

deleted_running

EC2 Fleet 請求已刪除,且不會啟動其他執行個體。其現有執行個體將繼續執行直到中斷或手動終止。此請求會一直維持在該狀態,直到所有執行個體中斷或終止。刪除 EC2 Fleet 請求後,只有類型 maintainrequest 的 EC2 Fleet 可具有執行中的執行個體。不支援具有執行中執行個體的已刪除 instant 機群。此狀態不適用於 instant 機群。

deleted_terminating

EC2 Fleet 請求已刪除,且其執行個體已終止。此請求會一直維持在該狀態,直到所有執行個體終止。

deleted

EC2 Fleet 已刪除,且無執行中的執行個體。請求會在其執行個體終止之後兩天刪除。

下圖代表 EC2 Fleet 請求狀態之間的轉換。如果您超出您的機群限制,該請求會立即刪除。


					EC2 Fleet 請求狀態

EC2 Fleet 先決條件

啟動範本

啟動範本包含關於要啟動的執行個體資訊,例如執行個體類型、可用區域以及您願意支付的最高價格。如需詳細資訊,請參閱 從啟動範本啟動執行個體

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 Fleet 之前,請確認此角色存在。

注意

instant EC2 Fleet 不需要此角色。

若要建立角色,請依照下列所示使用 IAM 主控台。

為 EC2 Fleet 建立 AWSServiceRoleForEC2Fleet 角色

  1. 在以下網址開啟 IAM 主控台:https://console.aws.amazon.com/iam/

  2. 在導覽窗格中,選擇 Roles (角色),然後選擇 Create role (建立角色)

  3. 對於 Select type of trusted entity (選取信任的實體類型),選擇 AWS service ( 服務)

  4. 針對 Choose the service that will use this role (選擇將使用此角色的服務),選擇 EC2 - Fleet (EC2 - 機群),然後選擇 Next: Permissions (下一步:許可)Next: Tags (下一步:標籤)Next: Review (下一步:檢閱)

  5. 檢閱頁面上選擇建立角色

如果您不再需要使用 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 IAM 使用者的許可

如果您的 IAM 使用者將會建立或管理 EC2 Fleet,請務必依照下列方式授予這些使用者所需的許可。

將 EC2 Fleet 的存取權限授予 IAM 使用者

  1. 在以下網址開啟 IAM 主控台:https://console.aws.amazon.com/iam/

  2. 在導覽窗格中,選擇 Policies (政策)。

  3. 選擇 Create policy (建立政策)。

  4. 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:* 會授與 IAM 使用者權限,以呼叫所有 Amazon EC2 API 動作。若要將使用者限制於特定的 Amazon EC2 API 動作,請改為指定這些動作。

    IAM 使用者必須具有呼叫下列動作的權限:iam:ListRoles 動作 (以列舉現有的 IAM 角色)、iam:PassRole 動作 (以指定 EC2 Fleet 角色) 和 iam:ListInstanceProfiles 動作 (以列舉現有的執行個體描述檔)。

    (選用) 若要使 IAM 使用者能夠使用 IAM 主控台建立角色或執行個體描述檔,您還必須將下列動作新增至政策中:

    • iam:AddRoleToInstanceProfile

    • iam:AttachRolePolicy

    • iam:CreateInstanceProfile

    • iam:CreateRole

    • iam:GetRole

    • iam:ListPolicies

  5. Review policy (檢閱政策) 頁面上,輸入政策名稱和說明,然後選擇 Create policy (建立政策)

  6. 在導覽窗格中,選擇 Users (使用者) 然後選取該名使用者。

  7. Permissions (許可) 標籤上,選擇 Add permissions (新增許可)

  8. 選擇 Attach existing policies directly (直接連接現有政策)。選取您稍早建立的政策,然後選取下一步:檢閱

  9. 選擇 Add permissions (新增許可)。

EC2 Fleet 運作狀態檢查

EC2 Fleet 會每兩分鐘定期檢查機群中執行個體的運作狀態。執行個體的運作狀態會是 healthyunhealthy

EC2 Fleet 會根據 Amazon EC2 提供的狀態檢查資訊,來判定執行個體的運作狀態。如果執行個體狀態檢查或系統狀態檢查的運作狀態檢查,出現連續三次為 impaired,則該執行個體即為 unhealthy。如需詳細資訊,請參閱 您的執行個體的狀態檢查

您可以設定機群以取代運作狀態不佳的 競價型執行個體。ReplaceUnhealthyInstances 設為 true 以後,在報告為 unhealthy 時,則 Spot 執行個體會被取代。當取代一個狀態不佳的 Spot 執行個體時,機群可能會低於其目標容量長達幾分鐘。

要求

  • 運作狀態檢查取代僅支援維持目標容量的 EC2 Fleet (類型 maintain 的機群),不支援類型 requestinstant 的機群。

  • 運作狀態檢查取代僅支援 競價型執行個體。此功能不支援 隨需執行個體。

  • 您可以設定 EC2 Fleet 只在建立執行個體時取代狀況不良的執行個體。

  • IAM 使用者只有在擁有呼叫 ec2:DescribeInstanceStatus 動作的權限時,才能使用運作狀態檢查取代功能。

設定 EC2 Fleet 以取代運作狀態不佳的 競價型執行個體

  1. 遵循下列步驟來建立 EC2 Fleet。如需詳細資訊,請參閱 建立 EC2 Fleet

  2. 若要設定機群以取代運作狀態不佳的 競價型執行個體,請在 JSON 檔案 ReplaceUnhealthyInstances 中輸入 true

產生 EC2 Fleet JSON 組態檔案

若要檢視 EC2 Fleet 組態參數的完整清單,您可以產生 JSON 檔案。如需每個參數的說明,請參閱 AWS CLI 命令參考中的 create-fleet

使用命令列產生所有可能 EC2 Fleet 參數的 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": "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": "" }

建立 EC2 Fleet

若要建立 EC2 Fleet,您只需指定下列參數:

  • LaunchTemplateIdLaunchTemplateName – 指定要使用的啟動範本 (其中包含要啟動的執行個體參數,例如執行個體類型、可用區域和您願意支付的最高價格)

  • TotalTargetCapacity – 指定機群的總目標容量

  • DefaultTargetCapacityType – 指定預設購買選項是隨需還是 Spot

您可指定多個覆寫啟動範本的啟動規格。啟動規格因執行個體類型、可用區域、子網和最高價格而異,且可以包含不同的加權容量。或者,您可以指定執行個體必須具有的屬性,然後 Amazon EC2 會識別具有這些屬性的所有執行個體類型。如需詳細資訊,請參閱 EC2 Fleet 的屬性型執行個體類型選擇

如果您未指定參數,則機群會使用參數的預設值。

指定 JSON 檔案中的機群參數。如需詳細資訊,請參閱 產生 EC2 Fleet JSON 組態檔案

您僅能使用 AWS CLI 建立 EC2 Fleet。

若要建立 EC2 Fleet (AWS CLI)

  • 使用 create-fleet (AWS CLI) 命令來建立 EC2 Fleet,並指定包含機群組態參數的 JSON 檔案。

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

如需組態檔案範例,請參閱 EC2 Fleet 範例組態

以下是類型 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 Fleet

為便於將 EC2 Fleet 請求分類和進行管理,您可以利用自訂中繼資料來標記這些請求。您可以在建立 EC2 Fleet 請求時,或建立之後,將標籤指派給該請求。

當您標記機群請求時,由機群啟動的執行個體和磁碟區不會自動加上標記。您需要明確標記由機群啟動的執行個體和磁碟區。您可以選擇僅將標籤指派給機群請求,或僅指派給機群啟動的執行個體,或僅指派給連接至機群啟動之執行個體的磁碟區,或指派給前述三項。

注意

針對 instant 機群類型,您可以為連接至 隨需執行個體 和 競價型執行個體 的磁碟區加標籤。針對 requestmaintain 機群類型,您只可以為連接至 隨需執行個體 的磁碟區加標籤。

如需有關標籤運作方式的詳細資訊,請參閱標記您的 Amazon EC2 資源

必要條件

授與 IAM 使用者標記資源的許可。如需詳細資訊,請參閱 範例:標籤資源

授與 IAM 使用者標記資源的許可

建立包含下列項目的 IAM 政策:

  • ec2:CreateTags 動作。這會授與 IAM 使用者建立標籤的許可。

  • ec2:CreateFleet 動作。這會授予 IAM 使用者建立 EC2 Fleet 請求的許可。

  • 針對 Resource,建議您指定 "*"。這可讓使用者標記所有資源類型。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "TagEC2FleetRequest", "Effect": "Allow", "Action": [ "ec2:CreateTags", "ec2:CreateFleet" ], "Resource": "*" }
重要

我們目前不支援 create-fleet 資源的資源層級許可。如果您指定 create-fleet 作為資源,當您嘗試標記機群時,會收到未經授權的例外狀況。下列範例說明如何不要設定政策。

{ "Effect": "Allow", "Action": [ "ec2:CreateTags", "ec2:CreateFleet" ], "Resource": "arn:aws:ec2:us-east-1:111122223333:create-fleet/*" }

標記新的 EC2 Fleet 請求

若要在建立 EC2 Fleet 請求時加以標記,請在建立機群時所用的 JSON 檔案中指定金鑰值對。ResourceType 的值必須為 fleet。若您指定其他值,機群請求將會失敗。

標記由 EC2 Fleet 啟動的執行個體和磁碟區

若要在機群啟動執行個體時標記這些執行個體和磁碟區,請在 EC2 Fleet 請求中參考的啟動範本中指定標籤。

注意

您無法標記連接至 競價型執行個體、由 requestmaintain 機群類型啟動的磁碟區。

若要標記現有的 EC2 Fleet 請求、執行個體和磁碟區 (AWS CLI)

使用建立標籤命令來標記現有資源。

aws ec2 create-tags \ --resources fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE i-1234567890abcdef0 vol-1234567890EXAMPLE \ --tags Key=purpose,Value=test

說明您的 EC2 機群

您可說明您的 EC2 機群組態、您 EC2 機群中的執行個體,及您 EC2 機群的事件歷史記錄。

如要說明您的 EC2 機群 (AWS CLI)

使用 describe-fleets 命令來說明您的 EC2 Fleet。

aws ec2 describe-fleets
重要

若機群類型為 instant,則必須指定機群 ID,否則其不會顯示於回應中。包括 --fleet-ids,如下所示:

aws ec2 describe-fleets --fleet-ids fleet-8a22eee4-f489-ab02-06b8-832a7EXAMPLE

範例輸出

{ "Fleets": [ { "ActivityStatus": "fulfilled", "CreateTime": "2022-02-09T03:35:52+00:00", "FleetId": "fleet-364457cd-3a7a-4ed9-83d0-7b63e51bb1b7", "FleetState": "active", "ExcessCapacityTerminationPolicy": "termination", "FulfilledCapacity": 2.0, "FulfilledOnDemandCapacity": 0.0, "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "$Latest" } } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 2, "OnDemandTargetCapacity": 0, "SpotTargetCapacity": 2, "DefaultTargetCapacityType": "spot" }, "TerminateInstancesWithExpiration": false, "Type": "maintain", "ReplaceUnhealthyInstances": false, "SpotOptions": { "AllocationStrategy": "capacity-optimized", "InstanceInterruptionBehavior": "terminate" }, "OnDemandOptions": { "AllocationStrategy": "lowestPrice" } } ] }

使用 describe-fleet-instances 命令來說明特定 EC2 Fleet 的執行個體。執行中執行個體的傳回清單會定期重新整理且可能過期。

aws ec2 describe-fleet-instances --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE

範例輸出

{ "ActiveInstances": [ { "InstanceId": "i-09cd595998cb3765e", "InstanceHealth": "healthy", "InstanceType": "m4.large", "SpotInstanceRequestId": "sir-86k84j6p" }, { "InstanceId": "i-09cf95167ca219f17", "InstanceHealth": "healthy", "InstanceType": "m4.large", "SpotInstanceRequestId": "sir-dvxi7fsm" } ], "FleetId": "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" }

使用 describe-fleet-history 命令來說明特定時間之特定 EC2 Fleet 的歷史記錄。

aws ec2 describe-fleet-history --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE --start-time 2018-04-10T00:00:00Z

範例輸出

{ "HistoryRecords": [ { "EventInformation": { "EventSubType": "submitted" }, "EventType": "fleetRequestChange", "Timestamp": "2020-09-01T18:26:05.000Z" }, { "EventInformation": { "EventSubType": "active" }, "EventType": "fleetRequestChange", "Timestamp": "2020-09-01T18:26:15.000Z" }, { "EventInformation": { "EventDescription": "t2.small, ami-07c8bc5c1ce9598c3, ...", "EventSubType": "progress" }, "EventType": "fleetRequestChange", "Timestamp": "2020-09-01T18:26:17.000Z" }, { "EventInformation": { "EventDescription": "{\"instanceType\":\"t2.small\", ...}", "EventSubType": "launched", "InstanceId": "i-083a1c446e66085d2" }, "EventType": "instanceChange", "Timestamp": "2020-09-01T18:26:17.000Z" }, { "EventInformation": { "EventDescription": "{\"instanceType\":\"t2.small\", ...}", "EventSubType": "launched", "InstanceId": "i-090db02406cc3c2d6" }, "EventType": "instanceChange", "Timestamp": "2020-09-01T18:26:17.000Z" } ], "FleetId": "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", "LastEvaluatedTime": "1970-01-01T00:00:00.000Z", "StartTime": "2018-04-09T23:53:20.000Z" }

修改 EC2 Fleet

您可以修改處於 submittedactive 狀態中的 EC2 Fleet。當您修改機群時,機群會進入 modifying 狀態。

您僅可以修改 maintain 類型的 EC2 Fleet。您無法修改 requestinstant 類型的 EC2 Fleet。

您可以修改 EC2 Fleet 的下列參數:

  • target-capacity-specification – 增加或減少 TotalTargetCapacityOnDemandTargetCapacitySpotTargetCapacity 的目標容量。

  • excess-capacity-termination-policy – 如果機群的總目標容量減少到低於 EC2 Fleet 的目前大小,是否應終止執行中的執行個體。有效值為 no-terminationtermination

當您增加目標容量時,EC2 Fleet 會根據為 DefaultTargetCapacityType 所指定的執行個體購買選項,來啟動其他的執行個體,這些選項為 隨需執行個體 或 競價型執行個體。

如果 DefaultTargetCapacityTypespot,則 EC2 Fleet 會根據其分配策略啟動其他 競價型執行個體。如果分配策略為 lowest-price,則機群會從請求中價格最低的 Spot 容量集區啟動執行個體。如果分配策略為 diversified,則機群會在請求的集區中分發執行個體。

當您降低目標容量時,EC2 Fleet 會刪除超過新目標容量的任何開放請求。您可以請求機群終止執行個體,直到機群大小達到新的目標容量。如果分配策略為 lowest-price,則機群會以最高每單位價格終止執行個體。如果分配策略為 diversified,則機群會在集區中終止執行個體。或者,您可以請求該 EC2 Fleet 將機群保持為目前的大小,但不能取代任何中斷的 競價型執行個體 或任何您手動終止的執行個體。

當 EC2 Fleet 因為目標容量減少而終止 Spot 執行個體時,執行個體會收到 Spot 執行個體中斷通知。

若要修改 EC2 Fleet (AWS CLI)

使用 modify-fleet 命令來更新特定 EC2 Fleet 的目標容量。

aws ec2 modify-fleet \ --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --target-capacity-specification TotalTargetCapacity=20

如果您要降低目標容量,但希望保持目前的大小,則可以按照下列方式修改前一個命令。

aws ec2 modify-fleet \ --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --target-capacity-specification TotalTargetCapacity=10 \ --excess-capacity-termination-policy no-termination

刪除 EC2 Fleet

如果您不再需要某個 EC2 Fleet,您可以將其刪除。在您刪除機群後,該機群不會再啟動新的執行個體。

刪除時 EC2 Fleet,必須指定是否也要終止其執行個體。如果您指定在刪除機群時必須終止執行個體,則其將進入 deleted_terminating 狀態。否則會進入 deleted_running 狀態,且執行個體會一直執行直到中斷或您手動終止。

限制

  • 您可以在單一請求中刪除多達 25 個 instant 機群。如果超過此數目,則不會刪除 instant 機群,並會傳回錯誤。單一請求中可刪除的類型 maintainrequest 機群數目沒有限制。

  • 在刪除 instant 機群的單一要求中,最多可終止 1000 個執行個體。

若要刪除 EC2 Fleet 並終止其執行個體 (AWS CLI)

使用 delete-fleets 命令和 --terminate-instances 參數來刪除指定的 EC2 Fleet 和終止執行個體。

aws ec2 delete-fleets \ --fleet-ids fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --terminate-instances

下列為範例輸出。

{ "UnsuccessfulFleetDeletions": [], "SuccessfulFleetDeletions": [ { "CurrentFleetState": "deleted_terminating", "PreviousFleetState": "active", "FleetId": "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" } ] }

若要刪除 EC2 Fleet 但不終止執行個體 (AWS CLI)

您可以使用 --no-terminate-instances 參數來修改前一個命令和刪除指定的 EC2 Fleet,而不需終止執行個體。

注意

--no-terminate-instances 不支援 instant 機群。

aws ec2 delete-fleets \ --fleet-ids fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --no-terminate-instances

下列為範例輸出。

{ "UnsuccessfulFleetDeletions": [], "SuccessfulFleetDeletions": [ { "CurrentFleetState": "deleted_running", "PreviousFleetState": "active", "FleetId": "fleet-4b8aaae8-dfb5-436d-a4c6-3dafa4c6b7dcEXAMPLE" } ] }

當機群無法刪除時進行故障診斷

如果刪除 EC2 Fleet 失敗,則輸出中的 UnsuccessfulFleetDeletions 會傳回的 EC2 Fleet ID、錯誤碼和錯誤訊息。

錯誤代碼為:

  • ExceededInstantFleetNumForDeletion

  • fleetIdDoesNotExist

  • fleetIdMalformed

  • fleetNotInDeletableState

  • NoTerminateInstancesNotSupported

  • UnauthorizedOperation

  • unexpectedError

ExceededInstantFleetNumForDeletion 疑難排解

如果您在單一請求中嘗試刪除超過 25 個 instant 機群,則會傳回 ExceededInstantFleetNumForDeletion 錯誤。下列為此錯誤的範例輸出。

{ "UnsuccessfulFleetDeletions": [ { "FleetId": " fleet-5d130460-0c26-bfd9-2c32-0100a098f625", "Error": { "Message": "Can’t delete more than 25 instant fleets in a single request.", "Code": "ExceededInstantFleetNumForDeletion" } }, { "FleetId": "fleet-9a941b23-0286-5bf4-2430-03a029a07e31", "Error": { "Message": "Can’t delete more than 25 instant fleets in a single request.", "Code": "ExceededInstantFleetNumForDeletion" } } . . . ], "SuccessfulFleetDeletions": [] }

NoTerminateInstancesNotSupported 疑難排解

如果您指定在刪除 instant 機群時不得終止該機群中的執行個體,則會傳回 NoTerminateInstancesNotSupported 錯誤。--no-terminate-instances 不支援 instant 機群。下列為此錯誤的範例輸出。

{ "UnsuccessfulFleetDeletions": [ { "FleetId": "fleet-5d130460-0c26-bfd9-2c32-0100a098f625", "Error": { "Message": "NoTerminateInstances option is not supported for instant fleet", "Code": "NoTerminateInstancesNotSupported" } } ], "SuccessfulFleetDeletions": []

UnauthorizedOperation 疑難排解

如果沒有終止執行個體的許可,您在刪除必須終止其執行個體的機群時,會收到 UnauthorizedOperation 錯誤。以下是錯誤回應。

<Response><Errors><Error><Code>UnauthorizedOperation</Code><Message>You are not authorized to perform this operation. Encoded authorization failure message: VvuncIxj7Z_CPGNYXWqnuFV-YjByeAU66Q9752NtQ-I3-qnDLWs6JLFd KnSMMiq5s6cGqjjPtEDpsnGHzzyHasFHOaRYJpaDVravoW25azn6KNkUQQlFwhJyujt2dtNCdduJfrqcFYAjlEiRMkfDHt7N63SKlweKUl BHturzDK6A560Y2nDSUiMmAB1y9UNtqaZJ9SNe5sNxKMqZaqKtjRbk02RZu5V2vn9VMk6fm2aMVHbY9JhLvGypLcMUjtJ76H9ytg2zRlje VPiU5v2s-UgZ7h0p2yth6ysUdhlONg6dBYu8_y_HtEI54invCj4CoK0qawqzMNe6rcmCQHvtCxtXsbkgyaEbcwmrm2m01-EMhekLFZeJLr DtYOpYcEl4_nWFX1wtQDCnNNCmxnJZAoJvb3VMDYpDTsxjQv1PxODZuqWHs23YXWVywzgnLtHeRf2o4lUhGBw17mXsS07k7XAfdPMP_brO PT9vrHtQiILor5VVTsjSPWg7edj__1rsnXhwPSu8gI48ZLRGrPQqFq0RmKO_QIE8N8s6NWzCK4yoX-9gDcheurOGpkprPIC9YPGMLK9tug </Message></Error></Errors><RequestID>89b1215c-7814-40ae-a8db-41761f43f2b0</RequestID></Response>

若要解決錯誤,您必須將 ec2:TerminateInstances 動作新增至 IAM 政策,如下列範例所示。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DeleteFleetsAndTerminateInstances", "Effect": "Allow", "Action": [ "ec2:DeleteFleets" "ec2:TerminateInstances" ], "Resource": "*" } ] }