내용으로 건너뛰기

배포 중에 Amazon ECS 작업에 대한 정상 종료 및 연결 드레이닝을 설정하려면 어떻게 해야 합니까?

3분 분량
0

Amazon Elastic Container Service(Amazon ECS) 클러스터에 새 서비스를 배포하면 작업이 잘못 배포되거나 종료됩니다.

해결 방법

리소스 용량이 충분한 컨테이너를 사용하고 있는지 확인

새로운 배포에서 로드 밸런서 상태 확인에 지속적으로 실패하는 경우, CpuUtilized, CpuReservedMemoryUtilized Amazon ECS Container Insights 지표를 확인하십시오. Application Load Balancer를 사용하는 경우 TargetResponseTime도 확인하십시오.

또한 애플리케이션 스타트업 시간보다 긴 값으로 HealthCheckGracePeriodSeconds 속성을 구성하십시오. 상태 확인 응답이 지연되면 장애가 발생하고 Amazon ECS가 작업을 다시 반복하도록 할지 확인하는 프롬프트가 표시됩니다.

컨테이너 상태 및 종료 코드 확인

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

예기치 않게 종료되는 작업의 경우 다음 describe-tasks 명령을 실행하여 컨테이너 종료 코드를 확인하십시오.

aws ecs describe-tasks  --cluster ECS_CLUSTER  --tasks TASK_ARN -- region REGION

참고: ECS_CLUSTER를 클러스터 이름으로 바꾸고, TASK_ARN을 작업 ARN으로 바꾸고, REGION을 AWS 리전으로 바꾸십시오.

위 명령의 출력이 0이면 작업이 성공적으로 시작된 것입니다. 출력이 1이면 애플리케이션 오류가 발생한 것이므로 애플리케이션 로그를 확인해야 합니다. 출력이 137이면 컨테이너가 일반적으로 메모리 부족 문제로 인해 발생하는 SIGKILL 신호를 수신한 것입니다. 이 문제를 해결하려면 Amazon ECS에서 OutOfMemory 오류를 해결하려면 어떻게 해야 합니까?Amazon ECS 작업이 중지되는 이유는 무엇입니까?를 참조하십시오.

작업 정의 구성 검토

모든 작업 정의 구성이 유효한지 확인하십시오. 특히 작업 정의를 수정하거나 새 작업 정의를 만든 후에는 반드시 확인해야 합니다. 작업 정의 구성을 확인하려면 독립형 작업을 실행하십시오.

로드 밸런서 설정 구성

로드 밸런서에서 deregistration_delay.timeout_seconds를 요구 사항에 맞게 구성하십시오. 오래 수행해야 하는 요청의 경우 더 높은 값을 사용하십시오. Amazon Elastic Compute Cloud(Amazon EC2) 스팟 인스턴스의 경우 이 값은 120초 미만이어야 합니다.

deregistration_delay.timeout_seconds를 수정하려면 다음 modify-target-group-attributes 명령을 실행하십시오.

aws elbv2 modify-target-group-attributes --target-group-arn
EXAMPLE_ARN --attributes Key=deregistration_delay.timeout_seconds,Value=120

참고: EXAMPLE_ARN을 로드 밸런서 ARN으로 바꾸고 120을 등록 취소 지연 제한 시간(초)으로 바꾸십시오.

또한 로드 밸런서의 상태 확인 설정을 최적화하십시오. 설정이 애플리케이션에 대해 너무 엄격하면 로드 밸런서가 대상을 비정상으로 빈번하게 표시할 수 있습니다.

애플리케이션의 정상 종료 시간 구성

기본적으로 ECS_CONTAINER_STOP_TIMEOUT은 30초로 설정됩니다. 새로운 Amazon ECS 배포에서 이전 작업의 드레이닝 단계 중에 애플리케이션에 액세스하면 5xx 오류가 발생할 수 있습니다. 애플리케이션에 액세스할 때 문제가 발생하면 애플리케이션의 정상 종료 요구 사항에 따라 ECS_CONTAINER_STOP_TIMEOUT의 값을 증가하십시오. 업데이트된 값은 테스트 환경에서 테스트한 후 배포하는 것이 좋습니다.

값을 업데이트하려면 다음 예제와 비슷한 코드를 작업 정의에 추가하십시오.

{
  "containerDefinitions": [
    {
      "name": "your-container",
      "image": "your-image",
      "stopTimeout": 120
    }
  ]
}

참고: 120ECS_CONTAINER_STOP_TIMEOUT 값으로 바꾸십시오.

정상 종료를 구성하려면 애플리케이션에 SIGTERM 핸들러를 추가하십시오. AWS Fargate 스팟의 경우 SIGTERM 핸들러 중에 DeregisterTargets를 호출하도록 구성을 설정합니다. 이렇게 하면 Amazon ECS가 로드 밸런서의 대상 그룹에서 FARGATE_SPOT 작업의 등록을 취소할 수 있습니다.

관련 정보

Amazon ECS의 로드 밸런서 연결 드레이닝 파라미터 최적화

AWS 공식업데이트됨 일 년 전