当您创建 ECS 弹性伸缩策略时,会同时标记两个警报:一个用于扩展(“out”),一个用于缩减(“in”)。
我看到创建的横向扩展似乎每分钟对 CPU 利用率(或感兴趣的指标)进行采样,并且仅在三个连续数据点超过阈值时触发自动扩展。
这意味着,如果我看到流量高峰,将在三分钟后发生横向扩展。(事实上,平均而言,阈值突破将发生在采样间隔的中间,因此延迟为三分半钟。)
我可以通过 AWS 控制台 Web 界面调整采样率和所需的数据点数量。
但是,我想通过 Terraform 管理我的基础设施。
我如何使用 Terraform 但没有手动点击来缩短(a)第一次违反阈值之间的时间;(b) 我开始向外扩展的时间点?(另外:这是一个愚蠢的尝试吗?我是否以 awk-basscards 的方式来处理它?)
据我所知,它看起来像滑冰上坡:创建自动缩放策略(我可以通过 Terraform 完成)会自动创建两个警报并将句柄返回给它们(请参阅https://docs.aws.amazon.com/autoscaling/ application/APIReference/API_PutScalingPolicy.html),但 Terraform 不会公开这些句柄(请参阅https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/appautoscaling_policy#attributes-reference)。在 Terraform 中还有可能吗?需要英勇的努力吗?
您绝对可以使用 Terraform 实现这一目标。有几种方法可以实现这一点,但我将专注于为您提供更多灵活性的方法。
假设您已经
aws_autoscaling_group
定义了资源,之后您需要为 ASG 定义扩展策略以及CloudWatch
触发它们的警报。我通常跟踪 3 个不同的自动缩放指标:MemoryReservation、CPUReservation 和 CPUUtilization。如何根据 CPUUtilization 设置自动缩放的示例。
我们的 ASG 的扩展策略:
CloudWatch 警报将触发我们的一项政策。
正如你从这个例子中看到的,我们可以玩弄警报配置,直到我们达到预期的结果。
希望有帮助!