[ AWS ] Elastic Beanstalk Springboot
처음으로 배포 해봤다.. 상당히 힘들었다 이틀 동안 꼬박 20시간 정도는 배포만 했던 거 같다..
저처럼 삽질 하지않길 바라면서 제가 구글링하며
아 이렇게 설명해주면 참 좋았을텐데라고 생각한 그대로 작성해보겠습니다.
Elastic Beanstalk를 이용하면 기존 EC2를 이용해 배포하던 모든 과정을 생략하고 쉽고 간단하게 인스턴스, 환경구축 까지 가능하고 업로드/배포/ nginx 까지 자동으로 해준다.
우선 처음에 가장 해맸던 환경구축을 하며 EC2 인스턴스 프로파일 설정 부터 알아보자...!
aws에 회원가입 후 로그인을 해줍니다.
로그인을 하면 자동으로 aws 메인 콘솔로 이동하게 되는데 상단 좌측에 위치한 검색창에 IAM 을 검색
검색 후 상단 맨위에 보이시는 IAM을 클릭합니다
우측에 역할이나 리소스에 역할 클릭
여기서 역할 생성 클릭
EC2를 선택해줍니다 ( 신뢰할 수 있는 엔터티 유형은 저는 AWS 서비스를 선택했습니다 )
아래 3가지 정책을 선택한 뒤 다음을 누릅니다
- AWSElasticBeanstalkWebTier
- AWSElasticBeanstalkWorkerTier
- AWSElasticBeanstalkMulticontainerDocker
역할 이름은 반드시 제가 입력한 이름을 넣어주시길 바랍니다.
저도 처음에 안되서 신뢰 정책을 여러번 바꿔줬습니다. 현재 aws 에선 생성 할 땐 편집이 불가능하고
생성 후 따로 편집해줘야합니다 우선 생성하겠습니다.
생성 하면
상단에 인스턴스가 생성된 게 확인 가능합니다.
<신뢰정책 코드 편집>
변경하고싶은 인스턴스 클릭
권한 옆에 신뢰관계 클릭
여기서 변경하시면 됩니다.
저는 이 코드로 현재 정상적으로 환경 구축이 가능했습니다.
제가 추가한 권한 정책은 바로 위 이미지에 있습니다..!
애플리케이션 / 환경 생성
다시 검색창에 Elastic Beanstalk 입력
맨 위에 거 클릭!
환경 생성 클릭!!
애플리케이션 이름은 자신이 필요한 이름으로 입력해줍니다
앱 이름을 기입하면 환경 이름도 자동으로 생성됩니다(변경가능)
스프링부트를 이용하기에 java플랫폼을 해줍니다
플랫폼 브랜치는 제가 변경을 안해뒀지만 Linux 2 로 변경해줬습니다.
그리고 Correntto 는 AWS 구축한 자바 서버로서 17 은 자바 버전으로
본인이 구성한 프로젝트에서 사용한 자바 버전에 맞게 선택하시면됩니다.
그리고 애플리케이션 코드는 샘플애플리케이션으로 하게되면 환경 구축 후 코드를 업로드/배포하는 것이고
코드 업로드를 선택하시면 바로 코드를 업로드 할 수 있습니다.
저는 spring boot 프로젝트를 업로드/배포 할 때 jar 로 패키징 하였습니다
eclips jar 패키징 하는 방법을 다음 포스팅에 업로드하겠습니다.
aws에서 프리 티어로 무료로 이용하기 위해선 무조건!! 단일인스턴스 프리티어 사용 가능을 선택해줍시다.
잘못선택하면 비용폭탄...
중요!!!! 여기서 위에서 우리가 만든 인스턴스로 서비스 역할을 부여해줍니다!!
새 서비스 역할 생성 및 사용하면 권한 정책이 부여되지 않아 환경 구축이 되지 않았습니다..( 이걸로 5시간 낭비 했었음..)
DB 가 연결된 프로젝트라면 DB설정을 해줘야합니다.
이건 따로 나누어 포스팅하겠습니다.
쭉 넘어오시다보면 용량 부분에 t2.micro 를 선택해줍시다 default 로 t3.xx 되어있는데
프리티어 용량인 t2.micro 를 선택해줍니다
default 값 전부 x 눌러 삭제 -> 이대로 사용하면 요금폭탄.. (전 다행이도 200원 날렸습니다...)
여러 번에 구글링을 통해 찾은 한줄기에 희망이였습니다 ..
https://stackoverflow.com/questions/54612962/502-bad-gateway-elastic-beanstalk-spring-boot
502 bad gateway Elastic Beanstalk Spring Boot
I deployed a Spring Boot app on AWS Elastic Beanstalk. I am facing a 502 Bad Gateway error. I cannot find anything useful from the logs /var/log/nginx/error.log 2019/02/10 02:12:54 [error] 3257...
stackoverflow.com
nginx는 기본적으로 요청을 포트 5000 번으로 전달하도록 구성되어있지만 외부 애플리케이션 서버는 포트 8080으로 실행됩니다
그리고 springBoot 도 default 포트가 8080이므로 서로 충돌하여 502 Bad gateWay 를 발생시킵니다.
그래서 해당 환경 속성에 제가 기입하신대로 입력하시거나 springBoot 프로젝트에 프로퍼티에 서버포트 값을 5000
( server.porst=5000) 으로 변경해주시면 에러가 안뜨실겁니다.
저는 혹시 무서워서 둘 다 5000 으로 설정해뒀습니다.