Amazon ECS 작업 배치 제약 - Amazon Elastic Container Service

Amazon ECS 작업 배치 제약

작업 배치 제약은 작업 배치 도중 고려하는 규칙입니다. 작업 배치 제약은 태스크를 실행할 때 또는 새 서비스를 생성할 때 지정할 수 있습니다. 기존 서비스에 대해서도 작업 배치 제약을 업데이트할 수 있습니다. 자세한 정보는 Amazon ECS 작업 배치 섹션을 참조하세요.

제약 유형

Amazon ECS가 지원하는 작업 배치 제약 유형은 다음과 같습니다.

distinctInstance

각 태스크를 서로 다른 컨테이너 인스턴스에 배치. 이 작업 배치 제약은 태스크를 실행할 때 또는 새 서비스를 생성할 때 지정할 수 있습니다.

memberOf

표현식을 충족하는 컨테이너 인스턴스에 태스크를 배치. 제약의 표현 구문에 대한 자세한 정보는 클러스터 쿼리 언어 섹션을 참조하세요.

다음 태스크를 사용하여 memberOf 작업 배치 제약을 지정할 수 있습니다.

  • 태스크 실행

  • 새 서비스 생성하기

  • 새 태스크 정의 생성하기

  • 기존 태스크 정의의 새로운 개정 생성하기

ecs.os-family

LINUX 또는 WINDOWS_SERVER_<OS_Release>_<FULL 또는 CORE>.

유효한 값은 LINUX 또는 WINDOWS_SERVER_<OS_Release>_<FULL or CORE>입니다. 예를 들면 WINDOWS_SERVER_2022_FULL, WINDOWS_SERVER_2022_CORE, WINDOWS_SERVER_20H2_CORE, WINDOWS_SERVER_2019_FULL, WINDOWS_SERVER_2019_COREWINDOWS_SERVER_2016_FULL.입니다.

다음 태스크를 사용하여 ecs.os-family 작업 배치 제약을 지정할 수 있습니다.

  • 태스크 실행

  • 새 서비스 생성하기

  • 새 태스크 정의 생성하기

  • 기존 태스크 정의의 새로운 개정 생성하기

Attributes

속성이라고 하는 사용자 지정 메타데이터를 컨테이너 인스턴스에 추가할 수 있습니다. 각 속성에는 이름과 선택 사항인 문자열 값이 있습니다. Amazon ECS가 제공하는 기본 속성을 사용하거나 사용자 지정 속성을 정의할 수 있습니다.

다음 섹션에는 샘플 기본 제공, 선택적 및 사용자 정의 속성이 있습니다.

기본 속성

Amazon ECS는 자동으로 다음 속성을 컨테이너 인스턴스에 적용합니다.

ecs.ami-id

인스턴스를 시작하는 데 사용된 AMI의 ID. 이 속성의 예시 값은 ami-1234abcd입니다.

ecs.availability-zone

인스턴스의 가용 영역. 이 속성의 예시 값은 us-east-1a입니다.

ecs.instance-type

인스턴스의 인스턴스 유형. 이 속성의 예시 값은 g2.2xlarge입니다.

ecs.os-type

인스턴스의 운영 체제. 이 속성에 사용 가능한 값은 linuxwindows입니다.

ecs.cpu-architecture

인스턴스의 CPU 아키텍처입니다. 이 속성의 예시 값은 x86_64arm64입니다.

ecs.vpc-id

인스턴스가 시작된 VPC입니다. 이 속성의 예시 값은 vpc-1234abcd입니다.

ecs.subnet-id

인스턴스가 사용 중인 서브넷입니다. 이 속성의 예시 값은 subnet-1234abcd입니다.

선택적 속성

Amazon ECS는 컨테이너 인스턴스에 다음 속성을 추가할 수 있습니다.

ecs.awsvpc-trunk-id

이 속성이 있으면 인스턴스에 트렁크 네트워크 인터페이스가 있습니다. 자세한 정보는 탄력적 네트워크 인터페이스 트렁킹 섹션을 참조하세요.

ecs.outpost-arn

이 속성이 있으면 Outpost의 Amazon 리소스 이름(ARN)이 포함됩니다. 자세한 정보는 AWS Outposts의 Amazon Elastic Container Service 섹션을 참조하세요.

ecs.capability.external

이 속성이 있으면 인스턴스가 외부 인스턴스로 식별됩니다. 자세한 정보는 외부 인스턴스(Amazon ECS Anywhere) 섹션을 참조하세요.

사용자 지정 속성

컨테이너 인스턴스에 사용자 지정 속성을 적용할 수 있습니다. 예를 들어 이름이 "stack"이고 값이 "prod"인 속성을 정의할 수 있습니다.

사용자 정의 속성을 지정할 때 다음 사항을 고려해야 합니다.

  • name은 1~128자의 문자를 포함해야 하며 이름에는 문자(대문자 및 소문자), 숫자, 하이픈, 밑줄, 슬래시, 백슬래시 또는 마침표가 포함될 수 있습니다.

  • value은 1~128자의 문자를 포함해야 하며 이름에는 문자(대문자 및 소문자), 숫자, 하이픈, 밑줄, 마침표, @ 기호, 슬래시, 백슬래시, 콜론 또는 공백이 포함될 수 있습니다. 값은 선행 또는 후행 공백을 포함할 수 없습니다.

속성 추가

컨테이너 에이전트를 사용하거나 수동으로 AWS Management Console을 사용하여 인스턴스 등록 시 사용자 지정 속성을 추가할 수 있습니다. 컨테이너 에이전트 사용에 대한 자세한 정보는 Amazon ECS 컨테이너 에이전트 구성 파라미터를 참조하세요.

콘솔을 사용하여 사용자 지정 속성을 추가하려면

  1. https://console.aws.amazon.com/ecs/에서 Amazon ECS 콘솔을 엽니다.

  2. 탐색 창에서 클러스터(Clusters)를 선택하고 클러스터를 선택합니다.

  3. ECS 인스턴스(ECS Instances) 탭에서 컨테이너 인스턴스의 확인란을 선택합니다.

  4. 작업(Actions), 속성 보기/편집(View/Edit Attributes)을 선택합니다.

  5. 각 속성에 대해 다음을 수행합니다.

    1. 속성 추가(Add attribute)를 선택합니다.

    2. 속성의 이름과 값을 입력하고 확인 표시 아이콘을 선택합니다.

  6. 속성 추가를 마치면 닫기(Close)를 선택합니다.

AWS CLI를 사용하여 사용자 지정 속성 추가

다음 예제는 put-attributes 명령을 사용하여 사용자 지정 속성을 추가하는 방법을 보여 줍니다.

예제: 단일 속성

다음 예제는 사용자 지정 속성 "stack=prod"를 기본 클러스터에 있는 지정된 컨테이너 인스턴스에 추가합니다.

aws ecs put-attributes --attributes name=stack,value=prod,targetId=arn

예제: 여러 속성

다음 예제는 사용자 지정 속성 "stack=prod"와 "project=a"를 기본 클러스터에 있는 지정된 컨테이너 인스턴스에 추가합니다.

aws ecs put-attributes --attributes name=stack,value=prod,targetId=arn name=project,value=a,targetId=arn

속성으로 필터링

사용자 지정 속성을 확인할 수 있도록 컨테이너 인스턴스에 필터를 적용할 수 있습니다.

콘솔을 사용하여 속성별 컨테이너 인스턴스 필터링

  1. https://console.aws.amazon.com/ecs/에서 Amazon ECS 콘솔을 엽니다.

  2. 컨테이너 인스턴스가 있는 클러스터를 선택합니다.

  3. ECS 인스턴스(ECS Instances)를 선택합니다.

  4. 기어 모양 아이콘( )을 선택하고 표시할 속성을 선택하여 열 표시 기본 설정을 지정합니다. 이 설정은 계정과 연결된 모든 컨테이너 클러스터에 지속됩니다.

  5. 속성별 필터링(Filter by attributes) 텍스트 필드를 사용하여 필터링 기준 속성을 입력하거나 선택합니다. 형식은 AttributeName:AttributeValue여야 합니다.

    속성별 필터링(Filter by attributes)의 경우 필터 기준 속성을 입력하거나 선택합니다. 속성 이름을 선택하면 속성 값에 대한 메시지가 나타납니다.

  6. 필요에 따라 필터에 추가 속성을 추가합니다. 속성 옆에 있는 X를 선택하여 제거합니다.

AWS CLI를 사용하여 속성별 컨테이너 인스턴스 필터링

다음 예제는 list-container-instances 명령을 사용하여 컨테이너 인스턴스를 속성으로 필터링하는 방법을 보여 줍니다. 필터 구문에 대한 자세한 정보는 클러스터 쿼리 언어 섹션을 참조하세요.

예제: 기본 속성

다음 예에서는 기본 속성을 사용하여 g2.2xlarge 인스턴스를 나열합니다.

aws ecs list-container-instances --filter "attribute:ecs.instance-type == g2.2xlarge"

예제: 사용자 지정 속성

다음 예에서는 사용자 지정 속성 "stack=prod"를 사용하여 인스턴스를 나열합니다.

aws ecs list-container-instances --filter "attribute:stack == prod"

예제: 속성 값 제외

다음 예에서는 속성 값이 "prod"가 아닌 경우에 사용자 지정 속성 "stack"을 사용하여 인스턴스를 나열합니다.

aws ecs list-container-instances --filter "attribute:stack != prod"

예제: 여러 속성 값

다음 예에서는 기본 속성을 사용하여 t2.small 또는 t2.medium 유형 인스턴스를 나열합니다.

aws ecs list-container-instances --filter "attribute:ecs.instance-type in [t2.small, t2.medium]"

예제: 여러 속성

다음 예에서는 기본 속성을 사용하여 가용 영역 us-east-1a에 있는 T2 인스턴스를 나열합니다

aws ecs list-container-instances --filter "attribute:ecs.instance-type =~ t2.* and attribute:ecs.availability-zone == us-east-1a"

제약 예시

다음은 작업 배치 제약 예제입니다.

이 예제에서는 memberOf 제약을 사용하여 T2 인스턴스에 태스크를 배치합니다. 다음 작업 CreateService, UpdateService, RegisterTaskDefinitionRunTask로 지정할 수 있습니다.

"placementConstraints": [ { "expression": "attribute:ecs.instance-type =~ t2.*", "type": "memberOf" } ]

이 예제에서는 memberOf 제약을 사용하여 지정된 모든 작업 배치 전략을 적용한 databases 작업 그룹의 다른 태스크와 함께 인스턴스에 태스크를 배치합니다. 작업 그룹에 대한 자세한 정보는 작업 그룹 섹션을 참조하세요. 다음 작업 CreateService, UpdateService, RegisterTaskDefinitionRunTask로 지정할 수 있습니다.

"placementConstraints": [ { "expression": "task:group == databases", "type": "memberOf" } ]

distinctInstance 제약은 그룹의 각 태스크를 서로 다른 인스턴스에 배치합니다. 다음 작업 CreateService, UpdateServiceRunTask로 지정할 수 있습니다.

"placementConstraints": [ { "type": "distinctInstance" } ]