데몬 배포

데몬 배포 (Daemon deployments)

데몬(daemon)을 생성하거나 업데이트하면 Amazon ECS는 연결된 capacity provider의 모든 인스턴스에서 데몬 태스크를 실행하도록 롤링 배포(rolling deployment)를 수행합니다. 이 글에서는 데몬 배포가 작동하는 방식과 배포 동작을 구성하는 방법을 알아봅니다.

출처: 문서

본문

데몬을 생성하거나 업데이트하면 Amazon ECS는 연결된 capacity provider의 모든 인스턴스에서 데몬 태스크를 실행하도록 롤링 배포를 수행합니다. 이 섹션에서는 데몬 배포가 작동하는 방식과 배포 동작을 구성하는 방법을 설명합니다.

데몬 배포 작동 방식 (How daemon deployments work)

데몬 배포는 드레인-프로비저닝-교체(drain-provision-replace) 패턴을 따릅니다. 기존 인스턴스가 있는 capacity provider에서 데몬을 생성하거나 데몬을 새 태스크 정의 개정으로 업데이트하면 Amazon ECS는 인스턴스 배치를 드레인하고, 업데이트된 데몬으로 대체 인스턴스를 프로비저닝하며, 애플리케이션 태스크를 자동으로 교체합니다. 이 프로세스는 모든 인스턴스가 새 데몬 개정을 실행할 때까지 반복됩니다.

배포 수명 주기는 다음 상태를 거쳐 진행됩니다:

  • PENDING — Amazon ECS가 배포를 생성하고 시작을 준비 중입니다.
  • IN_PROGRESS — Amazon ECS가 인스턴스를 적극적으로 드레인하고 대체 인스턴스를 프로비저닝 중입니다.
  • SUCCESSFUL — 모든 인스턴스가 대상 데몬 개정을 실행 중입니다.
  • STOPPED — Amazon ECS가 배포를 중지했습니다. 실패했거나 새 배포로 교체되었기 때문입니다. 데몬은 일부 인스턴스가 이전 개정을, 다른 인스턴스가 새 개정을 실행하는 혼합 상태일 수 있어요.

배포 중에 서킷 브레이커(circuit breaker)가 실패를 감지하거나 CloudWatch 알람이 트리거되면 Amazon ECS는 자동으로 이전 데몬 개정으로 롤백합니다.

배포 중에 중요하지 않은(non-critical) 데몬 태스크 실패는 인스턴스를 드레인하거나 교체하지 않으므로 인스턴스는 활성 상태를 유지하고 애플리케이션 태스크를 계속 실행합니다. 데몬 태스크 시작 실패는 여전히 배포 서킷 브레이커에 집계되며, 이는 불안정한 대상 개정을 롤백할 수 있어요.

배포 구성 파라미터 (Deployment configuration parameters)

데몬을 생성하거나 업데이트할 때 deploymentConfiguration 파라미터를 사용하여 배포 동작을 사용자 지정할 수 있습니다.

  • drainPercent (1.0–100.0) — 배포 중에 동시에 드레인할 인스턴스의 비율입니다. 값이 높을수록 배포가 빨라지지만 사용 가능한 용량이 일시적으로 줄어들 수 있어요. 예를 들어 20.0 값은 한 번에 인스턴스의 20%를 드레인합니다. 지정하지 않으면 기본값은 25.0 입니다.
  • alarms (DaemonAlarmConfiguration) — 배포 중에 모니터링할 CloudWatch 알람입니다. Amazon ECS는 배포 중에 지정된 알람을 평가하고, 어떤 알람이라도 ALARM 상태에 들어가면 자동으로 롤백합니다. Amazon ECS는 배포 시작 시 이미 ALARM 상태인 알람은 무시합니다.
  • bakeTimeInMinutes (0–1440) — Amazon ECS가 모든 인스턴스를 새 데몬 개정으로 업데이트한 후 배포를 완료하기 전에 기다리는 분(minute) 수입니다. 이 기간 동안 Amazon ECS는 CloudWatch 알람을 모니터링하고, 알람이 트리거되면 배포를 자동으로 롤백합니다. 지정하지 않으면 기본값은 0 입니다.

배포 구성이 포함된 예시:

aws ecs create-daemon \
    --cluster-arn arn:aws:ecs:us-east-1:123456789012:cluster/my-daemon-cluster \
    --daemon-name my-monitoring-daemon \
    --daemon-task-definition-arn arn:aws:ecs:us-east-1:123456789012:daemon-task-definition/my-daemon-task:1 \
    --capacity-provider-arns arn:aws:ecs:us-east-1:123456789012:capacity-provider/my-daemon-capacity-provider \
    --deployment-configuration '{"drainPercent":20.0,"bakeTimeInMinutes":5}'

배포 모니터링 (Monitoring deployments)

다음 명령을 사용하여 배포 진행 상황을 추적합니다:

aws ecs list-daemon-deployments \
    --daemon-arn arn:aws:ecs:us-east-1:123456789012:daemon/my-daemon-cluster/my-monitoring-daemon
aws ecs describe-daemon-deployments \
    --daemon-deployment-arns arn:aws:ecs:us-east-1:123456789012:daemon-deployment/my-daemon-cluster/abc123

describe-daemon-deployments 응답에는 배포 상태, 대상 데몬 개정, 그리고 대상 데몬을 실행하는 인스턴스 수를 나타내는 totalRunningInstanceCount 필드가 포함됩니다.

데몬 배포 시나리오 (Daemon deployment scenarios)

이 섹션에서는 Managed Daemons의 일반적인 배포 시나리오를 살펴봅니다.

  1. 빈 capacity provider에 데몬 배포
  2. 기존 인스턴스가 있는 capacity provider에 데몬 배포
  3. 기존 데몬에 capacity provider 추가
  4. 데몬을 새 개정으로 업데이트

빈 capacity provider에 데몬 배포 (Deploy a daemon on an empty capacity provider)

이 시나리오에서는 기존 인스턴스가 없는 capacity provider에 데몬을 배포합니다. 애플리케이션 태스크를 예약하면 인스턴스가 실행됩니다.

사전 요구 사항: 클러스터와 실행 중인 인스턴스가 없는 Amazon ECS Managed Instances capacity provider.

  1. 데몬 태스크 정의를 등록합니다.
  2. 데몬을 생성합니다. 아직 인스턴스가 없어도 Amazon ECS는 생성을 즉시 완료합니다.
aws ecs create-daemon \
    --cluster-arn arn:aws:ecs:us-east-1:123456789012:cluster/my-daemon-cluster \
    --daemon-name my-monitoring-daemon \
    --daemon-task-definition-arn arn:aws:ecs:us-east-1:123456789012:daemon-task-definition/my-daemon-task:1 \
    --capacity-provider-arns arn:aws:ecs:us-east-1:123456789012:capacity-provider/my-daemon-capacity-provider
  1. 같은 capacity provider를 사용하는 서비스를 생성합니다. Amazon ECS가 서비스용 인스턴스를 프로비저닝하면 먼저 데몬 태스크를 시작한 다음 애플리케이션 태스크를 RUNNING 상태로 전환합니다.
aws ecs create-service \
    --cluster my-daemon-cluster \
    --service-name my-app-service \
    --task-definition my-app-task \
    --desired-count 2 \
    --capacity-provider-strategy capacityProvider=my-daemon-capacity-provider,weight=1
  1. describe-daemons 명령을 사용하거나 콘솔의 Daemons 탭을 확인하여 각 인스턴스에서 데몬 태스크가 실행 중인지 확인합니다.

참고: Amazon ECS가 인스턴스를 프로비저닝하고 데몬 태스크를 시작하는 동안 데몬 배포가 잠시 PENDING 상태로 유지될 수 있어요. 데몬 태스크 배치를 확인하기 전에 배포가 SUCCESSFUL에 도달할 때까지 기다리세요.

기존 인스턴스가 있는 capacity provider에 데몬 배포 (Deploy a daemon on a capacity provider with existing instances)

이 시나리오에서는 이미 실행 중인 인스턴스와 애플리케이션 태스크가 있는 capacity provider에 데몬을 배포합니다.

사전 요구 사항: 실행 중인 인스턴스가 있는 Amazon ECS Managed Instances capacity provider가 있는 클러스터.

  1. 데몬 태스크 정의를 등록합니다.
  2. 데몬을 생성합니다. Amazon ECS는 모든 기존 인스턴스에 데몬 태스크를 배치하도록 롤링 배포를 시작합니다.
aws ecs create-daemon \
    --cluster-arn arn:aws:ecs:us-east-1:123456789012:cluster/my-daemon-cluster \
    --daemon-name my-monitoring-daemon \
    --daemon-task-definition-arn arn:aws:ecs:us-east-1:123456789012:daemon-task-definition/my-daemon-task:1 \
    --capacity-provider-arns arn:aws:ecs:us-east-1:123456789012:capacity-provider/my-daemon-capacity-provider \
    --deployment-configuration '{"drainPercent":25.0,"bakeTimeInMinutes":3}'
  1. Amazon ECS는 (drainPercent에 따라) 기존 인스턴스 배치를 드레인하고, 데몬으로 대체 인스턴스를 프로비저닝하며, 애플리케이션 태스크를 교체합니다. 이 프로세스는 모든 인스턴스가 데몬을 실행할 때까지 반복됩니다.
  2. 배포 진행 상황을 모니터링합니다:
aws ecs list-daemon-deployments \
    --daemon-arn arn:aws:ecs:us-east-1:123456789012:daemon/my-daemon-cluster/my-monitoring-daemon

기존 데몬에 capacity provider 추가 (Add a capacity provider to an existing daemon)

이 시나리오에서는 기존 데몬에 두 번째 capacity provider를 추가합니다. 데몬은 새 capacity provider의 인스턴스에 자동으로 배포됩니다.

사전 요구 사항: 첫 번째 capacity provider에서 실행 중인 데몬과, 생성되어 클러스터에 연결된 두 번째 capacity provider.

  1. 두 capacity provider를 모두 포함하도록 데몬을 업데이트합니다:
aws ecs update-daemon \
    --daemon-arn arn:aws:ecs:us-east-1:123456789012:daemon/my-daemon-cluster/my-monitoring-daemon \
    --daemon-task-definition-arn arn:aws:ecs:us-east-1:123456789012:daemon-task-definition/my-daemon-task:1 \
    --capacity-provider-arns \
        arn:aws:ecs:us-east-1:123456789012:capacity-provider/my-daemon-capacity-provider \
        arn:aws:ecs:us-east-1:123456789012:capacity-provider/my-daemon-capacity-provider-2
  1. 배포를 모니터링하고 두 capacity provider의 인스턴스에서 데몬 태스크가 실행되는지 확인합니다.

데몬을 새 개정으로 업데이트 (Update a daemon to a new revision)

이 시나리오에서는 기존 데몬이 새 태스크 정의 개정을 사용하도록 업데이트합니다.

  1. 업데이트된 컨테이너 이미지 또는 구성으로 데몬 태스크 정의의 새 개정을 등록합니다.
  2. 데몬이 새 개정을 사용하도록 업데이트합니다:
aws ecs update-daemon \
    --daemon-arn arn:aws:ecs:us-east-1:123456789012:daemon/my-daemon-cluster/my-monitoring-daemon \
    --daemon-task-definition-arn arn:aws:ecs:us-east-1:123456789012:daemon-task-definition/my-daemon-task:2
  1. Amazon ECS가 롤링 배포를 수행합니다. 이전 개정을 실행하는 인스턴스를 드레인하고, 새 개정으로 대체 인스턴스를 프로비저닝하며, 애플리케이션 태스크를 자동으로 교체합니다. 서킷 브레이커가 실패를 감지하면 Amazon ECS는 이전 개정으로 롤백합니다.
  2. 배포를 모니터링하고 모든 인스턴스가 새 개정을 실행하는지 확인합니다:
aws ecs describe-daemon-deployments \
    --daemon-deployment-arns arn:aws:ecs:us-east-1:123456789012:daemon-deployment/my-daemon-cluster/deployment-id

더 알아보기 (Learn more)

  • Managed Daemons와 데몬 태스크 정의에 대한 자세한 내용은 AWS 개발자 가이드의 관련 문서를 참고하세요.