CloudWatch 경보가 Amazon ECS 배포 장애를 감지하는 방법 - Amazon Elastic Container Service

CloudWatch 경보가 Amazon ECS 배포 장애를 감지하는 방법

지정된 CloudWatch 경보가 ALARM 상태로 전환된 것을 탐지하면 배포를 실패로 설정하도록 Amazon ECS를 구성할 수 있습니다.

실패한 배포를 마지막으로 완료된 배포로 롤백하도록 구성을 설정할 수 있습니다.

다음 create-service AWS CLI 예제에서는 배포 경보에 롤백 옵션이 사용된 경우 Linux 서비스를 생성하는 방법을 보여줍니다.

aws ecs create-service \ --service-name MyService \ --deployment-controller type=ECS \ --desired-count 3 \ --deployment-configuration "alarms={alarmNames=[alarm1Name,alarm2Name],enable=true,rollback=true}" \ --task-definition sample-fargate:1 \ --launch-type FARGATE \ --platform-family LINUX \ --platform-version 1.4.0 \ --network-configuration "awsvpcConfiguration={subnets=[subnet-12344321],securityGroups=[sg-12344321],assignPublicIp=ENABLED}"

서비스에서 Amazon CloudWatch 경보 메서드를 사용하는 경우 다음을 고려하세요.

  • 베이크 소요 시간은 새 서비스 버전이 스케일 아웃되고 이전 서비스 버전이 스케일 인된 후의 기간으로, 이 기간 동안 Amazon ECS는 배포와 관련된 경보를 계속 모니터링합니다. Amazon ECS는 배포와 관련된 경보 구성을 기반으로 이 기간을 계산합니다.

  • 이제 deploymentConfiguration 요청 파라미터에 alarms 데이터 유형이 포함됩니다. 경보 이름, 메서드 사용 여부 및 경보가 배포 실패를 나타내는 경우 롤백을 시작할지 여부를 지정할 수 있습니다. 자세한 내용은 Amazon Elastic Container Service API 참조의 CreateService를 참조하세요.

  • DescribeServices 응답은 배포 상태인 rolloutStaterolloutStateReason에 대한 인사이트를 제공합니다. 새 배포가 시작되면 롤아웃 상태는 IN_PROGRESS 상태에서 시작됩니다. 서비스가 안정 상태에 도달하고 베이크 소요 시간이 완료되면 롤아웃 상태가 COMPLETED로 전환됩니다. 서비스가 안정 상태에 도달하지 못하고 경보가 ALARM 상태로 전환되면 배포가 FAILED 상태로 전환됩니다. FAILED 상태의 배포는 새로운 태스크를 시작하지 않습니다.

  • Amazon ECS는 시작되고 완료된 배포에 대해 서비스 배포 상태 변경 이벤트를 전송합니다. 또한 Amazon ECS는 해당 경보를 사용하는 배포가 실패할 경우 이벤트를 전송합니다. 이러한 이벤트는 배포가 실패한 이유 또는 롤백으로 인해 배포가 시작된 경우에 대한 세부 정보를 제공합니다. 자세한 내용은 Amazon ECS 서비스 배포 상태 변경 이벤트 단원을 참조하십시오.

  • 이전 배포가 실패하고 롤백이 켜졌기 때문에 새 배포가 시작된 경우 서비스 배포 상태 변경 이벤트의 reason 필드에 롤백 때문에 배포가 시작되었음이 표시됩니다.

  • 배포 회로 차단기와 Amazon CloudWatch 경보를 사용하여 실패를 탐지하는 경우 메서드 중 하나에 대한 기준이 충족되는 즉시 메서드 중 하나에서 배포 실패를 시작할 수 있습니다. 롤백은 배포 실패를 시작한 메서드에 대해 롤백 옵션을 사용할 때 발생합니다.

  • Amazon CloudWatch 경보는 롤링 업데이트(ECS) 배포 컨트롤러를 사용하는 Amazon ECS 서비스에만 지원됩니다.

  • Amazon ECS 콘솔 또는 AWS CLI를 사용하여 이 옵션을 구성할 수 있습니다. 자세한 내용은 AWS Command Line Interface 참조에서 정의된 파라미터를 사용하여 서비스 생성create-service를 참조하세요.

  • 배포 상태가 장시간 동안 IN_PROGRESS로 유지되는 것을 알 수 있습니다. 그 이유는 활성 배포를 삭제할 때까지 Amazon ECS에서 상태가 변경되지 않기 때문이며 베이크 소요 시간이 지나야 이러한 상황이 발생하지 않습니다. 경보 구성에 따라 새 기본 작업 세트는 스케일 업되고 이전 배포는 스케일 다운되더라도 경보를 사용하지 않을 때보다 배포가 몇 분 더 오래 걸리는 것처럼 보일 수 있습니다. CloudFormation 제한 시간을 사용하는 경우 제한 시간을 늘리는 것이 좋습니다. 자세한 내용은 AWS CloudFormation 사용 설명서의 템플릿에 대기 조건 생성을 참조하세요.

  • Amazon ECS는 DescribeAlarms를 호출하여 경보를 폴링합니다. DescribeAlarms 호출 수는 계정과 연결된 CloudWatch 서비스 할당량에 포함됩니다. DescribeAlarms를 호출하는 다른 AWS 서비스가 있는 경우 Amazon ECS에서 경보를 폴링하는 데 영향을 받을 수 있습니다. 예를 들어 다른 서비스가 할당량에 도달할 만큼 충분히 DescribeAlarms를 직접 호출하면 해당 서비스는 제한이 발생하고 Amazon ECS 역시 제한이 발생하여 경보를 폴링할 수 없습니다. 제한 기간에 경보가 생성되면 Amazon ECS에서 경보를 놓치고 롤백이 발생하지 않을 수 있습니다. 배포에 다른 영향을 미치지 않습니다. CloudWatch 서비스 할당량에 대한 자세한 내용은 CloudWatch 사용 설명서의 CloudWatch 서비스 할당량을 참조하세요.

  • 배포 시작 시 경보가 ALARM 상태인 경우 Amazon ECS는 해당 배포 기간 동안 경보를 모니터링하지 않습니다(Amazon ECS는 경보 구성을 무시함). 이 동작은 초기 배포 실패를 수정하기 위해 새 배포를 시작하려는 경우를 다룹니다.

권장되는 경보

다음 경보 지표를 사용하는 것이 좋습니다.

  • Application Load Balancer를 사용하는 경우 HTTPCode_ELB_5XX_CountHTTPCode_ELB_4XX_Count Application Load Balancer 지표를 사용합니다. 이러한 지표는 HTTP 급증을 확인합니다. Application Load Balancer 지표에 대한 자세한 내용은 Application Load Balancer 사용 설명서Application Load Balancer의 CloudWatch 지표를 참조하세요.

  • 기존 애플리케이션이 있는 경우 CPUUtilizationMemoryUtilization 지표를 사용합니다. 이러한 지표는 클러스터 또는 서비스가 사용하는 CPU 및 메모리의 비율을 확인합니다. 자세한 내용은 고려 사항 단원을 참조하십시오.

  • 작업에서 Amazon Simple Queue Service 대기열을 사용하는 경우 ApproximateNumberOfMessagesNotVisible Amazon SQS 지표를 사용합니다. 이 지표는 지연되어 즉시 읽을 수 없는 대기열의 메시지 수를 확인합니다. Amazon SQS 지표에 대한 자세한 내용은 Amazon Simple Queue Service 개발자 안내서Amazon SQS에 사용 가능한 CloudWatch 지표를 참조하세요.