데몬 배포
데몬 배포 (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의 일반적인 배포 시나리오를 살펴봅니다.
- 빈 capacity provider에 데몬 배포
- 기존 인스턴스가 있는 capacity provider에 데몬 배포
- 기존 데몬에 capacity provider 추가
- 데몬을 새 개정으로 업데이트
빈 capacity provider에 데몬 배포 (Deploy a daemon on an empty capacity provider)
이 시나리오에서는 기존 인스턴스가 없는 capacity provider에 데몬을 배포합니다. 애플리케이션 태스크를 예약하면 인스턴스가 실행됩니다.
사전 요구 사항: 클러스터와 실행 중인 인스턴스가 없는 Amazon ECS Managed Instances capacity provider.
- 데몬 태스크 정의를 등록합니다.
- 데몬을 생성합니다. 아직 인스턴스가 없어도 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
- 같은 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
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가 있는 클러스터.
- 데몬 태스크 정의를 등록합니다.
- 데몬을 생성합니다. 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}'
- Amazon ECS는 (drainPercent에 따라) 기존 인스턴스 배치를 드레인하고, 데몬으로 대체 인스턴스를 프로비저닝하며, 애플리케이션 태스크를 교체합니다. 이 프로세스는 모든 인스턴스가 데몬을 실행할 때까지 반복됩니다.
- 배포 진행 상황을 모니터링합니다:
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.
- 두 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
- 배포를 모니터링하고 두 capacity provider의 인스턴스에서 데몬 태스크가 실행되는지 확인합니다.
데몬을 새 개정으로 업데이트 (Update a daemon to a new revision)
이 시나리오에서는 기존 데몬이 새 태스크 정의 개정을 사용하도록 업데이트합니다.
- 업데이트된 컨테이너 이미지 또는 구성으로 데몬 태스크 정의의 새 개정을 등록합니다.
- 데몬이 새 개정을 사용하도록 업데이트합니다:
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
- Amazon ECS가 롤링 배포를 수행합니다. 이전 개정을 실행하는 인스턴스를 드레인하고, 새 개정으로 대체 인스턴스를 프로비저닝하며, 애플리케이션 태스크를 자동으로 교체합니다. 서킷 브레이커가 실패를 감지하면 Amazon ECS는 이전 개정으로 롤백합니다.
- 배포를 모니터링하고 모든 인스턴스가 새 개정을 실행하는지 확인합니다:
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 개발자 가이드의 관련 문서를 참고하세요.