如何從 terraform 中最小化 ecs 自動縮放反應時間?
當您創建 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 的擴展策略:
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 }
CloudWatch 警報將觸發我們的一項政策。
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 } }
正如你從這個例子中看到的,我們可以玩弄警報配置,直到我們達到預期的結果。
希望有幫助!