서드파티 컨트롤러를 사용한 Amazon ECS 서비스 배포

서드파티 컨트롤러를 사용한 Amazon ECS 서비스 배포

외부(external) 배포 유형을 사용하면 Amazon ECS 서비스의 배포 프로세스를 완전히 제어하기 위해 어떤 서드파티 배포 컨트롤러도 사용할 수 있습니다. 이 글에서는 외부 배포 워크플로와 파라미터를 알아봅니다.

출처: 문서

본문

외부 배포 유형을 사용하면 Amazon ECS 서비스의 배포 프로세스를 완전히 제어하기 위해 어떤 서드파티 배포 컨트롤러도 사용할 수 있어요. 서비스의 세부 정보는 서비스 관리 API 작업(CreateService, UpdateService, DeleteService) 또는 태스크 세트 관리 API 작업(CreateTaskSet, UpdateTaskSet, UpdateServicePrimaryTaskSet, DeleteTaskSet)으로 관리됩니다.

각 API 작업은 서비스 정의 파라미터의 하위 집합을 관리합니다.

  • UpdateService API 작업은 서비스의 desired count와 상태 확인 유예 기간 파라미터를 업데이트합니다.
  • 컴퓨트 옵션, 플랫폼 버전, 로드 밸런서 세부 정보, 네트워크 구성 또는 태스크 정의를 업데이트해야 한다면 새 태스크 세트(task set)를 만들어야 합니다.
  • UpdateTaskSet API 작업은 태스크 세트의 scale 파라미터만 업데이트합니다.
  • UpdateServicePrimaryTaskSet API 작업은 서비스에서 어떤 태스크 세트가 기본(primary) 태스크 세트인지 수정합니다.
  • DescribeServices API 작업을 호출하면 기본 태스크 세트에 대해 지정된 모든 필드가 반환됩니다. 서비스의 기본 태스크 세트가 업데이트되면, 새 기본 태스크 세트가 정의될 때 서비스에서 이전 기본 태스크 세트와 다른 값을 가진 새 기본 태스크 세트의 파라미터 값들이 새 값으로 업데이트됩니다. 서비스에 대해 기본 태스크 세트가 정의되지 않았다면, 서비스를 설명할 때 태스크 세트 필드는 null입니다.

외부 배포 고려 사항 (External deployment considerations)

외부 배포 유형을 사용할 때 다음을 고려하세요:

  • 지원되는 로드 밸런서 유형은 Application Load Balancer 또는 Network Load Balancer입니다.
  • Fargate 또는 EXTERNAL 배포 컨트롤러 유형은 DAEMON 스케줄링 전략을 지원하지 않습니다.
  • Application AutoScaling과 Amazon ECS의 통합은 Amazon ECS 서비스만 대상으로 지원합니다. Amazon ECS에 대한 지원되는 확장 가능한 차원은 ecs:service:DesiredCount 즉 Amazon ECS 서비스의 태스크 수입니다. Application AutoScaling과 Amazon ECS 태스크 세트 사이에는 직접적인 통합이 없습니다. Amazon ECS 태스크 세트는 Amazon ECS 서비스 DesiredCount를 기반으로 ComputedDesiredCount를 계산합니다.

외부 배포 워크플로 (External deployment workflow)

다음은 Amazon ECS에서 외부 배포를 관리하기 위한 기본 워크플로입니다.

외부 배포 컨트롤러로 Amazon ECS 서비스를 관리하려면

  1. Amazon ECS 서비스를 만듭니다. 유일한 필수 파라미터는 서비스 이름입니다. 외부 배포 컨트롤러로 서비스를 만들 때 다음 파라미터를 지정할 수 있어요. 다른 모든 서비스 파라미터는 서비스 내에서 태스크 세트를 만들 때 지정됩니다.
    • serviceName — Type: String, Required: Yes. 서비스의 이름입니다. 대문자와 소문자를 포함한 최대 255자의 문자, 숫자, 하이픈, 밑줄이 허용됩니다. 서비스 이름은 클러스터 내에서 고유해야 하지만, 리전 내 여러 클러스터 또는 여러 리전에 걸쳐 유사한 이름의 서비스를 가질 수 있습니다.
    • desiredCount — 서비스 내에서 배치하고 계속 실행할 지정된 태스크 세트 태스크 정의의 인스턴스화 수.
    • deploymentConfiguration — 배포 중에 실행되는 태스크 수와 태스크 중지·시작 순서를 제어하는 선택적 배포 파라미터.
    • tags — Type: Array of objects, Required: No. 서비스를 분류하고 구성하는 데 도움이 되도록 적용하는 메타데이터. 각 태그는 사용자가 정의한 키와 선택적 값으로 구성됩니다. 서비스가 삭제되면 태그도 삭제됩니다. 서비스에 최대 50개의 태그를 적용할 수 있어요. 자세한 내용은 Amazon ECS 리소스 태그 지정 문서를 참고하세요. 서비스를 업데이트할 때 이 파라미터는 새 서비스 배포를 트리거하지 않습니다.
      • key — Type: String, Length Constraints: 최소 1, 최대 128. Required: No. 태그를 구성하는 키-값 쌍 중 한 부분입니다. 키는 더 구체적인 태그 값에 대한 범주 역할을 하는 일반 레이블입니다.
      • value — Type: String, Length Constraints: 최소 0, 최대 256. Required: No. 태그를 구성하는 키-값 쌍의 선택적 부분입니다. 값은 태그 범주(키) 내의 설명자 역할을 합니다.
    • enableECSManagedTags — 서비스 내 태스크에 Amazon ECS 관리 태그를 사용할지 여부를 지정합니다. 자세한 내용은 과금용 태그 사용 문서를 참고하세요.
    • propagateTags — Type: String, Valid values: TASK_DEFINITION | SERVICE, Required: No. 태스크 정의 또는 서비스에서 서비스 내 태스크로 태그를 복사할지 여부를 지정합니다. 값이 지정되지 않으면 태그가 복사되지 않습니다. 태그는 서비스 생성 중에만 서비스 내 태스크로 복사할 수 있어요. 서비스 생성 또는 태스크 생성 후 태스크에 태그를 추가하려면 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"
}
  1. 초기 태스크 세트를 만듭니다. 태스크 세트에는 서비스에 대한 다음 세부 정보가 포함됩니다:

    • taskDefinition — 태스크 세트의 태스크가 사용할 태스크 정의.
    • launchType — Type: String, Valid values: EC2 | FARGATE | EXTERNAL, Required: No. 서비스를 실행할 시작 유형. 시작 유형을 지정하지 않으면 기본적으로 기본 capacityProviderStrategy가 사용됩니다. 서비스를 업데이트할 때 이 파라미터는 새 서비스 배포를 트리거합니다. launchType이 지정되면 capacityProviderStrategy 파라미터를 생략해야 합니다.
    • platformVersion — Type: String, Required: No. 서비스의 태스크가 실행되는 플랫폼 버전. 플랫폼 버전은 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 네트워크 모드를 사용하는 태스크 정의에 필요하며, 다른 네트워크 모드에서는 지원되지 않습니다.

더 알아보기 (Learn more)

  • 외부 배포 컨트롤러와 태스크 세트에 대한 자세한 내용은 AWS 개발자 가이드의 관련 문서를 참고하세요.