Amazon ECS 제한 문제 처리 - Amazon Elastic Container Service

Amazon ECS 제한 문제 처리

제한 오류는 크게 동기 제한 및 비동기 제한이라는 두 가지 주요 범주로 분류됩니다.

동기 제한

동기 제한이 수행되면 Amazon ECS에서 즉시 오류 응답을 수신합니다. 이 범주의 제한은 일반적으로 작업을 실행하거나 서비스를 생성하는 동안 Amazon ECS API를 직접 호출할 때 발생합니다. 관련된 제한 및 관련 제한 한도에 대한 자세한 내용은 Amazon ECS API에 대한 요청 제한을 참조하세요.

애플리케이션에서 API 요청을 시작하면(예를 들어, AWS CLI 또는 AWS SDK를 사용함) API 제한을 해결할 수 있습니다. 오류를 처리하도록 애플리케이션을 설계하거나 API 직접 호출에 대한 재시도 로직이 포함된 지수 백오프 및 지터 전략을 구현하여 이를 수행할 수 있습니다. 자세한 내용은 시간 제한, 재시도 및 지터를 사용한 백오프를 참조하세요.

AWS SDK를 사용하는 경우 자동 재시도 로직이 이미 기본 제공되며, 구성 가능합니다.

Amazon ECS의 비동기 제한

비동기 제한은 Amazon ECS 또는 AWS CloudFormation에서 사용자를 대신하여 API를 직접 호출해 리소스를 프로비저닝하는 비동기 워크플로로 인해 발생합니다. Amazon ECS가 사용자를 대신하여 어떤 AWS API를 직접 호출하는지 파악하는 것이 중요합니다. 예를 들어 awsvpc 네트워크 모드를 사용하는 작업에 대해 CreateNetworkInterface API가 간접 호출되고 로드 밸런서에 등록된 작업의 상태 확인을 수행할 때 DescribeTargetHealth API가 간접 호출됩니다.

워크로드가 상당한 규모에 도달하면 이러한 API 작업이 제한될 수 있습니다. 즉, Amazon ECS에서 시행하는 제한 또는 호출되는 AWS 서비스를 위반할 수준으로 제한이 발생할 수 있습니다. 예를 들어, 각각 awsvpc 네트워크 모드를 사용하는 수백 개의 작업을 동시에 보유하는 수백 개의 서비스를 배포하는 경우 Amazon ECS는 Amazon EC2 API 작업(예: CreateNetworkInterface) 및 Elastic Load Balancing API 작업(예: RegisterTarget 또는 DescribeTargetHealth)을 간접 호출하여 각각 탄력적 네트워크 인터페이스와 로드 밸런서를 등록합니다. 이러한 API 직접 호출은 API 제한을 초과할 수 있으며 이 경우 제한 오류가 발생할 수 있습니다. 다음은 서비스 이벤트 메시지에 포함된 Elastic Load Balancing 제한 오류의 예제입니다.

{ "userIdentity":{ "arn":"arn:aws:sts::111122223333:assumed-role/AWSServiceRoleForECS/ecs-service-scheduler", "eventTime":"2022-03-21T08:11:24Z", "eventSource":"elasticloadbalancing.amazonaws.com", "eventName":" DescribeTargetHealth ", "awsRegion":"us-east-1", "sourceIPAddress":"ecs.amazonaws.com", "userAgent":"ecs.amazonaws.com", "errorCode":"ThrottlingException", "errorMessage":"Rate exceeded", "eventID":"0aeb38fc-229b-4912-8b0d-2e8315193e9c" } }

이러한 API 직접 호출이 계정의 다른 API 트래픽과 제한을 공유하는 경우 서비스 이벤트로 생성되더라도 모니터링이 어려울 수 있습니다.

제한 모니터링

제한되는 API 요청과 이러한 요청의 발행자를 식별하는 것이 중요합니다. 제한을 모니터링하고 CloudWatch, Amazon Athena, Amazon EventBridge와 통합되는 AWS CloudTrail을 사용할 수 있습니다. CloudWatch Logs로 특정 이벤트를 전송하도록 CloudTrail을 구성할 수 있습니다. CloudWatch Logs 로그 인사이트는 이벤트를 구문 분석하고 분석합니다. 이를 통해 직접 호출을 수행한 사용자 또는 IAM 역할, 수행된 API 직접 호출 수와 같은 제한 이벤트의 세부 정보를 식별합니다. 자세한 내용은 Monitoring CloudTrail log files with CloudWatch Logs를 참조하세요.

CloudWatch Logs Insights에 대한 자세한 내용 및 로그 파일을 쿼리하는 방법에 대한 지침은 Analyzing log data with CloudWatch Logs Insights를 참조하세요.

Amazon Athena를 사용하면 표준 SQL을 사용하여 쿼리를 생성하고 데이터를 분석할 수 있습니다. 예를 들어, Athena 테이블을 생성하여 CloudTrail 이벤트를 구문 분석할 수 있습니다. 자세한 내용은 Using the CloudTrail console to create an Athena table for CloudTrail logs를 참조하세요.

Athena 테이블을 생성한 후 다음과 같은 간단한 SQL 쿼리를 사용하여 ThrottlingException 오류를 조사할 수 있습니다.

select eventname, errorcode,eventsource,awsregion, useragent,COUNT(*) count FROM cloudtrail-table-name where errorcode = 'ThrottlingException' AND eventtime between '2022-01-14T03:00:08Z' and '2022-01-23T07:15:08Z' group by errorcode, awsregion, eventsource, username, eventname order by count desc;

또한, Amazon ECS는 Amazon EventBridge로 이벤트 알림을 내보냅니다. 리소스 상태 변경 이벤트 및 서비스 작업 이벤트가 있습니다. 여기에는 ECS_OPERATION_THROTTLEDSERVICE_DISCOVERY_OPERATION_THROTTLED와 같은 API 제한 이벤트가 포함됩니다. 자세한 내용은 Amazon ECS 서비스 작업 이벤트 단원을 참조하십시오.

이에 응답하여 AWS Lambda와 같은 서비스에서 작업을 수행하기 위해 이러한 이벤트를 사용할 수 있습니다. 자세한 내용은 Amazon ECS 이벤트 처리 단원을 참조하십시오.

독립 실행형 작업을 실행하는 경우 일부 API 작업(예: RunTask)은 비동기식이며, 재시도 작업은 자동으로 수행되지 않습니다. 이 경우 EventBridge 통합에서 AWS Step Functions와 같은 서비스를 사용하여 제한되거나 실패한 작업을 재시도할 수 있습니다. 자세한 내용은 Manage a container task (Amazon ECS, Amazon SNS)를 참조하세요.

CloudWatch를 사용하여 제한 모니터링

CloudWatch는 AWS 리소스별 아래 Usage 네임스페이스에서 API 사용 모니터링 기능을 제공합니다. 이러한 지표는 API 유형과 지표 이름 CallCount로로 기록됩니다. 이러한 지표가 특정 임계값에 도달할 때마다 시작할 경보를 생성할 수 있습니다. 자세한 내용은 서비스 할당량 시각화 및 경보 설정을 참조하세요.

또한 CloudWatch는 이상 탐지 기능을 제공합니다. 이 기능은 기계 학습을 사용하여 활성화한 지표의 특정 동작을 기반으로 기준을 분석하고 설정합니다. 비정상적인 API 활동이 있는 경우 이 기능을 CloudWatch 경보와 함께 사용할 수 있습니다. 자세한 내용은 CloudWatch 이상 탐지 사용을 참조하세요.

제한 오류를 사전에 모니터링하여 관련 제한 한도를 높이고 고유한 애플리케이션 요구 사항에 대한 지침을 받을 수 있도록 AWS Support에 문의할 수 있습니다.