타사 컨트롤러를 사용한 Amazon ECS 서비스 배포
외부 배포 유형을 사용하면 타사 배포 컨트롤러를 사용하여 Amazon ECS 서비스의 배포 프로세스를 완벽하게 제어할 수 있습니다. 서비스에 대한 세부 정보는 서비스 관리 API 작업(CreateService
, UpdateService
및 DeleteService
) 또는 작업 세트 관리 API 작업(CreateTaskSet
, UpdateTaskSet
, UpdateServicePrimaryTaskSet
및 DeleteTaskSet
)에 의해 관리됩니다. 각 API 작업은 서비스 정의 파라미터의 하위 집합을 관리합니다.
UpdateService
API 동작은 서비스의 원하는 개수 및 상태 확인 유예 기간 파라미터를 업데이트합니다. 시작 유형, 플랫폼 버전, 로드 밸런서 세부 정보, 네트워크 구성 또는 태스크 정의를 업데이트해야 하는 경우 새 작업 세트를 만들어야 합니다.
UpdateTaskSet
API 태스크는 작업 세트의 배율 파라미터만 업데이트합니다.
UpdateServicePrimaryTaskSet
API 태스크는 서비스의 어떤 작업 세트가 기본 작업 세트인지 수정합니다. DescribeServices
API 태스크를 호출하면 기본 작업 세트에 대해 지정된 모든 필드를 반환합니다. 서비스에 대한 기본 작업 세트가 업데이트되면 새 기본 작업 세트가 정의될 때 서비스에 설정된 이전 기본 작업 세트와 다른 새 기본 작업 세트에 있는 작업 세트 파라미터 값이 새 값으로 업데이트됩니다. 서비스에 대한 기본 작업 세트가 정의되지 않은 경우, 서비스를 설명할 때 작업 세트 필드가 null입니다.
외부 배포 고려 사항
외부 배포 유형을 사용할 때는 다음 사항을 고려합니다.
-
지원되는 로드 밸런서 유형은 Application Load Balancer 또는 Network Load Balancer입니다.
-
Fargate 시작 유형이나
EXTERNAL
배포 컨트롤러 유형을 사용하는 태스크는DAEMON
일정 전략을 지원하지 않습니다.
외부 배포 워크플로
다음은 Amazon ECS에서 외부 배포를 관리하기 위한 기본 워크플로입니다.
외부 배포 컨트롤러를 사용하여 Amazon ECS 서비스를 관리하려면
-
Amazon ECS 서비스를 생성합니다. 이때는 서비스 이름 파라미터만 있으면 됩니다. 외부 배포 컨트롤러를 사용하여 서비스를 생성할 때 다음 파라미터를 지정할 수 있습니다. 다른 모든 서비스 파라미터는 서비스 내에 작업 세트를 생성할 때 지정됩니다.
serviceName
-
유형: 문자열
필수 항목 여부: 예
서비스의 이름입니다. 최대 255개의 문자(대문자 및 소문자), 숫자, 하이픈 및 밑줄이 허용됩니다. 서비스 이름은 클러스터 내에서 고유해야 하지만, 한 리전 또는 여러 리전에 걸쳐 존재하는 여러 클러스터에서 비슷한 서비스 이름을 사용할 수 있습니다.
desiredCount
-
서비스 내에 배포되어 실행되도록 지정된 작업 세트 태스크 정의의 인스턴스 수입니다.
deploymentConfiguration
-
배포 시 실행할 작업 수 및 작업 중지/시작 순서를 제어하는 선택적 배포 파라미터입니다.
-
타입: 객체 배열
필수 항목 여부: 아니요
서비스를 분류하고 구성하는 데 도움이 되도록 서비스에 적용하는 메타데이터입니다. 각 태그는 사용자가 정의하는 키와 선택적 값으로 구성됩니다. 서비스가 삭제되면 태그도 함께 삭제됩니다. 서비스에 최대 50개의 태그를 적용할 수 있습니다. 자세한 정보는 Amazon ECS 리소스 태그 지정 섹션을 참조하세요.
key
-
유형: 문자열
길이 제약: 최소 길이는 1. 최대 길이는 128입니다.
필수 항목 여부: 아니요
하나의 태그를 구성하는 키-값 쌍의 일부분입니다. 키는 더 구체적인 태그 값에 대해 범주와 같은 역할을 하는 일반적인 레이블입니다.
value
-
유형: 문자열
길이 제약: 최소 길이는 0. 최대 길이 256.
필수 항목 여부: 아니요
하나의 태그를 구성하는 키-값 쌍의 선택적 부분입니다. 하나의 값은 태그 범주(키) 내에서 서술자 역할을 수행합니다.
enableECSManagedTags
-
서비스 내의 태스크에 대해 Amazon ECS 관리형 태그를 사용할지를 지정합니다. 자세한 정보는 결제에 태그 사용을 참조하세요.
propagateTags
-
유형: 문자열
유효한 값:
TASK_DEFINITION
|SERVICE
필수 항목 여부: 아니요
태그를 태스크 정의 또는 서비스에서 서비스의 작업으로 복사할지를 지정합니다. 값을 지정하지 않을 경우 태그는 복사되지 않습니다. 태그는 서비스 생성 중에 서비스 내의 작업에만 복사할 수 있습니다. 서비스 생성 후 작업 생성에 태그를 추가하려면
TagResource
API 태스크를 사용합니다. schedulingStrategy
-
사용할 일정 전략입니다. 외부 배포 컨트롤러를 사용하는 서비스는
REPLICA
일정 전략만 지원합니다. placementConstraints
-
서비스 내 작업에 사용할 배치 제약 객체의 배열입니다. 작업당 최대 10개의 제약을 지정할 수 있습니다(이 제한에는 태스크 정의 내 제약과 런타임 시 지정되는 제약이 포함됨). Fargate 시작 유형을 사용하는 경우 작업 배치 제약은 지원되지 않습니다.
placementStrategy
-
서비스 내 작업에 사용할 배치 전략 객체입니다. 서비스당 최대 4개까지 전략 규칙을 지정할 수 있습니다.
다음은 외부 배포 컨트롤러를 사용하는 서비스를 생성하기 위한 예제 서비스 정의입니다.
{ "cluster": "", "serviceName": "", "desiredCount": 0, "role": "", "deploymentConfiguration": { "maximumPercent": 0, "minimumHealthyPercent": 0 }, "placementConstraints": [ { "type": "distinctInstance", "expression": "" } ], "placementStrategy": [ { "type": "binpack", "field": "" } ], "schedulingStrategy": "REPLICA", "deploymentController": { "type": "EXTERNAL" }, "tags": [ { "key": "", "value": "" } ], "enableECSManagedTags": true, "propagateTags": "TASK_DEFINITION" }
-
초기 작업 세트를 생성합니다. 작업 세트에는 서비스에 대한 다음 세부 정보가 들어 있습니다.
taskDefinition
-
사용할 작업 세트의 작업에 대한 태스크 정의입니다.
launchType
-
유형: 문자열
유효한 값:
EC2
|FARGATE
|EXTERNAL
필수 항목 여부: 아니요
서비스를 실행할 시작 유형. 시작 유형을 지정하지 않으면 기본적으로
capacityProviderStrategy
가 사용됩니다. 자세한 정보는 Amazon ECS 시작 유형을 참조하세요.launchType
이 지정된 경우capacityProviderStrategy
파라미터를 생략해야 합니다. platformVersion
-
유형: 문자열
필수 항목 여부: 아니요
서비스의 작업이 실행 중인 플랫폼 버전입니다. 플랫폼 버전은 Fargate 시작 유형을 사용하는 작업에만 지정됩니다. 지정하지 않으면 기본적으로 최신 버전(
LATEST
)이 사용됩니다.AWS Fargate 플랫폼 버전은 Fargate 태스크 인프라를 위한 특정 실행 시간 환경을 참조하는 데 사용합니다. 태스크를 실행하거나 서비스를 생성할 때
LATEST
플랫폼 버전을 지정하면 해당 작업에 사용 가능한 최신 플랫폼 버전을 얻을 수 있습니다. 서비스를 확장하면 해당 태스크는 서비스의 현재 배포에 지정된 플랫폼 버전을 받습니다. 자세한 내용은 Amazon ECS에 대한 Fargate 플랫폼 버전 단원을 참조하십시오.참고
플랫폼 버전은 EC2 시작 유형을 사용하는 작업에는 지정되지 않습니다.
loadBalancers
-
서비스와 함께 사용할 로드 밸런서를 나타내는 로드 밸런서 객체입니다. 외부 배포 컨트롤러를 사용하는 경우 Application Load Balancer 및 Network Load Balancer만 지원됩니다. Application Load Balancer를 사용하는 경우 작업 세트당 하나의 Application Load Balancer 대상 그룹만 허용됩니다.
다음 조각은 사용할
loadBalancer
객체의 예제를 보여줍니다."loadBalancers": [ { "targetGroupArn": "", "containerName": "", "containerPort": 0 } ]
참고
loadBalancer
객체를 지정할 때는targetGroupArn
을 지정하고loadBalancerName
파라미터를 생략해야 합니다. networkConfiguration
-
서비스에 대한 네트워크 구성. 이 파라미터는
awsvpc
네트워크 모드를 사용하는 태스크 정의가 고유한 탄력적 네트워크 인터페이스를 받는 데 필요하며 다른 네트워크 모드에 대해서는 지원되지 않습니다. Fargate 시작 유형의 네트워킹에 대한 자세한 내용은 Fargate 시작 유형에 대한 Amazon ECS 작업 네트워킹 옵션 섹션을 참조하세요. serviceRegistries
-
이 서비스에 할당할 서비스 검색 레지스트리의 세부 정보입니다. 자세한 정보는 서비스 검색을 사용하여 Amazon ECS 서비스를 DNS 이름으로 연결 섹션을 참조하세요.
scale
-
작업 세트에 배치하고 실행하려는 작업 수의 부동 소수점 백분율입니다. 이 값은 서비스의
desiredCount
에 대한 총 백분율로 지정됩니다. 허용되는 값은 0과 100 사이의 숫자입니다.
다음은 외부 배포 컨트롤러에 대한 작업 세트를 생성하기 위한 JSON 예제입니다.
{ "service": "", "cluster": "", "externalId": "", "taskDefinition": "", "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "" ], "securityGroups": [ "" ], "assignPublicIp": "DISABLED" } }, "loadBalancers": [ { "targetGroupArn": "", "containerName": "", "containerPort": 0 } ], "serviceRegistries": [ { "registryArn": "", "port": 0, "containerName": "", "containerPort": 0 } ], "launchType": "EC2", "capacityProviderStrategy": [ { "capacityProvider": "", "weight": 0, "base": 0 } ], "platformVersion": "", "scale": { "value": null, "unit": "PERCENT" }, "clientToken": "" }
-
서비스 변경이 필요한 경우 업데이트 중인 파라미터에 따라
UpdateService
,UpdateTaskSet
또는CreateTaskSet
API 태스크를 사용합니다. 작업 세트를 만든 경우 서비스의 각 작업 세트에 대해scale
파라미터를 사용하여 서비스에서 실행 중인 작업 수를 결정합니다. 예를 들어,tasksetA
가 포함된 서비스가 있고tasksetB
를 생성한 경우 프로덕션 트래픽을 전환하기 전에tasksetB
의 유효성을 테스트할 수 있습니다. 두 작업 세트의scale
을100
으로 설정할 수 있으며 모든 프로덕션 트래픽을tasksetB
로 전환할 준비가 되면tasksetA
의scale
을0
으로 업데이트하여 축소할 수 있습니다.