將生命週期掛鉤新增至 Auto Scaling 群組 - Amazon EC2 Auto Scaling

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

將生命週期掛鉤新增至 Auto Scaling 群組

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

從 建立 Auto Scaling 群組之後 AWS Management Console,您可以將一或多個生命週期掛鉤新增至其中,總共 50 個生命週期掛鉤。您也可以使用 AWS CLI AWS CloudFormation或 開發套件,在建立 Auto Scaling 群組時將生命週期掛鉤新增至該群組。

預設情況下,您在主控台中新增 lifecycle hook 時,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. 選擇 Create (建立)。

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

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

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

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

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

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

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

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

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

  3. 選擇 Create (建立)。

新增 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 命令,以允許執行個體繼續進入下一個狀態。如需詳細資訊和範例,請參閱 在 Auto Scaling 群組中完成生命週期動作