본문 바로가기
Cloud/AWS

[AWS] ECS 작업 배치 정의 전략(Use strategies to define Amazon ECS task placement)

by 양눈 2025. 1. 13.
반응형

AWS의 ECS를 사용하면 Service(Container)를 ECS instance node(EC2)에 배치 할 때 어떤 기준으로 Service를 배치 할 것인지 정의 할 수 있다. 
이것은 작업을 실행할 때(RunTask), 새 서비스를 생성할 때(CreateService), 또는 기존 서비스를 업데이트할 때(UpdateService) 전략을 지정할 수 있다. (이 내용은 task 정의 할 때 들어가는 내용이 아니다.) 

아무 설정도 하지 않으면 기본적으로 아래와 같이 AZ기준으로 분산이다. 

"placementStrategy": [
    {
        "field": "attribute:ecs.availability-zone",
        "type": "spread"
    }
]

사용할 수 있는 type과 유효한 필드 값은 아래와 같다. 

type
유효한 필드 값
binpack

태스크는 사용되지 않는 CPU 또는 메모리를 최소한으로 남겨둘 수 있도록 컨테이너 인스턴스에 배치됩니다. 이 전략은 사용 중인 컨테이너 인스턴스의 수를 최소화합니다.
이 전략을 사용하고 축소 작업을 수행하면 Amazon ECS가 태스크를 종료합니다. 이는 태스크가 종료된 후 컨테이너 인스턴스에 남아 있는 리소스의 양을 기준으로 합니다. 태스크 종료 후 사용 가능한 리소스가 가장 많이 남은 컨테이너 인스턴스가 해당 태스크를 종료합니다.
  • cpu
  • memory
random

태스크가 무작위로 배치됩니다.
사용되지 않습니다
spread

태스크가 지정된 값에 따라 균등하게 배치됩니다.
서비스 태스크는 해당 서비스의 태스크를 기준으로 분산됩니다. 독립 실행형 태스크는 동일한 작업 그룹의 태스크를 기준으로 분산됩니다. 작업 그룹에 대한 자세한 정보는 그룹 관련 Amazon ECS 작업 섹션을 참조하세요.spread 전략이 사용되고 축소 작업이 수행되면 Amazon ECS가 가용 영역 간에 균형을 유지하도록 종료할 태스크를 선택합니다. 가용 영역 내에서 태스크가 무작위로 선택됩니다.
  • instanceId (또는 host, 효과가 동일함)

  • attribute:ecs.availability-zone

    컨테이너 인스턴스에 적용되는 모든 플랫폼 또는 사용자 지정 속성
사용할 수 있는 type과 field 값을 확인 해보면 spread는 분산하겠다는 뜻이고 binpack은 모으겠다는 것으로 보면 된다. 
그런데 CPU, MEM 기준으로는 binpack만 사용 할 수 있고, 노드 분산을 의미하는 spread는 인스턴스(instanceId)와, AZ(attribute:ecs.availability-zone)기준으로만 사용 할 수 있다. 이부분을 잘 기억 할 필요가 있다. 
전략 옵션은 한가지만 사용할 수 도 있고 여러개 혼합 해서 사용할 수 있다. 
아래 예시 참고 해서 사용 하면 된다. 
 

가용 영역에 균등하게 작업 분산

 

다음 전략은 가용 영역에 균등하게 태스크를 분산합니다.

 
"placementStrategy": [
    {
        "field": "attribute:ecs.availability-zone",
        "type": "spread"
    }
]

모든 인스턴스에 균등하게 작업 분산

 

다음 전략은 모든 인스턴스에 균등하게 태스크를 분산합니다.

 
"placementStrategy": [
    {
        "field": "instanceId",
        "type": "spread"
    }
]

메모리를 기반으로 작업 빈팩

 

다음 전략은 메모리를 기준으로 태스크를 bin-pack합니다.

 
"placementStrategy": [
    {
        "field": "memory",
        "type": "binpack"
    }
]

무작위로 작업 배치

 

다음 전략은 태스크를 무작위로 배치합니다.

 
"placementStrategy": [
    {
        "type": "random"
    }
]

가용 영역에 균등하게 작업을 분산한 다음 각 가용 영역 내에서 인스턴스에 균등하게 작업 분산

 

다음 전략은 가용 영역에 균등하게 태스크를 분산한 다음 각 가용 영역 내에서 인스턴스에 균등하게 태스크를 분산합니다.

 
"placementStrategy": [
    {
        "field": "attribute:ecs.availability-zone",
        "type": "spread"
    },
    {
        "field": "instanceId",
        "type": "spread"
    }
]

가용 영역에 균등하게 작업을 분산한 다음 각 가용 영역 내의 메모리를 기준으로 작업 빈팩

 

다음 전략은 가용 영역에 균등하게 태스크를 분산한 다음 각 가용 영역 내에서 메모리를 기준으로 태스크를 bin-pack합니다.

 
"placementStrategy": [
    {
        "field": "attribute:ecs.availability-zone",
        "type": "spread"
    },
    {
        "field": "memory",
        "type": "binpack"
    }
]

인스턴스에 균등하게 작업을 분산한 다음 메모리를 기반으로 작업 빈팩

 

다음 전략에서는 모든 인스턴스에 균등하게 작업을 분산한 다음 각 인스턴스 내의 메모리를 기반으로 작업을 빈팩합니다.

 
"placementStrategy": [
    {
        "field": "instanceId",
        "type": "spread"
    },
    {
        "field": "memory",
        "type": "binpack"
    }
]
 

 

그리고 해당 옵션을 적용했음에도 분산이 안되는 경우라면 서비스 강제 삭제 후 서비스 재배포 하거나
"가용성 영역 리밸런싱 켜기" 옵션을 활성화 하면 분산 됨을 확인 할 수 있다. 
 
 

참고문서.

https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/task-placement-strategies.html

https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/strategy-examples.html

 

Amazon ECS 작업 배치 전략 예제 - Amazon Elastic Container Service

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

반응형

댓글