,例如,客户要求每天上午8:00,我们将预先发布50个特定服务实例。预定的缩放效果很好,我们得到了50个任务实例。
问题是,我的动态缩放是看到这些任务未被充分利用并开始关闭它们,大约半小时后,我们因流量而淹没,服务开始崩溃。 我正在附加我的模块配置,大多数值都设置在外部,但它应该使您了解其工作原理。 我只是想更好地理解我是否错过了什么,或者我做的整个逻辑是否不正确。感谢任何能够协助的人。
resource "aws_appautoscaling_target" "auto_scaling_target" {
for_each = var.compute_services_auto_scaling_configuration
max_capacity = each.value.instance_max_capacity
min_capacity = each.value.instance_min_capacity
resource_id = "service/${var.cluster_name}/${each.key}"
scalable_dimension = "ecs:service:DesiredCount"
service_namespace = "ecs"
}
resource "aws_appautoscaling_policy" "auto_scaling_memory_policy" {
for_each = var.compute_services_auto_scaling_configuration
name = "${each.key}_auto_scaling_memory_policy"
policy_type = "TargetTrackingScaling"
resource_id = aws_appautoscaling_target.auto_scaling_target[each.key].resource_id
scalable_dimension = aws_appautoscaling_target.auto_scaling_target[each.key].scalable_dimension
service_namespace = aws_appautoscaling_target.auto_scaling_target[each.key].service_namespace
target_tracking_scaling_policy_configuration {
predefined_metric_specification {
predefined_metric_type = "ECSServiceAverageMemoryUtilization"
}
target_value = each.value.memory_scaling_target_value
}
}
resource "aws_appautoscaling_policy" "auto_scaling_cpu_policy" {
for_each = var.compute_services_auto_scaling_configuration
name = "${each.key}_auto_scaling_cpu_policy"
policy_type = "TargetTrackingScaling"
resource_id = aws_appautoscaling_target.auto_scaling_target[each.key].resource_id
scalable_dimension = aws_appautoscaling_target.auto_scaling_target[each.key].scalable_dimension
service_namespace = aws_appautoscaling_target.auto_scaling_target[each.key].service_namespace
target_tracking_scaling_policy_configuration {
predefined_metric_specification {
predefined_metric_type = "ECSServiceAverageCPUUtilization"
}
target_value = each.value.cpu_scaling_target_value
}
}
resource "aws_appautoscaling_policy" "auto_scaling_sqs_policy" {
for_each = var.sqs_based_auto_scaling_configuration
name = "${each.key}_auto_scaling_sqs_policy"
policy_type = "TargetTrackingScaling"
resource_id = aws_appautoscaling_target.auto_scaling_target[each.key].resource_id
scalable_dimension = aws_appautoscaling_target.auto_scaling_target[each.key].scalable_dimension
service_namespace = aws_appautoscaling_target.auto_scaling_target[each.key].service_namespace
target_tracking_scaling_policy_configuration {
customized_metric_specification {
metric_name = "ApproximateNumberOfMessagesVisible"
namespace = "AWS/SQS"
statistic = "Average"
dimensions {
name = "QueueName"
value = each.value.queue_name
}
}
target_value = each.value.sqs_scaling_target_value
scale_in_cooldown = 300
scale_out_cooldown = 300
}
}
locals {
flattened_scheduled_scaling_actions = flatten([
for service, actions in var.compute_services_scheduled_scaling : [
for idx, action in actions : {
action_name = "${service}_scheduled_scaling_${idx + 1}"
service_name = service
schedule = action.schedule_expression
desired_count = action.scalable_action.desired_count
}
]
])
}
resource "aws_appautoscaling_scheduled_action" "scheduled_scaling" {
for_each = { for action in local.flattened_scheduled_scaling_actions : action.action_name => action }
service_namespace = "ecs"
resource_id = "service/${var.cluster_name}/${each.value.service_name}"
scalable_dimension = "ecs:service:DesiredCount"
name = each.value.action_name
schedule = each.value.schedule
scalable_target_action {
min_capacity = each.value.desired_count
max_capacity = each.value.desired_count
}
}
解决此问题的选项之一是使用冷却时间进行动态缩放
避免冷却时间:60年代(对交通迅速反应)Scale-in Condowown:3600(60分钟)
在AWS CLI中设置此设置:
aws application-autoscaling put-scaling-policy \
--policy-name "ScaleInCooldownPolicy" \
--service-namespace ecs \
--resource-id service/YOUR-CLUSTER-NAME/YOUR-SERVICE-NAME \
--scalable-dimension ecs:service:DesiredCount \
--policy-type TargetTrackingScaling \
--target-tracking-scaling-policy-configuration '{
"TargetValue": 50.0,
"PredefinedMetricSpecification": {
"PredefinedMetricType": "ECSServiceAverageCPUUtilization"
},
"ScaleInCooldown": 3600,
"ScaleOutCooldown": 60
}'