AWS

AWS EC2 502 Bad gateway 및 API Timeout 에 관련된 문제 해결

myungsworld 2021. 11. 29. 10:39

현재 필자가 운영하고 있는 거의 모든 서비스는 AWS를 통해 구축되었다.
어플리케이션의 특성상 대용량 파일을 처리할 일이 많다. ( 대부분 비디오 파일 ) 

초기에 시스템을 구축할때 영상의 용량이 길어봤자 30초 정도로 테스트 해보고 문제없다고 판단해 시스템을 모두 구축한뒤 배포하고 나서 유저가 사용할때 쯤 아니나 다를까 큰 문제가 터졌다.

사용하고 있었던 서비스는 Elastic Beanstalk 환경으로 배포한 AWS의 EC2 , Load Balancer , Nginx 이었다.
timeout에 대한 이해와 nginx ec2 등 모든 시스템에 대한 이해도가 거의 없었기 때문에 이걸 내가 해결 할수 있을지도 의문이었고
유저는 현재 사용하고 있는데 빨리 문제를 해결해야 하는 입장에서 정말 너무나 많은 스트레스를 받았던것 같다.

AWS 는 API 를 호출하고 대략 30~40초가 지난 후 response 를 주지 않으면 
timeout 에러가 난다. 필자의 BadGateway 는 이 timeout 이 원인이 었다.

502 BadGateway = Proxy 문제가 거의 대부분 ( 지배적임 )
아마 EC2를 사용하고 있다면 기본적인 Reverse Proxy 는 nginx 일것이다. 

 

첫번째 근본적인 문제는 내가 테스트 서버 환경으로 사용하던 컴퓨터 성능을 리얼서버에 그대로 사용했다는 거다.
1기가 짜리 메모리를 쓰니까 서버가 터져버릴수 밖에 없었다.
EC2 Storage 부분에 메모리를 추가해줬다.

 

​EC2 Windows 인스턴스의 EBS 루트 볼륨 확장

Internet Explorer에 대한 AWS 지원이 07/31/2022에 종료됩니다. 지원되는 브라우저는 Chrome, Firefox, Edge 및 Safari입니다. 자세히 알아보기

aws.amazon.com

 



두번째 문제는 Load Balancer 의 기본 idle timeout 은 30초였다.
영상을 올려봤으면 알겠지만 영상을 올리기에 30초는 너무 적은 시간이다. 

EC2 콘솔로 들어가 Load Balancer 에 해당하는 Idle timeout을 늘려주면 된다.




세번째 문제는 Nginx 의 기본설정도 바꿔주지 않으면 기본 설정 용량 이상은 핸들링 하지 못한다.
디폴트의 한계 용량이 몇이었는지는 자세하게 기억이 나지않는다 ㅜ..

필자는 저런식으로 배포가 될때 client_max_body_size 0 설정을 넣어 용샹의 용량에 리미트가 없게 했다


아래는 내가 참고한 사이트다.

 

Elastic Beanstalk Linux 플랫폼 확장 - AWS Elastic Beanstalk

Elastic Beanstalk Linux 플랫폼 확장 AWS Elastic Beanstalk Linux 플랫폼은 애플리케이션 개발 및 실행을 지원하기 위해 다양한 기능을 기본적으로 제공합니다. 필요한 경우 여러 가지 방법으로 플랫폼을 확

docs.aws.amazon.com



위의 AWS 설정만으로는 영상 핸들링에 대한 기본적인 해결책이라고 할 수 없다.
사실 이 글은 비동기 큐 스택 구현을 위한 기본 설정 밖에 되지 않는다.

예를 들어 폰에서 고용량 영상을 올리는데 timeout 을 1시간으로 잡아줬다고 한들 1시간동안 올라가는 걸 기다릴 수는 없다.
그래서 우리는 비동기 큐를 이용한 업로드가 필요하다.


 

고(golang)를 이용한 비동기 큐 구현

 

myungsworld.tistory.com