View a markdown version of this page

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

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

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

若要將 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 命令,如本主題中的範例所示。

新增 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. 在活動訊號逾時中,請指定在關聯逾時之前橫向擴展時,執行個體保持等待狀態的時間長度,單位為秒。範圍是從 30 至 7200 秒。設定較長的逾時期限,可為完成自訂動作提供更多時間。然後,如果您在逾時期限結束前完成,請傳送 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 至 120 秒的短暫逾時時間,具體視您執行任何最終任務 (例如從 CloudWatch 提取 EC2 日誌) 所需的時間而定。

    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 選項。若要使用 接收通知 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 命令會建立一個 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 群組中完成生命週期動作。