외부 배포 - Amazon Elastic Container Service

외부 배포

외부 배포 유형을 사용하면 타사 배포 컨트롤러를 사용하여 Amazon ECS 서비스의 배포 프로세스를 완벽하게 제어할 수 있습니다. 서비스에 대한 세부 정보는 서비스 관리 API 작업(CreateService, UpdateServiceDeleteService) 또는 작업 세트 관리 API 작업(CreateTaskSet, UpdateTaskSet, UpdateServicePrimaryTaskSetDeleteTaskSet)에 의해 관리됩니다. 각 API 작업에는 관리할 수 있는 서비스 정의 파라미터의 하위 집합이 있습니다.

UpdateService API 동작은 서비스의 원하는 개수 및 상태 확인 유예 기간 파라미터를 업데이트합니다. 시작 유형, 플랫폼 버전, 로드 밸런서 세부 정보, 네트워크 구성 또는 태스크 정의를 업데이트해야 하는 경우 새 작업 세트를 만들어야 합니다.

UpdateTaskSet API 태스크는 작업 세트의 배율 파라미터만 업데이트합니다.

UpdateServicePrimaryTaskSet API 태스크는 서비스의 어떤 작업 세트가 기본 작업 세트인지 수정합니다. DescribeServices API 태스크를 호출하면 기본 작업 세트에 대해 지정된 모든 필드를 반환합니다. 서비스에 대한 기본 작업 세트가 업데이트되면 새 기본 작업 세트가 정의될 때 서비스에 설정된 이전 기본 작업 세트와 다른 새 기본 작업 세트에 있는 작업 세트 파라미터 값이 새 값으로 업데이트됩니다. 서비스에 대한 기본 작업 세트가 정의되지 않은 경우, 서비스를 설명할 때 작업 세트 필드가 null입니다.

외부 배포 고려 사항

외부 배포 유형을 사용할 때는 다음 사항을 고려합니다.

  • 작업에 로드 밸런서를 사용하는 경우 지원되는 로드 밸런서 유형은 Application Load Balancer 또는 Network Load Balancer입니다.

  • Fargate 시작 유형이나 EXTERNAL 배포 컨트롤러 유형을 사용하는 태스크는 DAEMON 일정 전략을 지원하지 않습니다.

외부 배포 워크플로

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

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

  1. Amazon ECS 서비스를 생성합니다. 이때는 서비스 이름 파라미터만 있으면 됩니다. 외부 배포 컨트롤러를 사용하여 서비스를 생성할 때 다음 파라미터를 지정할 수 있습니다. 다른 모든 서비스 파라미터는 서비스 내에 작업 세트를 생성할 때 지정됩니다.

    serviceName

    유형: String

    필수 항목 여부: 예

    서비스의 이름입니다. 최대 255개의 문자(대문자 및 소문자), 숫자, 하이픈 및 밑줄이 허용됩니다. 서비스 이름은 클러스터 내에서 고유해야 하지만, 한 리전 또는 여러 리전에 걸쳐 존재하는 여러 클러스터에서 비슷한 서비스 이름을 사용할 수 있습니다.

    desiredCount

    서비스 내에 배포되어 실행되도록 지정된 작업 세트 태스크 정의의 인스턴스 수입니다.

    deploymentConfiguration

    배포 시 실행할 작업 수 및 작업 중지/시작 순서를 제어하는 선택적 배포 파라미터입니다. 자세한 정보는 deploymentConfiguration 섹션을 참조하세요.

    tags

    유형: 객체 배열

    필수 항목 여부: 아니요

    서비스를 분류하고 구성하는 데 도움이 되도록 서비스에 적용하는 메타데이터입니다. 각 태그는 사용자가 정의하는 키와 선택적 값으로 구성됩니다. 서비스가 삭제되면 태그도 함께 삭제됩니다. 서비스에 최대 50개의 태그를 적용할 수 있습니다. 자세한 정보는 Amazon ECS 리소스 태깅 섹션을 참조하세요.

    key

    유형: String

    길이 제약: 최소 길이는 1입니다. 최대 길이는 128입니다.

    필수 항목 여부: 아니요

    하나의 태그를 구성하는 키-값 쌍의 일부분입니다. 키는 더 구체적인 태그 값에 대해 카테고리와 같은 역할을 하는 일반적인 레이블입니다.

    value

    유형: String

    길이 제약: 최소 길이 0. 최대 길이 256.

    필수 항목 여부: 아니요

    하나의 태그를 구성하는 키-값 쌍의 선택적 부분입니다. 하나의 값은 태그 카테고리(키) 내에서 서술자 역할을 수행합니다.

    enableECSManagedTags

    서비스 내의 태스크에 대해 Amazon ECS 관리형 태그를 사용할지를 지정합니다. 자세한 정보는 리소스에 결제용 태그 지정을 참조하세요.

    propagateTags

    유형: String

    유효한 값: TASK_DEFINITION | SERVICE

    필수 항목 여부: 아니요

    태그를 태스크 정의 또는 서비스에서 서비스의 작업으로 복사할지를 지정합니다. 값을 지정하지 않을 경우 태그는 복사되지 않습니다. 태그는 서비스 생성 중에 서비스 내의 작업에만 복사할 수 있습니다. 서비스 생성 후 작업 생성에 태그를 추가하려면 TagResource API 태스크를 사용합니다.

    healthCheckGracePeriodSeconds

    유형: Integer

    필수 항목 여부: 아니요

    RUNNING 상태에 들어간 후, Amazon ECS 서비스 스케줄러가 작업이 비정상적인 Elastic Load Balancing 대상 상태 확인, 컨테이너 상태 확인 및 Route 53 상태 확인을 무시해야 하는 시간(초)입니다. 이는 서비스가 로드 밸런서를 사용하도록 구성된 경우에만 유효합니다. 서비스에 로드 밸런서가 정의되어 있고 상태 확인 유예 기간 값이 지정되지 않으면 기본값인 0이 사용됩니다.

    서비스 태스크를 시작하고 상태 확인에 응답하는 데 시간이 다소 걸린다면 최대 2,147,483,647초의 상태 확인 유예 기간을 지정할 수 있습니다. 이 기간에는 ECS 서비스 스케줄러가 상태 확인의 상태를 무시합니다. 이 유예 기간 전에는 ECS 서비스 스케줄러가 태스크를 비정상으로 표시하고 태스크를 중단할 수 없습니다.

    Elastic Load Balancing을 사용하지 않는 경우 태스크 정의 상태 확인 파라미터에서 startPeriod를 사용하는 것이 좋습니다. 자세한 정보는 상태 확인을 참조하세요.

    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": "" } ], "healthCheckGracePeriodSeconds": 0, "schedulingStrategy": "REPLICA", "deploymentController": { "type": "EXTERNAL" }, "tags": [ { "key": "", "value": "" } ], "enableECSManagedTags": true, "propagateTags": "TASK_DEFINITION" }
  2. 초기 작업 세트를 생성합니다. 작업 세트에는 서비스에 대한 다음 세부 정보가 들어 있습니다.

    taskDefinition

    사용할 작업 세트의 작업에 대한 태스크 정의입니다.

    launchType

    유형: String

    유효한 값: EC2 | FARGATE | EXTERNAL

    필수 항목 여부: 아니요

    서비스를 실행할 시작 유형. 지정하지 않으면 기본적으로 EC2가 사용됩니다. 자세한 정보는 Amazon ECS 시작 유형 섹션을 참조하세요.

    launchType이 지정된 경우 capacityProviderStrategy 파라미터를 생략해야 합니다.

    platformVersion

    유형: String

    필수 항목 여부: 아니요

    서비스의 작업이 실행 중인 플랫폼 버전입니다. 플랫폼 버전은 Fargate 시작 유형을 사용하는 작업에만 지정됩니다. 지정하지 않으면 기본적으로 최신 버전(LATEST)이 사용됩니다.

    AWS Fargate 플랫폼 버전은 Fargate 태스크 인프라를 위한 특정 실행 시간 환경을 참조하는 데 사용합니다. 태스크를 실행하거나 서비스를 생성할 때 LATEST 플랫폼 버전을 지정하면 해당 작업에 사용 가능한 최신 플랫폼 버전을 얻을 수 있습니다. 서비스를 확장하면 해당 태스크는 서비스의 현재 배포에 지정된 플랫폼 버전을 받습니다. 자세한 정보는 AWS 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 네트워크 모드를 사용하는 태스크 정의가 고유한 탄력적 네트워크 인터페이스를 받는 데 필요하며 다른 네트워크 모드에 대해서는 지원되지 않습니다. 자세한 정보는 Amazon ECS 태스크 네트워킹 섹션을 참조하세요.

    serviceRegistries

    이 서비스에 할당할 서비스 검색 레지스트리의 세부 정보입니다. 자세한 정보는 서비스 검색 섹션을 참조하세요.

    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": "" }
  3. 서비스 변경이 필요한 경우 업데이트 중인 파라미터에 따라 UpdateService, UpdateTaskSet 또는 CreateTaskSet API 태스크를 사용합니다. 작업 세트를 만든 경우 서비스의 각 작업 세트에 대해 scale 파라미터를 사용하여 서비스에서 실행 중인 작업 수를 결정합니다. 예를 들어, tasksetA가 포함된 서비스가 있고 tasksetB를 생성한 경우 프로덕션 트래픽을 전환하기 전에 tasksetB의 유효성을 테스트할 수 있습니다. 두 작업 세트의 scale100으로 설정할 수 있으며 모든 프로덕션 트래픽을 tasksetB로 전환할 준비가 되면 tasksetAscale0으로 업데이트하여 축소할 수 있습니다.