我的 Amazon CloudWatch 告警已配置为调用我的 Amazon Elastic Compute Cloud(Amazon EC2)自动扩缩策略,但它不起作用。
简短描述
当某个 CloudWatch 告警转换到一个新的告警状态时,此告警会调用这个告警状态的所有配置操作。Amazon EC2 Auto Scaling 使用该告警上配置的时间段来确定告警状态是否应更改。但是,无论配置的时间段如何,当告警保持新状态时,它每分钟调用一次自动扩缩操作。
CloudWatch 告警状态更改不调用 Amazon EC2 Auto Scaling 策略的常见原因如下:
- 未为 CloudWatch 告警设置自动扩缩操作。
- Amazon EC2 Auto Scaling 组中的扩缩策略尚未设置。这会阻止对自动扩缩组进行评估。
- 自动扩缩组具有简单的扩缩策略或相互冲突的步进扩缩策略。这会阻止某些策略启动。
- 自动扩缩组的生命周期挂钩不完整。这会让所有简单扩缩策略都不会应用。待处理的实例还会导致步进和目标跟踪扩缩策略延迟。这是因为,在生命周期挂钩和预热时间结束之前,自动扩缩不会将该实例计入组的容量(对于横向扩展)。该实例会计入组的容量(对于横向缩减),以防止过度扩缩。
- 生命周期挂钩在超时时结束,或者,在您调用 CompleteLifecycleAction 操作或 AWS 命令行界面(AWS CLI)时结束。
解决方法
在开始之前,请确认您的 CloudWatch 告警处于警报状态。如果告警的配置与其监控的指标阈值不匹配,则该告警可能不会转换到警报状态。如果告警没有更改状态,则它不会调用自动扩缩策略。有关如何评估 CloudWatch 告警的更多信息,请参阅评估告警。
通过检查告警的阈值,验证您的 CloudWatch 告警是否按预期进入警报状态。增加或降低阈值以匹配您的预期值。此外,还要查看告警的时间段和评估期。您可能需要编辑告警的时间段和评估期,告警才会按预期调用自动扩缩策略。有关验证告警操作的更多信息,请参阅如何确保 CloudWatch 警报激活操作?
**重要事项:**创建或编辑告警时,请记住以下几点:
- 确认您尚未暂停自动扩缩组的扩缩进程。如果扩缩进程已暂停,则恢复这些进程。
- 切勿创建、编辑或删除与目标跟踪扩缩策略相关的告警。更改这些自动创建的告警可能会造成意想不到的影响。这些告警的阈值是根据扩缩策略中设置的目标值自动确定的。
检查是否允许对 CloudWatch 告警执行自动扩缩操作
要让 CloudWatch 告警调用自动扩缩策略,请在告警配置中打开 ActionsEnabled 参数。验证告警配置中的 ActionsEnabled 参数是否设置为 true。
**注意:**如果您在 CloudWatch 控制台中创建或更新告警,则默认情况下 ActionsEnabled 参数将设置为 true。
要使用 AWS CLI 检查并允许告警操作,请完成以下步骤:
-
使用 describe-alarms 命令检查您的配置。
aws cloudwatch describe-alarms --alarm-names "myalarm" --query 'MetricAlarms[].ActionsEnabled'
**注意:**将 myalarm 替换为您的告警的 ID。
-
查看输出。如果 ActionsEnabled 参数未设置为 true,则使用 enable-alarm-actions 命令启用告警操作。
aws cloudwatch enable-alarm-actions --alarm-names myalarm
**注意:**如果在运行 AWS CLI 命令时收到错误,请参阅 Troubleshoot AWS CLI errors。此外,请验证您使用的是最新版本的 AWS CLI。
要使用 CloudWatch API 检查和启用告警操作,请完成以下步骤:
- 调用 DescribeAlarms 操作来检查您的当前配置。
- 如果不允许对您的告警执行操作,则调用 EnableAlarmActions 操作以启用操作。
查看自动扩缩组的简单扩缩和步进扩缩策略
要在 Amazon EC2 控制台中查看您的组的扩缩策略,请完成以下步骤:
- 打开 Amazon EC2 控制台。
- 在导航窗格的自动扩缩下,选择自动扩缩组。
- 在内容窗格中,选择您的自动扩缩组。
- 选择自动扩缩选项卡,然后记下策略类型。
要使用 AWS CLI 检查扩缩策略,请使用 --policy-types 参数运行 describe-policies 命令。要使用 AWS API 检查扩缩策略,请使用 PolicyTypes 参数调用 DescribePolicies 操作。输出结果中会列出了每种策略类型。
如果您有一个有效的简单扩缩策略,则在满足以下条件之前,系统不会调用任何其他简单扩缩策略:
- 有效的简单扩缩策略已完成。
- 自动扩缩策略的冷却时间已过。简单扩缩策略遵循自动扩缩策略的默认或指定的冷却时间。
**注意:**运行简单扩缩策略并不能完全屏蔽步进扩缩或目标跟踪扩缩策略。确保不要同时应用相互矛盾的策略。
检查自动扩缩策略中是否有自动扩缩生命周期挂钩
当某个自动扩缩生命周期挂钩正在运行时,简单扩缩策略的扩缩活动会暂停。但是,生命周期挂钩正在运行时,步进扩缩策略仍会运行。
在全局超时时长或心跳超时时长结束后,检查所有生命周期挂钩是否以 CONTINUE 或 ABANDON 结果结束。
要在 Amazon EC2 控制台中检查生命周期挂钩操作,请完成以下步骤:
- 打开 Amazon EC2 控制台。
- 在导航窗格的自动扩缩下,选择自动扩缩组。
- 在内容窗格中,选择您的自动扩缩组。
- 选择活动选项卡,然后滚动到活动历史记录部分。
- 查看活动中是否存在任何正在进行的生命周期挂钩操作。
有关完成生命周期挂钩的步骤,请参阅 Complete a lifecycle action。
相关信息
如何解决我的 Amazon EC2 自动扩缩组的扩展问题?
Troubleshoot Amazon EC2 Auto Scaling