Terraform ECS 용량 공급자가 요청 시 새로운 ECS 인스턴스를 생성하지 않음

Terraform ECS 용량 공급자가 요청 시 새로운 ECS 인스턴스를 생성하지 않음

내가 읽은 것에서여기ECS 용량 공급자는 일반적으로 작업을 "프로비저닝" 상태로 전환하고 새 EC2 인스턴스를 가동하여 리소스 제한으로 인해 작업이 즉시 실패하는 것을 방지해야 합니다.

예를 들어 RunTask API를 호출했는데 리소스 부족으로 인해 작업이 인스턴스에 배치되지 않는 경우(즉, 작업을 실행하는 데 충분한 메모리, vCPU, 포트, ENI 및/또는 GPU가 있는 활성 인스턴스가 없음을 의미) ),즉시 실패하는 대신 작업이 프로비저닝 상태로 전환됩니다.(그러나 프로비저닝으로의 전환은 용량 공급자에 대해 관리형 조정을 활성화한 경우에만 발생합니다. 그렇지 않으면 이전과 마찬가지로 용량을 찾을 수 없는 작업이 즉시 실패합니다.)

Terraform의 Auto Scaling 그룹과 ECS 용량 공급자를 사용하여 ECS 클러스터를 설정했습니다. 자동 확장 그룹이 설정되어 min_size = 1즉시 단일 인스턴스를 가동합니다. 따라서 시작 구성이 괜찮다고 확신합니다.

그러나 API를 통해 "RunTask"를 반복적으로 호출하면(이 포함된 작업 memory=128) 이유 때문에 작업이 즉시 시작되지 않습니다 RESOURCE:MEMORY. 또한 새 인스턴스가 시작되지 않습니다.

내가 무엇을 잘못 구성했는지 알 수 없습니다.


이것은 모두 Terraform으로 설정되었습니다.

resource "aws_ecs_cluster" "ecs_cluster" {
  name = local.cluster_name


  setting {
    name  = "containerInsights"
    value = "enabled"
  }
  tags = var.tags
  capacity_providers = [aws_ecs_capacity_provider.capacity_provider.name]

  # I added this in an attempt to make it spin up new instance 
  default_capacity_provider_strategy {
    capacity_provider = aws_ecs_capacity_provider.capacity_provider.name
  }

}

resource "aws_ecs_capacity_provider" "capacity_provider" {
  name = "${var.tags.PlatformName}-stack-${var.tags.Environment}"

  auto_scaling_group_provider {
    auto_scaling_group_arn         = aws_autoscaling_group.autoscaling_group.arn
    managed_termination_protection = "DISABLED"

    managed_scaling {
      maximum_scaling_step_size = 4
      minimum_scaling_step_size = 1
      status                    = "ENABLED"
      target_capacity           = 100
    }
  }

  tags = var.tags
}

#Compute
resource "aws_autoscaling_group" "autoscaling_group" {
  name                      = "${var.tags.PlatformName}-${var.tags.Environment}"
  # If we're not using it, lets not pay for it
  min_size                  = "1"
  max_size                  = var.ecs_max_size
  launch_configuration      = aws_launch_configuration.launch_config.name
  health_check_grace_period = 60
  default_cooldown          = 30
  termination_policies      = ["OldestInstance"]
  vpc_zone_identifier       = local.subnets
  protect_from_scale_in     = false

  tag {
    key                 = "Name"
    value               = "${var.tags.PlatformName}-${var.tags.Environment}"
    propagate_at_launch = true
  }

  tag {
    key                 = "AmazonECSManaged"
    value               = ""
    propagate_at_launch = true
  }

  dynamic "tag" {
    for_each = var.tags
    content {
      key = tag.key
      propagate_at_launch = true
      value = tag.value
    }
  }

  enabled_metrics = [
    "GroupDesiredCapacity",
    "GroupInServiceInstances",
    "GroupMaxSize",
    "GroupMinSize",
    "GroupPendingInstances",
    "GroupStandbyInstances",
    "GroupTerminatingInstances",
    "GroupTotalInstances",
  ]
}

답변1

API에서 "RunTask"를 실행하는 동안 제가 저지른 실수로 인해 이렇게 보입니다(여기에 문서화되어 있습니다). 나는 지정 launchType했지만 capacityProviderStrategy.

RunTask 문서에서:

클러스터 Auto Scaling을 사용하는 경우 capacityProviderStrategy및 not을 지정해야 합니다 launchType.

그 결과 용량이 있으면 작업이 시작되지만 용량이 부족하면 즉시 실패하고 Auto Scaling에 응답할 기회를 주지 않는 것 같습니다.

클러스터에 설정되어 있기 launchType때문에 삭제만으로 작동하게 할 수 있었습니다 .default_capacity_provider_strategy

관련 정보