当您创建ECS自动标度策略时,有两个告警标记:一个用于扩展("out"),一个用于缩小("in")。
我看到创建的扩展数据似乎每分钟采样CPU利用率(或感兴趣的度量),并且只有在连续三个数据点超过阈值时才触发自动缩放。
这意味着,如果我看到交通高峰,三分钟后,规模扩大发生。(实际上,平均阈值缺口将发生在采样间隔的中间,因此延迟为3.5分钟。)
我可以调整采样率和数据点的数量需要通过AWS控制台网络接口。
然而,我想通过Terraform来管理我的基础设施。
我如何使用Terraform但没有手动点击来缩短(a)第一次突破阈值之间的时间;(b)我开始扩展的时间点?(还有:这是一件愚蠢的尝试吗?我是在用一种方框式的方式来做吗?)
据我所知,它看起来像滑上坡:创建自动标度策略(我可以通过Terraform完成)会自动创建两个警报并将句柄返回给它们(请参阅https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html),但Terraform不公开这些句柄(参见https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/appautoscaling_策略#属性-引用)。在Terraform还有可能吗?这需要英勇的努力吗?
发布于 2021-06-24 15:47:40
你绝对可以用Terraform来实现这一点。有几种方法可以实现这一点,但我将重点关注给您提供更多灵活性的方法。
假设您已经定义了您的aws_autoscaling_group
资源,然后您需要为您的ASG和CloudWatch
警报定义您的缩放策略,以触发它们。我通常跟踪3种不同的自动标度度量: MemoryReservation、CPUReservation和CPUUtilization。
的自动标度设置示例我们的ASG:
的扩展策略
resource "aws_autoscaling_policy" "my-cpu-scale-up" {
name = "my-cpu-scale-up"
scaling_adjustment = 1
adjustment_type = "ChangeInCapacity"
cooldown = 60
autoscaling_group_name = aws_autoscaling_group.[your-asg-resource].name
}
resource "aws_autoscaling_policy" "my-cpu-scale-down" {
name = "my-cpu-scale-down"
scaling_adjustment = -1
adjustment_type = "ChangeInCapacity"
cooldown = 300
autoscaling_group_name = aws_autoscaling_group.[your-asg-resource].name
}
resource "aws_cloudwatch_metric_alarm" "my-cpu-usage-high" {
alarm_name = "my-cpu-usage-high"
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = "2"
metric_name = "CPUUtilization"
namespace = "AWS/EC2"
period = "60" // in seconds
statistic = "Average"
threshold = "70" // in %
alarm_description = "This metric monitors the cluster for high CPU usage"
alarm_actions = [
aws_autoscaling_policy.my-cpu-scale-up.arn
]
dimensions ={
AutoScalingGroupName= aws_autoscaling_group.[your-asg-resource].name
}
}
resource "aws_cloudwatch_metric_alarm" "my-cpu-usage-low" {
alarm_name = "my-cpu-usage-low"
comparison_operator = "LessThanOrEqualToThreshold"
evaluation_periods = "2"
metric_name = "CPUUtilization"
namespace = "AWS/EC2"
period = "60"
statistic = "Average"
threshold = "20"
alarm_description = "This metric monitors my cluster for low CPU usage"
alarm_actions = [
aws_autoscaling_policy.my-cpu-scale-down.arn
]
dimensions ={
AutoScalingGroupName= aws_autoscaling_group.[your-asg-resource].name
}
}
正如您从这个例子中可以看到的那样,我们可以使用警报配置,直到达到预期的结果。
希望这能帮上忙!
https://serverfault.com/questions/1067540
复制相似问题