在我的 CloudWatch 警报更改状态时,为什么没有触发 Amazon EC2 Auto Scaling 策略?

上次更新日期:2020 年 12 月 17 日

我已配置了 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 组的生命周期挂钩不完整,这阻止了所有简单扩展策略的应用。待处理实例还会导致分步和目标跟踪扩展策略延迟。这是因为在生命周期挂钩结束且预热时间完成之前(对于扩展),Auto Scaling 不会将实例计入组的容量。该实例仍会计入组的容量(对于缩减),以防止过度扩展。生命周期挂钩在超时或进行 CompleteLifecycleAction API 或 AWS 命令行界面 (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 检查当前配置,如下所示。请确保将 myalarm 替换为您警报的 ID。

aws cloudwatch describe-alarms --alarm-names "myalarm" --query 'MetricAlarms[].ActionsEnabled'

2.    检查输出。如果 ActionsEnabled 参数未设置为 true,请使用 enable-alarm-actions 启用警报操作,如下所示。请确保将 myalarm 替换为您警报的 ID。

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.    记录 Policy type(策略类型)Step scaling(分步扩展)、Simple scaling(简单扩展)Target tracking(目标跟踪))。

如需使用 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 生命周期挂钩

Auto Scaling 生命周期挂钩生效时,不执行简单扩展策略。如果您在 Auto Scaling 组中使用简单扩展策略,请确保停止任何生命周期挂钩。

注意:如果有生命周期挂钩在进行中,分步扩展策略仍会触发。但是,策略的扩展速度缓慢,因为实例在生命周期挂钩结束之前不会启动预热计时器。

确保所有生命周期挂钩在其全局超时时段或检测信号超时时段到期之后已完成,其结果为 CONTINUEABANDON

使用 Amazon EC2 控制台检查生命周期挂钩操作:

1.    登录 Amazon EC2 控制台

2.    在导航窗格的 Auto Scaling 下,选择 Auto Scaling 组

3.    在内容窗格中,选择您的 Auto Scaling 组。

4.    选择 Activity(活动)选项卡,然后滚动到 Activity history(活动历史记录)部分。

5.    检查任何正在进行的生命周期挂钩操作的活动。

6.    如需了解结束生命周期挂钩的步骤,请参阅完成生命周期挂钩。如需使用 AWS CLI 完成生命周期挂钩操作,请使用命令 complete-lifecycle-action。如需使用 API 完成生命周期挂钩操作,请进行 CompleteLifecycleAction 调用。