

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

# 使用執行個體生命週期政策控制執行個體保留
<a name="instance-lifecycle-policy"></a>

 執行個體生命週期政策可在捨棄終止生命週期動作時提供 Amazon EC2 Auto Scaling 終止的保護。與單獨使用生命週期掛鉤不同，執行個體生命週期政策旨在確保執行個體在正常關機程序未成功完成時移至保留狀態。

## 何時使用執行個體生命週期政策
<a name="when-to-use-instance-lifecycle-policies"></a>

 當應用程式的正常關閉不是選用的，但強制和失敗的關閉需要手動介入時，請使用執行個體生命週期政策。常用案例包括：
+  必須在終止前完成資料持久性的狀態應用程式。
+  需要延長耗盡期間的應用程式，可能超過生命週期關聯逾時上限 48 小時。
+  當清除失敗或不完整時，處理敏感資料的工作負載可能會導致資料遺失或損毀。
+  任務關鍵服務，其中突然關機會對可用性造成影響。

 如需如何正常處理執行個體終止的詳細資訊，請參閱 [設計您的應用程式以正常處理執行個體終止](gracefully-handle-instance-termination.md)。

## 執行個體生命週期政策如何與終止生命週期關聯搭配使用
<a name="how-instance-lifecycle-policies-work"></a>

 執行個體生命週期政策可與終止生命週期掛鉤搭配使用，而非取代。程序遵循數個階段：

1.  **執行終止生命週期動作。**當 Amazon EC2 Auto Scaling 選取要終止的執行個體時，系統會叫用您的終止生命週期關聯，且執行個體會進入 `Terminating:Wait` 狀態以開始執行終止生命週期動作。

1.  **正常關機嘗試開始。**您的應用程式，無論是在執行個體上執行或透過控制平面執行，都會收到終止生命週期動作通知，並開始正常的關閉程序，例如耗盡連線、完成進行中的工作或傳輸資料。

1.  **終止生命週期動作完成。**終止生命週期動作可以使用 `CONTINUE`或 `ABANDON`結果完成。

1.  **執行個體生命週期政策會評估情況。**如果未設定執行個體生命週期政策，即使終止生命週期動作已完成`ABANDON`，執行個體仍會立即終止。在執行個體生命週期政策設定為在 上保留執行個體的情況下`TerminateHookAbandon`，如果終止生命週期動作已完成`ABANDON`，執行個體會移至保留狀態。

1.  **保留的執行個體會等待手動動作。**處於保留狀態的執行個體會持續產生標準 Amazon EC2 費用。這些執行個體不會計入 Auto Scaling 群組所需的容量，因此 Auto Scaling 會啟動替換執行個體以維持所需的大小。Auto Scaling 功能，例如執行個體重新整理和執行個體生命週期上限，也會忽略保留的執行個體。這可讓您在手動終止執行個體之前，手動完成清除程序、復原資料或調查自動關機失敗的原因。

1.  **手動終止發生。**在保留執行個體上完成必要的動作後，您需要呼叫 `TerminateInstanceInAutoScalingGroup` API 來終止執行個體。

# 設定執行個體保留
<a name="configure-instance-retention"></a>

設定 Amazon EC2 Auto Scaling 群組，以在終止生命週期動作失敗時保留執行個體。

 若要在 Auto Scaling 群組中使用執行個體生命週期政策，您還必須設定終止生命週期關聯。如果您設定執行個體生命週期政策，但沒有任何終止生命週期關聯，則政策沒有作用。只有在捨棄終止生命週期動作時，才會套用執行個體生命週期政策，而不是當它們成功完成`CONTINUE`結果時。

 執行個體生命週期政策使用保留觸發來判斷何時保留執行個體。`TerminateHookAbandon` 觸發會在幾個案例中造成保留：
+  當您使用`ABANDON`結果明確呼叫 [ CompleteLifecycleAction ](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_CompleteLifecycleAction.html) API 時。
+  當具有預設結果的終止生命週期動作因為達到活動訊號逾時而不接收活動訊號而`ABANDON`逾時時。
+  當在具有預設結果 的終止生命週期動作上達到全域逾時時`ABANDON`，即 48 小時或活動訊號逾時的 100 倍，以較小者為準 

------
#### [ Console ]

**設定執行個體保留**

1. 開啟 Amazon EC2 Auto Scaling 主控台

1. 建立 Auto Scaling 群組 （執行個體生命週期政策預設為終止）

1. 前往 Auto Scaling 群組詳細資訊頁面，然後選擇**執行個體管理**索引標籤

1. 在**生命週期關聯的執行個體生命週期政策**中，選擇**保留**

1. 使用 建立您的終止生命週期關聯：
   + 生命週期轉換設定為**執行個體終止**
   + 預設結果設定為**放棄**

------
#### [ AWS CLI ]

**設定執行個體保留**  
 使用 [create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html) 命令搭配執行個體生命週期政策：

```
aws autoscaling create-auto-scaling-group \
--auto-scaling-group-name my-asg \
--launch-template LaunchTemplateName=my-template,Version='$Latest' \
--min-size 1 \
--max-size 3 \
--desired-capacity 2 \
--vpc-zone-identifier subnet-12345678 \
--instance-lifecycle-policy file://lifecycle-policy.json
```

lifecycle-policy.json 的內容：

```
{
    "RetentionTriggers": {
        "TerminateHookAbandon": "retain"
    }
}
```

**新增終止 lifecycle hook**  
使用 [put-lifecycle-hook](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-lifecycle-hook.html) 命令：

```
aws autoscaling put-lifecycle-hook \
--lifecycle-hook-name my-termination-hook \
--auto-scaling-group-name my-asg \
--lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING \
--default-result ABANDON \
--heartbeat-timeout 300
```

------

# 管理保留的執行個體
<a name="manage-retained-instances"></a>

 監控並控制已移至保留狀態的 Amazon EC2 執行個體。使用 CloudWatch 指標追蹤保留的執行個體，然後在完成自訂動作後手動終止保留的執行個體。

 保留的執行個體不會計入 Amazon EC2 Auto Scaling 群組所需的容量。當執行個體進入保留狀態時，Auto Scaling 會啟動替換執行個體以維持所需的容量。例如，假設 Auto Scaling 群組的所需容量為 10。當執行個體進入 `Terminating:Retained` 狀態時，Auto Scaling 會啟動替換執行個體，將所需的容量維持在 10。您現在總共有 11 個執行中的執行個體：作用中群組中有 10 個，加上 1 個保留的執行個體。所有 11 個執行個體的標準 Amazon EC2 費用將適用，直到您手動終止保留的執行個體為止。

## 保留執行個體的執行個體生命週期狀態
<a name="instance-lifecyle-states-of-retained-instances"></a>

 了解使用執行個體生命週期政策時，執行個體如何轉換生命週期狀態。執行個體遵循從正常終止到保留到最終終止的特定路徑。

*觸發保留時，執行個體會轉換這些狀態：*

1. `Terminating` - 正常終止開始

1. `Terminating:Wait` - 生命週期掛鉤執行

1. `Terminating:Proceed` - 生命週期動作後續處理 （無論是成功還是失敗）

1. `Terminating:Retained` - 勾點失敗，執行個體保留以進行手動介入

暖集區執行個體會根據情況採取不同的生命週期狀態路徑：

*執行個體擴展回暖集區：*

1. `Warmed:Pending` - 開始正常暖集區轉換

1. `Warmed:Pending:Wait` - 生命週期掛鉤執行

1. `Warmed:Pending:Proceed` - 生命週期動作後續處理 （無論是成功還是失敗）

1. `Warmed:Pending:Retained` - 勾點失敗，執行個體保留以進行手動介入

*從暖集區終止的執行個體：*

1. `Warmed:Terminating` - 正常終止開始

1. `Warmed:Terminating:Wait` - 生命週期掛鉤執行

1. `Warmed:Terminating:Proceed` - 生命週期動作後續處理 （無論是否成功）

1. `Warmed:Terminating:Retained` - 勾點失敗，執行個體保留以進行手動介入

## 監控保留的執行個體
<a name="monitor-retained-instances"></a>

 由於保留的 Amazon EC2 執行個體會產生成本並需要手動介入，因此監控它們至關重要。Amazon EC2 Auto Scaling 提供數個 CloudWatch 指標來追蹤保留的執行個體。

啟用群組指標以追蹤保留的執行個體：

```
aws autoscaling enable-metrics-collection \
--auto-scaling-group-name my-asg \
--metrics GroupTerminatingRetainedInstances
```

可用的指標為：
+  `GroupTerminatingRetainedInstances` 顯示 `Terminating:Retained` 狀態中的執行個體數目。
+  `GroupTerminatingRetainedCapacity` 顯示 `Terminating:Retained` 狀態的執行個體所代表的容量單位。
+  `WarmPoolTerminatingRetainedCapacity` 會追蹤從暖集區終止的保留執行個體。
+  `WarmPoolPendingRetainedCapacity` 會追蹤返回暖集區的保留執行個體。

 您也可以檢查 Amazon EC2 Auto Scaling 群組的擴展活動，以了解保留執行個體的原因。尋找具有 `StatusCode: Cancelled`和狀態原因訊息的終止活動，指出生命週期掛鉤失敗：

```
aws autoscaling describe-scaling-activities \
--auto-scaling-group-name my-asg
```

 我們建議您在這些指標上建立 CloudWatch 警示，以便在執行個體進入保留狀態時提醒您。這可協助您追蹤成本影響，並確保您不會忘記清除需要手動介入的執行個體。

## 終止保留的執行個體
<a name="terminate-retained-instances"></a>

完成自訂動作後，請呼叫 [ TerminateInstanceInAutoScalingGroup ](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_TerminateInstanceInAutoScalingGroup.html) API 來終止保留的執行個體：

```
aws autoscaling terminate-instance-in-auto-scaling-group \
--instance-id i-1234567890abcdef0 \
--no-should-decrement-desired-capacity
```