태스크 교체로 Amazon ECS 서비스 배포하기
태스크 교체로 Amazon ECS 서비스 배포하기
rolling update(ECS) 배포 유형을 사용하는 서비스에서 태스크를 교체하고, 배포 구성 파라미터와 컨테이너 이미지 해석 동작을 알아봐요.
출처: 문서
본문
rolling update(ECS) 배포 유형을 사용하는 서비스를 만들면 Amazon ECS 서비스 스케줄러가 현재 실행 중인 태스크를 새 태스크로 교체해요. rolling update 중에 Amazon ECS가 서비스에서 추가하거나 제거하는 태스크 수는 서비스 배포 구성에 의해 제어돼요. Amazon ECS는 태스크 수를 결정하기 위해 다음 파라미터를 사용해요.
- minimumHealthyPercent — rolling 배포 중이거나 컨테이너 인스턴스가 드레이닝 중일 때 서비스에 대해 실행·건강해야 하는 태스크 수의 하한을 서비스의 원하는 태스크 수의 백분율로 나타내요. 이 값은 반올림돼요. 예를 들어 minimum healthy percent가 50이고 원하는 태스크 수가 4이면 스케줄러는 두 개의 새 태스크를 시작하기 전에 두 개의 기존 태스크를 중지할 수 있어요. 마찬가지로 minimum healthy percent가 75%이고 원하는 태스크 수가 2이면 결과값도 2이므로 스케줄러는 태스크를 중지할 수 없어요.
- maximumPercent — rolling 배포 중이거나 컨테이너 인스턴스가 드레이닝 중일 때 서비스에 대해 실행 중이어야 하는 태스크 수의 상한을 서비스의 원하는 태스크 수의 백분율로 나타내요. 이 값은 내림돼요. 예를 들어 maximum percent가 200이고 원하는 태스크 수가 4이면 스케줄러는 4개의 기존 태스크를 중지하기 전에 4개의 새 태스크를 시작할 수 있어요. 마찬가지로 maximum percent가 125이고 원하는 태스크 수가 3이면 결과값도 3이므로 스케줄러는 태스크를 시작할 수 없어요.
rolling 배포 중에 태스크가 비정상이 되면 Amazon ECS는 서비스의 minimumHealthyPercent를 유지하고 가용성을 보호하기 위해 태스크를 교체해요. 비정상 태스크는 속한 동일한 서비스 리비전을 사용해 교체돼요. 이는 소스 리비전의 비정상 태스크 교체가 대상 리비전의 태스크 실패와 독립적임을 보장해요. maximumPercent 설정이 허용하면 스케줄러는 비정상 태스크를 중지하기 전에 대체 태스크를 시작해요. maximumPercent 파라미터가 스케줄러가 먼저 대체 태스크를 시작하는 것을 제한하면, 스케줄러는 대체 태스크를 시작하기 전에 용량을 확보하기 위해 한 번에 하나의 비정상 태스크를 중지해요.
중요 — minimum healthy percent나 maximum percent를 설정할 때 배포가 시작되면 스케줄러가 최소한 하나의 태스크를 중지하거나 시작할 수 있도록 해야 해요. 유효하지 않은 배포 구성으로 서비스 배포가 중단되면 서비스 이벤트 메시지가 전송돼요. 자세한 내용은 service (service-name) was unable to stop or start tasks during a deployment because of the service deployment configuration. Update the minimumHealthyPercent or maximumPercent value and try again. 참고.
rolling 배포에는 서비스 배포 실패를 신속하게 식별하는 방법을 제공하는 2가지 방법이 있어요:
- Amazon ECS 배포 회로 차단기가 실패를 감지하는 방법
- CloudWatch 알람이 Amazon ECS 배포 실패를 감지하는 방법
이 방법들은 따로 또는 함께 사용할 수 있어요. 두 방법을 모두 사용할 때는 두 실패 방법 중 하나에 대한 실패 기준이 충족되는 즉시 배포가 실패로 설정돼요. 어떤 방법을 사용할지 결정하는 데 다음 지침을 사용해요:
- 회로 차단기 (Circuit breaker) - 태스크가 시작할 수 없을 때 배포를 중지하려면 이 방법을 사용해요.
- CloudWatch 알람 - 애플리케이션 지표를 기반으로 배포를 중지하려면 이 방법을 사용해요.
두 방법 모두 이전 서비스 리비전으로의 롤백을 지원해요. 예를 들어 정의한 백분율의 태스크가 대상 서비스 리비전에서 건강할 때 Amazon ECS가 rolling 배포를 완료하도록 조기 성공 기준을 구성할 수 있어요. 자세한 내용은 Complete Amazon ECS rolling deployments early with early success criteria 참고.
컨테이너 이미지 해석 (Container image resolution)
기본적으로 Amazon ECS는 태스크 정의에 지정된 컨테이너 이미지 태그를 컨테이너 이미지 다이제스트로 해석해요. 단일 태스크를 실행·유지하는 서비스를 만들면 그 태스크가 태스크의 컨테이너에 대한 이미지 다이제스트를 설정하는 데 사용돼요. 여러 태스크를 실행·유지하는 서비스를 만들면 배포 중 서비스 스케줄러가 시작한 첫 번째 태스크가 태스크의 컨테이너에 대한 이미지 다이제스트를 설정하는 데 사용돼요.
컨테이너 이미지 다이제스트를 설정하려는 시도가 3회 이상 실패하면 배포는 이미지 다이제스트 해석 없이 계속돼요. 배포 회로 차단기가 활성화되어 있으면 배포는 추가로 실패로 표시되고 롤백돼요.
컨테이너 이미지 다이제스트가 설정된 후 Amazon ECS는 다이제스트를 사용해 다른 원하는 태스크를 시작하고 향후 서비스 업데이트에도 사용해요. 이로 인해 서비스의 모든 태스크가 항상 동일한 컨테이너 이미지를 실행하여 소프트웨어의 버전 일관성을 보장해요. 이 동작은 컨테이너 정의의 versionConsistency 파라미터를 사용해 태스크의 각 컨테이너에 대해 구성할 수 있어요. 자세한 내용은 versionConsistency 참고.
참고 —
- 1.31.0 미만의 Amazon ECS Agent 버전은 이미지 다이제스트 해석을 지원하지 않아요. 1.31.0~1.69.0 에이전트 버전은 Amazon ECR 리포지토리에 푸시된 이미지에 대해서만 이미지 다이제스트 해석을 지원해요. 1.70.0 이상 에이전트 버전은 모든 이미지에 대한 이미지 다이제스트 해석을 지원해요.
- 이미지 다이제스트 해석을 위한 최소 Fargate Linux 플랫폼 버전은 1.3.0이에요. 이미지 다이제스트 해석을 위한 최소 Fargate Windows 플랫폼 버전은 1.0.0이에요.
- Amazon ECS는 Amazon GuardDuty 보안 에이전트나 Service Connect 프록시 같은 Amazon ECS가 관리하는 사이드카 컨테이너의 다이제스트를 캡처하지 않아요.
- 여러 태스크가 있는 서비스에서 컨테이너 이미지 해석과 관련된 잠재적 지연을 줄이려면 EC2 컨테이너 인스턴스에서 Amazon ECS agent 버전 1.83.0 이상을 실행하세요. 잠재적 지연을 피하려면 태스크 정의에 컨테이너 이미지 다이제스트를 지정하세요.
- 원하는 태스크 수가 0인 서비스를 만들면 원하는 태스크 수가 0보다 큰 서비스의 또 다른 배포를 트리거할 때까지 Amazon ECS는 컨테이너 다이제스트를 설정할 수 없어요.
- 업데이트된 이미지 다이제스트를 설정하려면 새 배포를 강제할 수 있어요. 업데이트된 다이제스트는 새 태스크를 시작하는 데 사용되며 이미 실행 중인 태스크에는 영향을 주지 않아요.