Application Load Balancer 액세스 로그 또는 Amazon CloudWatch 지표에서 수신한 ELB_504 오류를 해결하고 싶습니다. 또는 Application Load Balancer를 통해 서비스에 연결할 때 HTTP 504 오류가 발생합니다.
간략한 설명
게이트웨이 또는 프록시 제한 시간이 초과되면 HTTP 504 오류가 발생합니다. Application Load Balancer HTTP 504 오류는 다음과 같은 이유로 발생할 수 있습니다.
- 10초의 연결 제한 시간이 만료되기 전 로드 밸런서가 대상에 대한 연결을 설정하지 못했습니다.
- 로드 밸런서가 대상에 연결될 때 SSL 핸드셰이크 제한 시간 초과가 발생했습니다.
참고: 10초의 SSL 핸드셰이크 제한 시간은 조정할 수 없습니다.
- 로드 밸런서가 대상에 연결을 설정했지만 유휴 제한 시간이 경과하기 전에 대상이 응답하지 않았습니다.
- 대상이 엔터티 본문보다 큰 Content-Length 헤더 값을 반환했으며 로드 밸런서의 제한 시간이 초과되었습니다.
- 많은 트래픽으로 인해 대상이 더 느리게 반응했습니다.
- 대상이 AWS Lambda 함수이고 연결 제한 시간이 만료되기 전에 서비스가 응답하지 않았습니다.
해결 방법
로드 밸런서가 등록된 대상의 트래픽을 허용하는지 확인
Sum 통계와 함께 TargetConnectionErrorCount CloudWatch 지표를 확인합니다. 0이 아닌 양수 데이터 포인트가 표시되면 로드 밸런서와 대상 간에 연결 문제가 있는 것입니다.
이러한 문제를 해결하려면 로드 밸런서 및 백엔드 대상과 연결된 네트워크 보안 그룹을 확인하십시오. 네트워크 보안 그룹이 트래픽 포트와 상태 확인 포트에서 양방향으로 로드 밸런서와 대상 간의 트래픽을 허용해야 합니다. 서브넷의 네트워크 액세스 제어 목록(네트워크 ACL)이 대상에서 임시 포트(1024-65535)의 로드 밸런서 노드로 향하는 트래픽을 허용하는지 확인합니다.
참고: Application Load Balancer의 특정 보안 그룹 규칙을 사용하는 것이 좋습니다.
로드 밸런서 지표 확인
대상이 비정상으로 표시된 이유를 확인하려면 Application Load Balancer의 CloudWatch 지표를 확인하십시오. HTTPCode_ELB_504_Count 지표 데이터가 없으면 로드 밸런서가 아닌 애플리케이션 서버에서 504 오류를 반환한 것입니다. 이 구성으로 인해 504 오류가 발생할 수 있으므로 TargetResponseTime 지표의 최대값이 제한 시간 값을 자주 초과하는지 확인하십시오.
또한 리소스 유형에 따라 대상에서 다음 CPU 및 메모리 사용률 지표를 확인하십시오.
- Amazon Elastic Compute Cloud(Amazon EC2)의 경우 CPUUtilization 지표를 확인합니다. EC2 인스턴스는 기본적으로 CloudWatch에 메모리 지표를 전송하지 않지만, 사용자가 사용자 지정 메모리 지표를 전송할 수 있습니다.
- Amazon ECS 작업의 경우 CPUUtilization 및 MemoryUtilization 지표를 확인합니다. 둘 중 하나의 값이 1(100%)이면 작업이 응답하지 않게 됩니다.
- Lambda 함수의 경우 Duration 지표를 확인합니다. Duration이 로드 밸런서의 유휴 제한 시간 값보다 오래 지속되면 게이트웨이 제한 시간 오류가 발생합니다.
리소스 가용성 향상
대상의 CPU 사용량이 많으면 응답하지 않을 수 있습니다.
이 문제를 해결하려면 대상에 대해 다음 리소스를 늘리십시오.
HTTP 요청에 응답할 때 애플리케이션의 코드를 보다 효율적으로 업데이트하십시오. 애플리케이션의 응답은 구성된 유휴 제한 시간보다 오래 걸리지 않아야 합니다. 기본적으로 Application Load Balancer의 유휴 제한 시간은 60초입니다. 필요한 경우 로드 밸런서의 유휴 제한 시간을 늘리십시오.
참고: 대상에서 완료해야 할 컴퓨팅 작업 수가 많은 경우에만 유휴 제한 시간 값을 늘리는 것이 좋습니다. 그렇지 않으면 대신, 대상의 리소스 사용량을 최적화하는 것이 좋습니다.
수요에 따라 대상의 규모 조정
수요에 따라 대상의 규모를 조정하려면 구성에 대해 다음 작업을 수행하십시오.
참고: Lambda 함수를 호출하면 함수가 자동으로 규모 조정됩니다.
외부 종속성 확인
애플리케이션이 마이크로서비스 아키텍처를 사용하는 경우 데이터베이스 또는 API와 같은 외부 종속성이 대상 응답 시간에 영향을 줍니다.
다음과 같은 일반적인 외부 종속성에 문제가 있는지 확인하십시오.
- Amazon Relational Database Service(Amazon RDS) 데이터베이스의 경우 ReadLatency, WriteLatency 및 DatabaseConnections CloudWatch 지표를 확인합니다.
- Amazon Simple Queue Service(Amazon SQS) 대기열의 경우 ApproximateAgeOfOldestMessage 및 NumberOfMessagesDelayed CloudWatch 지표를 확인합니다.
- Amazon Simple Storage Service(Amazon S3) 버킷의 경우 FirstByteLatency, TotalRequestLatency, 4xxErrors 및 5xxErrors CloudWatch 지표를 확인합니다.
- Amazon Cognito 인증 서비스의 경우 TokenRefreshSuccesses CloudWatch 지표를 확인하고 ThrottlingException 오류가 있는지 확인합니다.
성능 병목 현상의 원인을 파악하려면 다음 작업을 수행하십시오.
Compute Optimizer를 사용하여 향후 문제 방지
AWS Compute Optimizer를 사용하여 Amazon EC2, Amazon ECS 및 Lambda 리소스의 사용량에 대한 인사이트를 얻을 수 있습니다. Compute Optimizer는 리소스 사용량이 너무 많을 때 이를 감지하여 시간 초과를 방지하도록 도와줍니다. 또한 워크로드를 최적화하는 방법에 대한 모범 사례도 제공합니다.
관련 정보
HTTP 504: Gateway timeout
Elastic Load Balancing에서 Application Load Balancer의 높은 지연 시간 문제를 해결하려면 어떻게 해야 합니까?
Application Load Balancer의 인증 문제를 해결하려면 어떻게 해야 합니까?
Classic Load Balancer를 사용할 때 반환되는 504 오류를 해결하려면 어떻게 해야 합니까?