AWS Elastic Beanstalk 배포 트러블슈팅(Azure WebApp과 간단비교)
<개요>
Azure WebApp을 다음과 같은이유로 잘 사용해왔다.
- Azure Devops와 연계하여 배포가 쉽다.
- 다양한 Runtime환경을 기본으로 제공한다. (node, java, C# 등)
- 통합 로깅, 모니터링, 대시보드 환경을 제공한다.
- Auto Scaling이 편리하다. (VM 단위보다 더욱 유동적이다.)
- 접속을 위한 싱글포인트를 제공한다.
- 이번에 AWS에서 시스템을 구축하게 되어서 비슷한 PaaS를 찾던 중 Elastic Beanstalk를 발견하고 사용하던 중 발생한 내용이다.
<현상>
- Elastic Beanstalk는 내부적으로 nginx 를 사용하고 있다.
- Spring Boot배포 후 접속하면 502 Bad gateway 발생
<상세오류 - 로그확인>
2020/03/12 06:12:07 [error] 3114#0: *3 connect() failed (111: Connection refused) while connecting to upstream, client: 100.10.0.208, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:5000/", host: "userservice-env.eba-yqakdkhm.ap-northeast-2.elasticbeanstalk.com"
<해결과정>
- 구글링을 통해서 나오는 대표적인 해결방법은 포트변경이다. (AWS Beanstalk가 기본적으로 5000포트를 사용한다고 한다.)
하지만 나에게는 해당하지 않는 내용이었다. 과거 connection reset을 해결할때가 떠오르기 시작한다;;
조금 더 관련내용들을 찾아보았다.
내용을 종합해보면 결국 application이 적절하게 기동되지 않거나 하여 nginx 가 해석할 수 없는 메시지를 돌려받았을 경우 발생한다.
- Beanstalk의 설정을 천천히 검토해보았다.
구성, 환경변수, 네트워크, 로드 밸런서 등 이상이 없음을 확인하였다.
- 그렇다면 결국 application이 제대로 기동되지 않았을 확률이 높으나 해당 로그를 확인할 수 없는 것이 아쉽다. (로컬에서는 정상적으로 기동하니까)
- AWS Beanstalk의 spring-boot application 기동방식이 궁금해지기 시작한다.
샘플어플리케이션으로 사용되는 예제는 다음과 같다.
https://github.com/spring-guides/gs-accessing-data-rest.git
해당 프로젝트의 pom.xml을 살펴보고 문제점을 찾았다. 아주 사소한....
<build> 태그의 <spring-boot-maven-plugin> 을 빼먹고 작성하지 않았다.
<정리>
- Azure WebApp을 사용할때는 azure-webapp-maven-plugin을 사용했었다.
- 신규 프로젝트 구성시 initializer없이 구성하다 Public Cloud관련요소 작업 중 Build plugin실수로 삭제;;
- 정확한 로그를 확인할 수 없어서 약간 힘들었음
<Azure WebApp과 비교>
- Azure WebApp이 생성시 매우 간단하다. 클릭 몇번으로 끝
- 배포 역시 azure-webapp-maven-plugin을 사용하여 IDE에서 바로 배포하는 것도 쉽다.
다만 version에 따른 사용법이 매우 다르기 때문에 주의해서 사용해야 한다.
예전에 사용했던 버전이 1.4.0 과 1.5.3 이었는데 세부속성과 사용법이 다르고, 설정 오류시 상세한 메시지를 확인하기가 어렵다.)
- AWS Beanstalk역시 기본설정은 간단하지만 상세화면으로 들아가면 항목이 매우 많다.
( Azure의 경우 후발주자이다보니 PaaS를 중심으로 발전시켜 나갔고,
AWS의 경우 VM기반의 선발주자이다보니 제품 여기저기에서 VM중심의 구성이 많이 보인다.)
<참고>
https://github.com/spring-guides/gs-accessing-data-rest/
다음에는 Azure Devops와 AWS Code Pipeline의 비교사용기를 ...