當我的 CloudWatch 警示變更狀態時,為什麼沒有觸發 Amazon EC2 Auto Scaling 政策?

2 分的閱讀內容
0

我已經設定 Amazon CloudWatch 警示來觸發我的 Amazon Elastic Compute Cloud (Amazon EC2) Auto Scaling 政策。當我的 CloudWatch 警示變更狀態時,為什麼沒有觸發 Amazon EC2 Auto Scaling 政策?

簡短描述

當 CloudWatch 警示轉換為新的警示狀態 (OKALARMINSUFFICIENT_DATA) 時,警示會叫用對該狀態設定的任何動作。Amazon EC2 Auto Scaling 僅使用警示上設定的期間來確定其狀態是否應變更。因此,對於 Auto Scaling 動作而言,無論已設定的期間為何,只要該警示保持新狀態,它就會繼續每分鐘叫用已設定的動作。

CloudWatch 警示狀態變更未觸發 Amazon EC2 Auto Scaling 政策的常見原因包括:

  • 沒有為 CloudWatch 警示啟用 Auto Scaling 動作,因此無法叫用擴展政策。
  • Auto Scaling 群組中的擴展政策已停用。停用政策會阻止對群組進行評估。
  • Auto Scaling 群組存在衝突的簡單擴展政策或步驟擴展政策,這會阻止觸發某些政策。
  • Auto Scaling 群組的 lifecycle hook 不完整,這會阻止所有簡單擴展政策的套用。擱置中的執行個體也會導致步驟和目標追蹤擴展政策延遲。這是因為在 lifecycle hook 結束且暖機時間完成之前 (對於橫向擴展),Auto Scaling 不會將執行個體計入群組的容量。執行個體仍會計入群組的容量 (對於縮減),以防止過度擴展。lifecycle hook 在逾時或進行 CompleteLifecycleAction API 或 AWS Command Line Interface (AWS CLI) 呼叫時完成。

解決方法

在開始之前,請確保 CloudWatch 警示正在轉換至 ALARM 狀態。如果警示的設定與所監控指標的閾值不相符,則警示可能無法轉換至 ALARM 狀態。如果警示未變更狀態,則不會觸發 Amazon EC2 Auto Scaling 政策。如需如何評估 CloudWatch 警示的相關詳細資訊,請參閱評估警示

透過檢查警示的閾值,驗證您的 CloudWatch 警示是否在預期時間進入 ALARM 狀態。增大或減小閾值以符合您的預期值。此外,請檢閱警示期間評估期間。您可能需要編輯警示期間評估期間,才能如預期觸發 Amazon EC2 Auto Scaling 政策。如需如何確認警示觸發動作的詳細資訊,請參閱如何確認 CloudWatch 警示觸發動作?

**重要事項:**建立或編輯警示時,請記住以下幾點:

  • 請確保您尚未暫停 Amazon EC2 Auto Scaling 群組的擴展程序 (AlarmNotificationLaunchTerminate)。如果已暫停,請務必恢復這些擴展程序
  • 切勿直接編輯與目標追蹤政策相關聯的警示。編輯這些警示可能會造成非預期的影響。這些警示的閾值將根據擴展政策中設定的目標值自動確定。

檢查是否已為 CloudWatch 警示啟用 Amazon EC2 Auto Scaling 動作

若要讓 CloudWatch 警示叫用 Amazon EC2 Auto Scaling 政策,必須在警示的組態中啟用 ActionsEnabled 參數。請確保警示組態中的 ActionsEnabled 參數為 true

**注意:**如果您使用 CloudWatch 主控台建立或更新警示,預設情況下,ActionsEnabled 參數將設定為 true

若要使用 AWS CLI 檢查並啟用警示動作:

**注意:**如果您在執行 AWS CLI 命令時收到錯誤訊息,請確認您使用的是最新版本的 AWS CLI

  1. 使用 describe-alarms 檢查目前組態,如下所示。請務必使用您的警示的 ID 取代 myalarm
aws cloudwatch describe-alarms --alarm-names "myalarm" --query 'MetricAlarms[].ActionsEnabled'
  1. 檢閱輸出。如果 ActionsEnabled 參數並未設定為 true,請使用 enable-alarm-actions 啟用警示動作,如下所示。請務必使用您的警示的 ID 取代 myalarm
aws cloudwatch enable-alarm-actions --alarm-names myalarm

若要使用 CloudWatch API 檢查並啟用警示動作:

  1. 使用 DescribeAlarms 檢查您目前的組態。

  2. 如果沒有為您的警示啟用動作,請使用 EnableAlarmActions 啟用動作。

檢查 Amazon EC2 Auto Scaling 群組的簡單擴展和步驟擴展政策

若要使用 Amazon EC2 主控台檢查群組的擴展政策:

  1. 登入 Amazon EC2 主控台

  2. 在導覽窗格的 Auto Scaling 中,選擇 Auto Scaling 群組

  3. 在內容窗格中,選取您的 Auto Scaling 群組。

  4. 選擇 Automatic Scaling 索引標籤。

  5. 記下政策類型 (步驟擴展、簡單擴展目標追蹤)。

若要使用 AWS CLI 檢查擴展政策,請對您的 Auto Scaling 群組的 ID 使用命令 describe-policies--policy-types 參數。該輸出列出每種類型的政策 (SimpleScalingStepScalingTarget tracking)。

若要使用 API 檢查擴展政策,請使用呼叫 DescribePolicies 和參數 PolicyTypes。該輸出列出每種類型的政策 (SimpleScalingStepScalingTarget tracking)。

如果您有一個有效的簡單擴展政策,則除非符合下列條件,否則不會叫用任何其他簡單擴展政策:

  • 目前有效的簡單擴展政策已完成。
  • Amazon EC2 Auto Scaling 政策的冷卻時間已過。簡單擴展政策會遵循 Amazon EC2 Auto Scaling 政策的預設或指定冷卻時間。

**注意:**執行簡單擴展政策不會完全阻止步驟擴展或目標追蹤政策的執行。請確保不會同時套用相互矛盾的政策。

檢查 Amazon EC2 Auto Scaling 政策中的 Auto Scaling lifecycle hook

Auto Scaling lifecycle hook 生效時,不會執行簡單擴展政策。如果您在 Auto Scaling 群組中使用簡單擴展政策,請務必停止任何 lifecycle hook。

**注意:**如果正在進行 lifecycle hook,步驟擴展政策仍會觸發。但是,政策的擴展速度緩慢,因為執行個體在 lifecycle hook 結束前不會啟動暖機計時器。

檢查所有 lifecycle hook 在其通用逾時期間或活動訊號逾時期間到期後已完成,其結果為 CONTINUEABANDON

若要使用 Amazon EC2 主控台檢查 lifecycle hook 動作:

  1. 登入 Amazon EC2 主控台

  2. 在導覽窗格的 Auto Scaling 中,選擇 Auto Scaling 群組

  3. 在內容窗格中,選取您的 Auto Scaling 群組。

  4. 選擇活動索引標籤,然後捲動至活動歷史記錄區段。

  5. 檢閱任何正在進行的 lifecycle hook 動作的活動。

  6. 如需結束 lifecycle hook 的步驟,請參閱完成 lifecycle hook。若要使用 AWS CLI 完成 lifecycle hook 動作,請使用命令 complete-lifecycle-action。若要使用 API 完成 lifecycle hook 動作,請進行 CompleteLifecycleAction 呼叫。


相關資訊

如何對 Amazon EC2 Auto Scaling 群組的擴展問題進行疑難排解?

對 Amazon EC2 Auto Scaling 進行疑難排解

AWS 官方
AWS 官方已更新 3 年前