

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 建立 EC2 Fleet
<a name="create-ec2-fleet"></a>

若要建立 EC2 機群，請在 JSON 檔案中定義機群組態，並使用 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 命令參考檔案。在 JSON 檔案中，您必須指定機群的總目標容量、Spot 執行個體和隨需執行個體的個別目標容量，以及定義機群中執行個體組態的啟動範本，例如 AMI、執行個體類型、子網路或可用區域，以及一個或多個安全群組。您可以選擇指定其他組態，例如覆寫啟動範本組態的參數、從 EC2 容量集區中選取 Spot 執行個體和隨需執行個體的配置策略，以及您針對機群所願意支付的最高金額。如需詳細資訊，請參閱[EC2 機群或 Spot 機群的組態選項](ec2-fleet-configuration-strategies.md)。

EC2 機群會在容量可用時啟動隨需執行個體，並在您的最高價格超過 Spot 價格且容量可用時，啟動 Spot 執行個體。

如果您的機群包含 Spot 執行個體，且類型為 `maintain`，則 Amazon EC2 會在 Spot 執行個體中斷時，嘗試維護機群目標容量。

## EC2 Fleet 限制
<a name="EC2-fleet-limitations"></a>

下列限制適用於 EC2 Fleet：
+ 僅能透過 [Amazon EC2 API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html)、[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html)、[AWS SDK](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html#API_CreateFleet_SeeAlso) 和 [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ec2fleet.html) 建立 EC2 機群。
+ EC2 機群請求無法跨越 AWS 區域。您需要為每個區域建立個別的 EC2 Fleet。
+ EC2 Fleet 請求不能橫跨同一個可用區域的不同子網。

## 建立 EC2 Fleet
<a name="create-ec2-fleet-procedure"></a>

若您要使用 EC2 機群啟動執行個體機群，只需在機群請求中指定下列參數，機群將使用其他參數的預設值：
+ `LaunchTemplateId` 或 `LaunchTemplateName` – 指定要使用的啟動範本 (其中包含要啟動的執行個體參數，例如執行個體類型和可用區域)
+ `TotalTargetCapacity` – 指定機群的總目標容量
+ `DefaultTargetCapacityType` – 指定預設購買選項是隨需還是 Spot

若要覆寫啟動範本中指定的參數，您可以指定一或多個覆寫。每個覆寫可能因執行個體類型、可用區域、子網路和最高價格而異，且可能包含不同的加權容量。做為指定執行個體類型的替代方式，您可以指定執行個體必須具有的屬性，然後 Amazon EC2 會識別具有這些屬性的所有執行個體類型。如需詳細資訊，請參閱 [指定屬性，為 EC2 機群或 Spot 機群選取執行個體類型](ec2-fleet-attribute-based-instance-type-selection.md)。

對於類型為 `instant` 的 EC2 機群，您可以指定 Systems Manager 參數，而不是 AMI ID。您可以在覆寫或啟動範本中，指定 Systems Manager 參數。如需詳細資訊，請參閱[使用 Systems Manager 參數而非 AMI ID](create-launch-template.md#use-an-ssm-parameter-instead-of-an-ami-id)。

您可以指定 JSON 檔案中的機群參數。如需您可以指定的所有可能參數相關資訊，請參閱 [檢視所有 EC2 機群組態選項](#ec2-fleet-cli-skeleton)。

如需機群組態的範例，請參閱 [EC2 機群的範例 CLI 組態](ec2-fleet-examples.md)。

目前沒有主控台支援建立 EC2 Fleet。

**建立 EC2 機群**  
使用 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 命令來建立機群，並指定包含機群組態參數的 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 機群
<a name="ec2-fleet-health-checks"></a>

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

EC2 Fleet 會根據 Amazon EC2 提供的狀態檢查資訊，來判定執行個體的運作狀態。如果執行個體狀態檢查或系統狀態檢查的運作狀態檢查，出現連續三次為 `impaired`，則該執行個體即為 `unhealthy`。如需詳細資訊，請參閱[Amazon EC2 執行個體的狀態檢查](monitoring-system-instance-status-check.md)。

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

**要求**
+ 運作狀態檢查取代僅支援維持目標容量的 EC2 Fleet (類型 `maintain` 的機群)，不支援類型 `request` 或 `instant` 的機群。
+ 運作狀態檢查取代僅支援 競價型執行個體。此功能不支援 隨需執行個體。
+ 您可以設定 EC2 Fleet 只在建立執行個體時取代狀況不良的執行個體。
+ 使用者只有在擁有呼叫 `ec2:DescribeInstanceStatus` 動作的許可時，才能使用運作狀態檢查取代功能。

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

1. 使用資訊在 [建立 EC2 Fleet](#create-ec2-fleet-procedure) 中建立 EC2 機群。

1. 若要設定機群以取代運作狀態不佳的 Spot 執行個體，在 JSON 檔案中，針對 `ReplaceUnhealthyInstances` 請指定 `true`。

## 檢視所有 EC2 機群組態選項
<a name="ec2-fleet-cli-skeleton"></a>

若要檢視 EC2 Fleet 組態參數的完整清單，您可以產生 JSON 檔案。如需每個參數的描述，請參閱 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html)。

**產生所有可能 EC2 機群參數的 JSON 檔案**  
使用 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) (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": ""
}
```