

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

# EC2 執行個體重新平衡建議
<a name="rebalance-recommendations"></a>

EC2 執行個體*重新平衡推薦*是一種訊號，可在 Spot 執行個體的中斷風險升高時通知您。該訊號能夠比[兩分鐘 Spot 執行個體中斷通知](spot-instance-termination-notices.md)更快到達，讓您有機會主動管理 Spot 執行個體。您可以決定將工作負載重新平衡至未處於提高之中斷風險的新的或現有 競價型執行個體。

Amazon EC2 並不總是能夠在兩分鐘 Spot 執行個體中斷通知之前傳送重新平衡建議訊號。因此，重新平衡建議訊號可以與兩分鐘的中斷通知一起到達。

重新平衡建議可做為 EventBridge 事件和 Spot 執行個體上[執行個體中繼資料](ec2-instance-metadata.md)中的項目。盡可能發出事件。

**注意**  
僅針對在 2020 年 11 月 5 日 00:00 UTC 之後推出的 競價型執行個體 支援重新平衡建議。

**Topics**
+ [您可以採取的重新平衡動作](#rebalancing-actions)
+ [監控重新平衡建議訊號](#monitor-rebalance-recommendations)
+ [使用重新平衡建議訊號的服務](#services-using-rebalance-rec-signal)

## 您可以採取的重新平衡動作
<a name="rebalancing-actions"></a>

以下是您可以採取的一些可能的重新平衡動作：

順利關機  
當您收到 Spot 執行個體的重新平衡建議訊號時，您可以啟動執行個體關機程序，其中可能包括確保在程序停止之前完成程序。例如，您可以將系統或應用程式日誌上傳到 Amazon Simple Storage Service (Amazon S3)、關閉 Amazon SQS 工作者，或者您可以從網域名稱系統 (DNS) 完成取消註冊。您也可以將工作儲存在外部儲存體中，稍後再繼續執行。

防止排程新工作  
當您收到 Spot 執行個體的重新平衡建議訊號時，您可以防止在執行個體上排程新工作，同時繼續使用執行個體，直到排定的工作完成為止。

主動啟動新的替代執行個體  
您可以設定 Auto Scaling 群組、EC2 Fleet 或 Spot Fleet ，在發出重新平衡建議訊號時自動啟動替代 Spot 執行個體。如需詳細資訊，請參閱「Amazon EC2 Auto Scaling 使用者指南」**中的[使用容量重新平衡處理 Amazon EC2 Spot 中斷](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-capacity-rebalancing.html)，以及此指南中的 [在 EC2 機群和 Spot 機群中使用容量重新平衡，來取代具有風險的 Spot 執行個體](ec2-fleet-capacity-rebalance.md)。

## 監控重新平衡建議訊號
<a name="monitor-rebalance-recommendations"></a>

您可以監視重新平衡建議訊號，以便在發出重新平衡建議訊號時，您可以採取在上一部分中指定的動作。重新平衡建議訊號可作為傳送至 Amazon EventBridge (之前稱為 Amazon CloudWatch Events) 的事件，以及 Spot 執行個體上的執行個體中繼資料。

**Topics**
+ [使用 Amazon EventBridge](#cp-eventbridge)
+ [使用執行個體中繼資料](#cp-instance-metadata)

### 使用 Amazon EventBridge
<a name="cp-eventbridge"></a>

在針對 Spot 執行個體發出重新平衡建議訊號時，訊號的事件會傳送至 Amazon EventBridge。如果 EventBridge 偵測到事件模式符合規則中定義的模式，EventBridge 會叫用規則中指定的目標 (或多個目標)。

以下是重新平衡建議訊號的範例事件。

```
{
    "version": "0",
    "id": "12345678-1234-1234-1234-123456789012",
    "detail-type": "EC2 Instance Rebalance Recommendation",
    "source": "aws.ec2",
    "account": "123456789012",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-2",
    "resources": ["arn:aws:ec2:us-east-2:123456789012:instance/i-1234567890abcdef0"],
    "detail": {
        "instance-id": "i-1234567890abcdef0"
    }
}
```

下列欄位會形成規則中定義的事件模式：

`"detail-type": "EC2 Instance Rebalance Recommendation"`  
識別事件是重新平衡建議事件

`"source": "aws.ec2"`  
識別該事件是來自 Amazon EC2

#### 建立 EventBridge 規則
<a name="cp-eventbridge-rule"></a>

您可以寫入 EventBridge 規則，並自動化在事件模式符合規則時要採取哪些動作。

下列範例會建立 EventBridge 規則，以便在 Amazon EC2 每次發出重新平衡建議訊號時傳送電子郵件、簡訊或行動裝置推播通知。將該信號作為 `EC2 Instance Rebalance Recommendation` 事件發出 ，這觸發了規則定義的動作。

建立 EventBridge 規則之前，您必須針對電子郵件、文字訊息或行動推送通知建立 Amazon SNS 主題。

**針對重新平衡建議事件建立 EventBridge 規則**

1. 在 [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/) 開啟 Amazon EventBridge 主控台。

1. 選擇 **Create rule** (建立規則)。

1. 針對 **Define rule detail** (定義規則詳細資訊) 執行下列動作：

   1. 輸入規則的**Name (名稱)**，或者輸入描述。

      在同一個區域和同一個事件匯流排上，規則不能與另一個規則同名。

   1. 針對 **Event bus** (事件匯流排) 選擇 **default** (預設值)。當您帳戶中的 AWS 服務產生事件時，一律會前往您帳戶的預設事件匯流排。

   1. 針對 **Rule type** (規則類型) 選擇 **Rule with an event pattern** (具有事件模式的規則)。

   1. 選擇**下一步**。

1. 針對 **Build event pattern** (建置事件模式) 執行下列動作：

   1. 在 **Event source** (事件來源) 欄位中，選擇 **AWS events or EventBridge partner events** (事件或 EventBridge 合作夥伴事件)。

   1. 針對此範例的 **Event pattern** (事件模式)，您需指定下列事件模式，以便與 `EC2 Instance Rebalance Recommendation` 事件相符，然後選擇 **Save** (儲存)。

      ```
      {
       "source": ["aws.ec2"],
       "detail-type": ["EC2 Instance Rebalance Recommendation"]
      }
      ```

      若要新增事件模式，您可以透過選擇 **Event pattern form** (事件模式表單) 使用範本，或者透過選擇 **Custom pattern (JSON editor)** (自定義模式 (JSON 編輯器)) 指定自有模式，如下：

      1. 若要使用範本建立事件模式，請執行下列動作：

         1. 選擇 **Event pattern form** (事件模式表單)。

         1. 在 **Event source** (事件來源) 欄位中，選擇 **AWS services** (服務)。

         1. 針對 **AWS Service** (服務)，請選擇 **EC2 Spot Fleet** (EC2 Spot 機群)。

         1. 針對 **Event type** (事件類型)，選擇 **EC2 Instance Rebalance Recommendation** (EC2 執行個體重新平衡建議)。

         1. 若要自訂範本，請選擇 **Edit pattern** (編輯模式) 並進行變更以與範例事件模式相符。

      1. (替代) 若要指定自訂事件模式，請執行下列動作：

         1. 選擇 **Custom pattern (JSON editor)** (自訂模式 (JSON 編輯器))。

         1. 在 **Event pattern** (事件模式) 方塊中，為此範例新增事件模式。

   1. 選擇**下一步**。

1. 針對 **Select target(s)** (選取目標) 執行下列動作：

   1. 在 **Target types** (目標類型) 欄位中，選擇 **AWS service** (服務)。

   1. 針對 **Select a target** (選取目標) 選取 ** SNS topic** (SNS 主題)，以便在事件發生時傳送電子郵件、簡訊或行動裝置推送通知。

   1. 針對 **Topic (主題)**，請選擇現有的主題。您首先需要使用 Amazon SNS 主控台建立 Amazon SNS 主題。如需詳細資料，請參閱「Amazon Simple Notification Service 開發人員指南」**中的[使用 Amazon SNS 進行應用程式至人員 (A2P) 訊息](https://docs.aws.amazon.com//sns/latest/dg/sns-user-notifications.html)。

   1. (選用) 在 **Additional settings** (其他設定) 下，您可以選擇性地設定其他設定。如需詳細資訊，請參閱「Amazon EventBridge 使用者指南」**中的[建立對事件做出反應的 Amazon EventBridge 規則](https://docs.aws.amazon.com//eventbridge/latest/userguide/eb-create-rule.html) (步驟 16)。

   1. 選擇**下一步**。

1. (選用) 針對 **Tags** (標籤)，您可以選擇性地將一或多個標籤指派給您的規則，然後選擇 **Next** (下一步)。

1. 針對 **Review and create** (檢閱和建立) 執行下列動作：

   1. 檢閱規則的詳細資訊，然後視需求進行修改。

   1. 選擇**建立規則**。

如需詳細資訊，請參閱 *Amazon EventBridge 使用者指南*中的 [Amazon EventBridge 規則](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)和 [Amazon EventBridge 事件模式](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)。

### 使用執行個體中繼資料
<a name="cp-instance-metadata"></a>

執行個體中繼資料類別 `events/recommendations/rebalance` 在為 Spot 執行個體發出重新平衡建議訊號時提供大約的時間 (UTC)。

我們建議您每 5 秒檢查重新平衡建議訊號，這樣您就不會錯過對重新平衡建議採取行動的機會。

如果 Spot 執行個體收到重新平衡建議，則發出訊號的時間會出現在執行個體中繼資料中。您可以擷取如下所示的發出訊號時間。

------
#### [ IMDSv2 ]

**Linux**  
透過 Linux 執行個體執行下面的命令。

**IMDSV2**

```
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
    && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/events/recommendations/rebalance
```

**Windows**  
從 Windows 執行個體執行下列 cmdlet

```
[string]$token = Invoke-RestMethod `
    -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} `
    -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
Invoke-RestMethod `
    -Headers @{"X-aws-ec2-metadata-token" = $token} `
    -Method GET -Uri http://169.254.169.254/latest/meta-data/events/recommendations/rebalance
```

------
#### [ IMDSv1 ]

**Linux**  
透過 Linux 執行個體執行下面的命令。

```
curl http://169.254.169.254/latest/meta-data/events/recommendations/rebalance
```

**Windows**  
透過 Windows 執行個體中執行下列 cmdlet。

```
Invoke-RestMethod -Uri http://169.254.169.254/latest/meta-data/events/recommendations/rebalance
```

------

以下是範例輸出，它表示為 Spot 執行個體發出重新平衡建議訊號的時間 (UTC)。

```
{"noticeTime": "2020-10-27T08:22:00Z"}
```

如果尚未針對執行個體發出訊號，則 `events/recommendations/rebalance` 不存在， 並且您會在嘗試擷取它時收到 HTTP 404 錯誤。

## 使用重新平衡建議訊號的服務
<a name="services-using-rebalance-rec-signal"></a>

Amazon EC2 Auto Scaling、EC2 Fleet 和 Spot Fleet 使用重新平衡建議信號，讓您在執行中的執行個體收到兩分鐘 Spot 執行個體中斷通知之前，藉由使用新的 Spot 執行個體主動擴增您的機群，讓您輕鬆維持工作負載可用性。您可以讓這些服務主動地監控並回應影響 競價型執行個體 的可用性的變更 如需詳細資訊，請參閱下列內容：
+ 「Amazon EC2 Auto Scaling 使用者指南」**中的[使用容量重新平衡處理 Amazon EC2 Spot 中斷](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-capacity-rebalancing.html)
+ 在本使用者指南 EC2 Fleet 和 Spot 機群主題中的 [在 EC2 機群和 Spot 機群中使用容量重新平衡，來取代具有風險的 Spot 執行個體](ec2-fleet-capacity-rebalance.md)