

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

# 同步啟動執行個體
<a name="launch-instances-synchronously"></a>

Amazon EC2 Auto Scaling 提供兩種在 Auto Scaling 群組中啟動執行個體的方法：使用 LaunchInstances API 的非同步擴展行為和同步佈建。

透過同步佈建，您可以使用 LaunchInstances API 來請求特定可用區域中的特定執行個體數量。同步佈建提供下列優點：
+ 針對特定可用區域中容量可用性的立即意見回饋
+ 精確控制哪些可用區域執行個體在 中啟動
+ 可立即在協同運作系統中使用的確定性執行個體 IDs 
+ 根據實際容量限制進行即時擴展決策
+ 透過消除非同步 Auto Scaling 啟動的等待時間，加快擴展速度

使用非同步 Auto Scaling 時，當您變更所需的容量或擴展政策觸發時，Amazon EC2 Auto Scaling 會處理擴展請求並在背景啟動執行個體。您必須監控擴展活動或描述 Auto Scaling 群組，以判斷執行個體何時成功啟動。

**注意**  
LaunchInstances API 僅適用於使用啟動範本的 Auto Scaling 群組。不支援使用啟動組態的 Auto Scaling 群組。如果您的 Auto Scaling 群組使用啟動組態，您必須在使用同步佈建之前遷移至啟動範本。
LaunchInstances API 僅支援具有完全隨需或完全 Spot 購買選項的混合執行個體政策。不支援結合隨需執行個體和 Spot 執行個體的混合政策。
對於涵蓋多個可用區域的 Auto Scaling 群組，您必須指定目標可用區域或子網路。對於單一可用區群組，此參數是選用的。

## 同步佈建和非同步擴展
<a name="synchronous-vs-asynchronous-scaling"></a>

### 同步佈建
<a name="synchronous-provisioning-behavior"></a>

當您使用 LaunchInstances API 時，Amazon EC2 Auto Scaling：
+ 立即嘗試使用 CreateFleet 啟動請求的執行個體
+ 等待 CreateFleet 傳回執行個體 IDs然後再回應
+ 傳回執行個體 IDs、執行個體類型和可用區域的成功資訊
+ 傳回特定錯誤代碼和失敗的詳細資訊
+ 提供即時意見回饋，實現即時擴展決策

### 非同步擴展
<a name="asynchronous-scaling-behavior"></a>

當您使用非同步 Auto Scaling 方法，例如變更所需的容量或使用擴展政策時，Amazon EC2 Auto Scaling：
+ 在 API 中更新所需的容量，但不會立即傳回執行個體
+ Plans 執行個體會自動跨可用區域啟動
+ 透過背景工作流程啟動執行個體
+ 自動分配容量到多個可用區域以平衡
+ 使用內建重試邏輯處理啟動失敗

您必須輪詢擴展活動或描述 Auto Scaling 群組，以檢查啟動操作的狀態。

## 限制及考量
<a name="limitations-considerations-synchronous"></a>

使用同步佈建時，請記住下列注意事項和限制：
+ **啟動後的執行個體狀態** – API 傳回的執行個體處於擱置狀態。它們在後續工作流程或生命週期關聯期間仍可能會失敗。成功的 API 回應表示 EC2 已接受啟動請求並傳回執行個體 IDs。執行個體不會自動視為完全準備好處理工作負載，而且必須完成標準 EC2 和 Auto Scaling 生命週期程序。
+ **暖集區限制** – 目前不支援具有暖集區的 Auto Scaling 群組。如果您嘗試在已設定暖集區的 Auto Scaling 群組上呼叫 LaunchInstances API，API 會執行冷啟動，而不是使用暖集區執行個體，並傳回 UnsupportedOperation 錯誤。如需冷啟動的詳細資訊，請參閱[暖集區的限制](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-warm-pools.html#warm-pools-limitations)。
+ **API 逾時和重試** – 如果基礎 CreateFleet 操作所花費的時間超過預期，API 可能會逾時並傳回冪等字符。您可以使用相同的 ClientToken 來追蹤原始啟動操作，或使用 describe-instances 搭配用戶端字符來檢查啟動的執行個體。
+ **可用區域限制** – 如果您的 Auto Scaling 群組跨越多個可用區域，且已啟用可用區域重新平衡，則同步啟動執行個體可能會導致操作衝突：
  + 每次呼叫的單一可用區限制 – 每個 LaunchInstances API 呼叫只能以一個可用區域為目標，即使您的 Auto Scaling 群組跨越多個區域。
  + AZ 重新平衡衝突 - 如果您的 Auto Scaling 群組已啟用 AZ 重新平衡，跨不同 AZs循序呼叫可能會觸發其他非同步啟動，導致執行個體超過預期。請考慮暫停 AZ 重新平衡，以精確控制容量。如需詳細資訊，請參閱[暫停和繼續 Amazon EC2 Auto Scaling 程序](as-suspend-resume-processes.md)。
+ **部分成功案例** – 如果只有部分請求的容量可用，則 `LaunchInstances` API 可能會傳回部分成功，這是正常的 EC2 行為。API 會傳回成功啟動的執行個體，以及失敗啟動的錯誤詳細資訊。對於需要所有執行個體一起啟動的使用案例 （例如需要相同 AZ 中所有執行個體以實現低延遲的應用程式），您將需要終止部分啟動的執行個體，並在不同的 AZ 中重試。為容量敏感工作負載設計重試邏輯時，請考慮此行為。
+ **執行個體權重** – 如果您的 Auto Scaling 群組使用執行個體權重，RequestedCapacity 參數代表加權容量單位，而不是執行個體的數量。實際啟動的執行個體數量取決於選取的執行個體類型及其設定的權重。無論請求的加權容量為何，EC2 Auto Scaling 會限制每個 API 呼叫啟動至 100 個執行個體。
+ **混合執行個體類型** – LaunchInstances API 會使用 Auto Scaling 群組的現有混合執行個體政策來決定要啟動的執行個體類型。API 會根據您群組的配置策略和執行個體類型優先順序來啟動執行個體。

# 使用同步佈建啟動執行個體
<a name="launching-instances-synchronous-provisioning"></a>

您可以使用 LaunchInstances API，在 Auto Scaling 群組中同步啟動特定數量的執行個體。API 會在您指定的可用區域或子網路中啟動執行個體，並立即傳回執行個體 IDs或錯誤資訊。

## 先決條件
<a name="prerequisites-synchronous-provisioning"></a>

您必須先具有下列項目，才能使用 LaunchInstances API：
+ 使用啟動範本的 Auto Scaling 群組 （不支援啟動組態）
+ 您必須具有下列 IAM 動作的許可：
  + `autoscaling:LaunchInstances`
  + `ec2:CreateFleet`
  + `ec2:DescribeLaunchTemplateVersions`

## 使用同步佈建啟動執行個體
<a name="launch-instances-cli"></a>

您可以透過 啟動具有同步佈建的執行個體 AWS CLI。

### AWS CLI
<a name="aws-cli-launch-instances"></a>

若要使用同步佈建啟動執行個體：

```
aws autoscaling launch-instances \
        --auto-scaling-group-name group-name \
        --requested-capacity number \
        [--availability-zones zone-name] \
        [--subnet-ids subnet-id] \
        [--availability-zone-ids zone-id] \
        [--retry-strategy none|retry-with-group-configuration] \
        [--client-token token]
```

#### 範例
<a name="examples-launch-instances"></a>

**在特定可用區域中啟動執行個體**

```
aws autoscaling launch-instances \
        --auto-scaling-group-name my-asg \
        --requested-capacity 3 \
        --availability-zones us-east-1a \
        --retry-strategy retry-with-group-configuration
```

**在特定子網路中啟動執行個體**

```
aws autoscaling launch-instances \
        --auto-scaling-group-name my-asg \
        --requested-capacity 2 \
        --subnet-ids subnet-12345678 \
        --retry-strategy none \
        --client-token my-unique-token-123
```

#### 處理回應
<a name="handling-responses"></a>

**成功回應的範例：**

```
{
    "AutoScalingGroupName": "my-asg",
    "ClientToken": "my-unique-token-123",
    "Instances": [
        {
            "InstanceType": "m5.xlarge",
            "AvailabilityZone": "us-east-1a",
            "AvailabilityZoneId": "use1-az1",
            "SubnetId": "subnet-12345678",
            "MarketType": "OnDemand",
            "InstanceIds": ["i-0123456789abcdef0", "i-0fedcba9876543210"]
        }
    ],
    "Errors": []
}
```

**出現錯誤的回應範例**

```
{
    "AutoScalingGroupName": "my-asg",
    "ClientToken": "my-unique-token-123",
    "Instances": [],
    "Errors": [
       {
        "InstanceType": "m5.large",
        "AvailabilityZone": "us-east-1a",
        "AvailabilityZoneId": "use1-az1",
        "SubnetId": "subnet-12345678",
        "MarketType": "OnDemand",
        "ErrorCode": "InsufficientInstanceCapacity",
        "ErrorMessage": "There is not enough capacity to fulfill your request for instance type 'm5.large' in 'us-east-1a'"
        }
    ]
}
```

## 處理啟動失敗和重試
<a name="handle-launch-failures-retries"></a>

當 LaunchInstances API 遇到失敗時，您可以使用冪等字符和適當的重試政策來實作重試策略。

您可以使用用戶端字符參數重試請求。您也可以使用下列重試策略：
+ `RetryStrategy: none` （預設） - 如果 API 呼叫失敗，Auto Scaling 群組所需的容量保持不變，不會自動重試。
+ `RetryStrategy: retry-with-group-configuration` - 如果 API 呼叫失敗，Auto Scaling 群組所需的容量會增加請求的數量，Auto Scaling 將使用群組的標準組態和程序自動重試啟動執行個體。

的重試行為`RetryStrategy: retry-with-group-configuration`取決於失敗類型：
+ **驗證錯誤**：由於無法繼續操作，因此不會增加所需的容量。例如，無效的參數或不支援的組態。
+ **容量錯誤**：所需容量增加，Auto Scaling 將使用群組的正常擴展程序，以非同步方式重試啟動執行個體。

### 將用戶端字符用於冪等性
<a name="client-tokens-sp"></a>

`client-token` 參數可確保等冪操作，並啟用啟動請求的安全重試。

關鍵行為：
+ 用戶端字符在初始請求的生命週期為 8 小時
+ 在 8 小時內使用相同的用戶端字符重試會傳回快取的回應，而不是啟動新的執行個體
+ 8 小時後，相同的用戶端字符將啟動新的啟動操作