新增 lifecycle hook - Amazon EC2 Auto Scaling

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

新增 lifecycle hook

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

從建立 Auto Scaling 群組之後 AWS Management Console,您可以在其中新增一或多個生命週期勾點,最多總共 50 個生命週期勾點。您也可以使用 AWS CLI、或 SDK AWS CloudFormation,在建立時將生命週期掛接新增至 Auto Scaling 群組。

根據預設,當您在主控台中新增生命週期勾點時,Amazon EC2 Auto Scaling 會將生命週期事件通知傳送給 Amazon EventBridge。建議使用 EventBridge 或使用者資料指令碼。若要建立將通知直接傳送至 Amazon SNS 或 Amazon SQS 的 lifecycle hook,您可以使用 put-lifecycle-hook 命令,如本主題中的範例所示。

新增 lifecycle hook (主控台)

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

開始之前,請確認您已視需要設定自訂動作,如 準備將 lifecycle hook 新增至您的 Auto Scaling 群組 所述。

新增橫向擴展的 lifecycle hook
  1. 前往網址 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台,然後從導覽窗格中選擇 Auto Scaling 群組

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

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

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

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

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

    3. 活動訊號逾時中,請指定在關聯逾時之前橫向擴展時,執行個體保持等待狀態的時間長度,單位為秒。範圍是從 307200 秒。設定較長的逾時期限,可為完成自訂動作提供更多時間。然後,如果您在逾時期限結束前完成,請傳送 complete-lifecycle-action 命令以允許執行個體繼續進入下一個狀態。

    4. Default result (預設結果) 中,請指定當 lifecycle hook 逾時或發生意外失敗時要採取的動作。您可以選擇繼續捨棄

      • 如果您選擇繼續,Auto Scaling 群組可以用任何其他生命週期關聯繼續操作,然後將執行個體投入服務。

      • 如果選擇捨棄,Auto Scaling 群組會立即終止任何其餘的動作,並會立即終止執行個體。

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

  5. 選擇建立

新增縮減的 lifecycle hook
  1. 選擇建立 lifecycle hook,即可在您建立橫向擴展 lifecycle hook 後的位置繼續處理。

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

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

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

    3. 活動訊號逾時中,請指定在關聯逾時之前橫向擴展時,執行個體保持等待狀態的時間長度,單位為秒。根據執行任30何最終任務 (例如從中提取 EC2 日誌) 所需的時間,我們建議您將短暫的逾時期限設為120秒 CloudWatch。

    4. 對於 Default result (預設結果),指定逾時或發生意外失敗時,Auto Scaling 群組會採取的動作。ABANDON (放棄) 和 CONTINUE (繼續) 皆允許執行個體終止。

      • 如果選擇 CONTINUE (繼續),Auto Scaling 群組可以在終止前繼續執行任何剩餘的動作,如其他 lifecycle hook。

      • 如果選擇捨棄,Auto Scaling 群組會立即終止執行個體。

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

  3. 選擇建立

新增 lifecycle hook (AWS CLI)

您可以使用 put-lifecycle-hook 命令建立和更新 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 選項。

以下範例會建立了一個 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 命令會建立一個 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 CLI 命令記錄活動訊號,以此防止 lifecycle hook 逾時。這樣做會將逾時期限延長到您在建立 lifecycle hook 時所指定的逾時值。如果在逾時期限結束前完成,您可以傳送 complete-lifecycle-action CLI 命令,以允許執行個體繼續進入下一個狀態。如需詳細資訊和範例,請參閱 完成生命週期動作