

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

# 將生命週期掛鉤新增至 Auto Scaling 群組
<a name="adding-lifecycle-hooks"></a>

若要將 Auto Scaling 執行個體置於等待狀態並對其執行自訂動作，您可以將 lifecycle hook 新增至 Auto Scaling 群組。自訂動作會在執行個體啟動時或終止之前執行。在您完成生命週期動作前，或逾時期限結束前，執行個體都保持在等待狀態。

從 建立 Auto Scaling 群組之後 AWS 管理主控台，您可以將一或多個生命週期掛鉤新增至其中，總共 50 個生命週期掛鉤。您也可以在建立 Auto Scaling 群組時 AWS CLI CloudFormation，使用 或 SDK 將生命週期掛鉤新增至該群組。

預設情況下，您在主控台中新增 lifecycle hook 時，Amazon EC2 Auto Scaling 便會向 Amazon EventBridge 傳送生命週期事件通知。使用 EventBridge 或使用者資料指令碼是建議的最佳實務。若要建立直接將通知傳送至 Amazon SNS、Amazon SQS 的生命週期關聯，或者 AWS Lambda 您可以使用 [put-lifecycle-hook](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-lifecycle-hook.html) 命令，如本主題中的範例所示。

**Topics**
+ [新增 lifecycle hook (主控台)](#adding-lifecycle-hooks-console)
+ [新增 lifecycle hook (AWS CLI)](#adding-lifecycle-hooks-aws-cli)

## 新增 lifecycle hook (主控台)
<a name="adding-lifecycle-hooks-console"></a>

請遵循以下步驟，將生命週期關聯新增至您的 Auto Scaling 群組。若要新增用於橫向擴展 (執行個體啟動) 和縮減 (執行個體終止或返回暖集區) 的生命週期關聯，您必須建立兩個單獨的關聯。

開始之前，請確認您已視需要設定自訂動作，如 [準備將 lifecycle hook 新增至您的 Auto Scaling 群組](prepare-for-lifecycle-notifications.md) 所述。

**新增橫向擴展的 lifecycle hook**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 選取 Auto Scaling 群組旁的核取方塊。頁面底部會開啟一個分割窗格。

1. 在 **Instance management** (執行個體管理) 索引標籤的 **Lifecycle hooks** (lifecycle hook) 中，選擇 **Create lifecycle hook** (建立 lifecycle hook)。

1. 若要定義橫向擴展 (執行個體啟動) 的 lifecycle hook，請執行以下操作：

   1. 對於 **Lifecycle hook name (lifecycle hook 名稱)**，指定 lifecycle hook 的名稱。

   1. 對於 **Lifecycle transition** (生命週期轉移)，選擇 **Instance launch** (執行個體啟動)。

   1. 在**活動訊號逾時**中，請指定在關聯逾時之前橫向擴展時，執行個體保持等待狀態的時間長度，單位為秒。範圍是從 `30` 至 `7200` 秒。設定較長的逾時期限，可為完成自訂動作提供更多時間。然後，如果您在逾時期限結束前完成，請傳送 [complete-lifecycle-action](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/complete-lifecycle-action.html) 命令以允許執行個體繼續進入下一個狀態。

   1. 在 **Default result** (預設結果) 中，請指定當 lifecycle hook 逾時或發生意外失敗時要採取的動作。您可以選擇**繼續**或**捨棄**。
      + 如果您選擇**繼續**，Auto Scaling 群組可以用任何其他生命週期關聯繼續操作，然後將執行個體投入服務。
      + 如果選擇**捨棄**，Auto Scaling 群組會立即終止任何其餘的動作，並會立即終止執行個體。

   1. (選用) 針對**通知中繼資料**，指定在 Amazon EC2 Auto Scaling 將訊息傳送至通知目標時您想要包含的其他資訊。

1. 選擇**建立**。

**新增縮減的 lifecycle hook**

1. 選擇**建立 lifecycle hook**，即可在您建立橫向擴展 lifecycle hook 後的位置繼續處理。

1. 若要定義縮減的 lifecycle hook (執行個體終止或返回暖集區)，請執行以下操作：

   1. 對於 **Lifecycle hook name (lifecycle hook 名稱)**，指定 lifecycle hook 的名稱。

   1. 對於 **Lifecycle transition** (生命週期轉移)，選擇 **Instance terminate** (執行個體終止)。

   1. 在**活動訊號逾時**中，請指定在關聯逾時之前橫向擴展時，執行個體保持等待狀態的時間長度，單位為秒。建議您使用 `30` 至 `120` 秒的短暫逾時時間，具體視您執行任何最終任務 (例如從 CloudWatch 提取 EC2 日誌) 所需的時間而定。

   1. 對於 **Default result** (預設結果)，指定逾時或發生意外失敗時，Auto Scaling 群組會採取的動作。**ABANDON** (放棄) 和 **CONTINUE** (繼續) 皆允許執行個體終止。
      + 如果選擇 **CONTINUE** (繼續)，Auto Scaling 群組可以在終止前繼續執行任何剩餘的動作，如其他 lifecycle hook。
      + 如果選擇**捨棄**，Auto Scaling 群組會立即終止執行個體。

   1. (選用) 針對**通知中繼資料**，指定在 Amazon EC2 Auto Scaling 將訊息傳送至通知目標時您想要包含的其他資訊。

1. 選擇**建立**。

## 新增 lifecycle hook (AWS CLI)
<a name="adding-lifecycle-hooks-aws-cli"></a>

您可以使用 [put-lifecycle-hook](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-lifecycle-hook.html) 命令建立和更新 lifecycle hook。

若要在擴增時執行某一動作，請使用下列命令。

```
aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-launch-hook  \
  --auto-scaling-group-name my-asg \
  --lifecycle-transition autoscaling:EC2_INSTANCE_LAUNCHING
```

若要在縮減時執行某一動作，請使用下列命令。

```
aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-termination-hook  \
  --auto-scaling-group-name my-asg \
  --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING
```

若要使用 Amazon SNS 或 Amazon SQS 接收通知，請新增 `--notification-target-arn` 和 `--role-arn` 選項。若要使用 接收通知 AWS Lambda，請新增 `--notification-target-arn`。

以下範例會建立了一個 lifecycle hook，該掛鉤會指定名為 `my-sns-topic` 的 SNS 主題作為通知目標。

```
aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-termination-hook  \
  --auto-scaling-group-name my-asg \
  --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING \
  --notification-target-arn arn:aws:sns:region:123456789012:my-sns-topic \
  --role-arn arn:aws:iam::123456789012:role/my-notification-role
```

該主題接收測試下列含有鍵值對的通知。

```
"Event": "autoscaling:TEST_NOTIFICATION"
```

在預設情況下，[put-lifecycle-hook](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-lifecycle-hook.html) 命令會建立一個 lifecycle hook，其中包含 `3600` 秒 (1 小時) 的活動訊號逾時。

若要變更現有 lifecycle hook 的活動訊號逾時，請新增 `--heartbeat-timeout` 選項，如以下範例所示。

```
aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-termination-hook \
  --auto-scaling-group-name my-asg --heartbeat-timeout 120
```

如果執行個體已處於等待狀態，您可以使用 [record-lifecycle-action-heartbeat](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/record-lifecycle-action-heartbeat.html) CLI 命令記錄活動訊號，以此防止 lifecycle hook 逾時。這樣做會將逾時期限延長到您在建立 lifecycle hook 時所指定的逾時值。如果在逾時期限結束前完成，您可以傳送 [complete-lifecycle-action](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/complete-lifecycle-action.html) CLI 命令，以允許執行個體繼續進入下一個狀態。如需詳細資訊和範例，請參閱 [在 Auto Scaling 群組中完成生命週期動作](completing-lifecycle-hooks.md)。