求助:通过告警配置Auto Scaling Group实例扩容遇代码报错
问题解决:Auto Scaling 告警触发缩放的配置错误
错误原因分析
第一个报错
throw new Error('You must supply at least 2 intervals for autoscaling');
StepScalingPolicy要求scalingSteps必须定义至少两个阈值区间,你只配置了一个change:1的条目,不符合Step缩放策略的要求。第二个报错
Resource handler returned message: "You should specify at least one StepAdjustment with a StepScaling policy.
StepScalingAction不能单独使用,它必须关联已配置好的StepScalingPolicy,且StepScalingPolicy本身需要正确定义StepAdjustment(也就是scalingSteps)。
正确配置方案
你的需求是告警触发时创建1个新实例,这种单一动作的场景更适合使用SimpleScalingPolicy,而非StepScalingPolicy。以下是修正后的代码:
const gpuAlarm = new cloudwatch.Alarm(this, 'MemoryAlarm', { alarmName: metaInfo['alarmNameGpu'], comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD, threshold: 30, evaluationPeriods: 1, metric: new cloudwatch.Metric({ namespace: `tt-${targetEnv}-gpu`, metricName: 'GPU Usage' }) }); // 使用SimpleScalingPolicy实现单一缩放动作 const simpleScalingPolicy = new autoscaling.SimpleScalingPolicy(this, 'ScaleOutPolicy', { autoScalingGroup: props!.aiAutoScalingGroup, adjustmentType: autoscaling.AdjustmentType.CHANGE_IN_CAPACITY, scalingAdjustment: 1, // 触发时增加1个实例 }); // 将告警与缩放策略关联 gpuAlarm.addAlarmAction(new actions.AutoScalingAction(simpleScalingPolicy));
如果确实需要使用StepScalingPolicy(比如未来要添加多阈值区间),则需要为scalingSteps配置至少两个区间,示例代码如下:
const gpuAlarm = new cloudwatch.Alarm(this, 'MemoryAlarm', { alarmName: metaInfo['alarmNameGpu'], comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD, threshold: 30, evaluationPeriods: 1, metric: new cloudwatch.Metric({ namespace: `tt-${targetEnv}-gpu`, metricName: 'GPU Usage' }) }); const stepScalingPolicy = new autoscaling.StepScalingPolicy(this, 'MyStepScalingPolicy', { autoScalingGroup: props!.aiAutoScalingGroup, metric: new cloudwatch.Metric({ namespace: `tt-${targetEnv}-gpu`, metricName: 'GPU Usage' }), scalingSteps: [ { lower: 30, change: 1 }, // 指标>30时,增加1个实例 { lower: 50, change: 2 } // 指标>50时,增加2个实例 ], }); gpuAlarm.addAlarmAction(new actions.AutoScalingAction(stepScalingPolicy));
关键说明
SimpleScalingPolicy适用于单一阈值触发单一缩放动作的场景,配置简单直接。StepScalingPolicy适用于多阈值区间对应不同缩放动作的场景,必须定义至少两个scalingSteps条目。- 无需单独创建
StepScalingAction,缩放策略本身已经包含了动作配置,直接将告警与缩放策略关联即可。
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

