티스토리 뷰
Spring Boot프로젝트를 Elastic Beanstalk를 활용해 PaaS 환경의 Custom Domain으로 배포해보기
leko 2024. 11. 21. 12:19Amazon Elastic Beanstalk란?

AWS 클라우드에서 애플리케이션을 신속하게 배포하고 관리할 수 있는 서비스
애플리케이션을 업로드하기만 하면 Elastic Beanstalk에서
용량 프로비저닝, 로드 밸런싱, 애플리케이션 상태 모니터링에 대한 세부 정보를 자동으로 처리
프로비저닝 (Provisioning) : 사용자의 요구에 맞게 시스템 자원을 미리 준비하여 필요시 바로 사용할 수 있도록 하는 것

Amazon Elastic Beanstalk - web server 환경
1. Elastic Load Balancer
로드 밸런서를 가리키는 CNAME(URL)이 Route 53에서 CNAME 레코드를 사용해 Elastic Load Balancer URL로 별칭이 지정
2. EC2 Auto Scaling Group
추가 EC2 인스턴스를 자동으로 증가시켜 애플리케이션의 증가하는 로드를 처리한다.
로드가 감소하면 최소 한개의 인스턴스는 실행 상태로 존재한다.
3. EC2 Instance
각 인스턴스에서 호스트 관리자 실행
1. 애플리케이션 배포
2. 로그 파일 모니터링
3. 오류 및 이벤트 집계
4. RDS
데이터 베이스를 클라우드에 올리기위해 범용 데이터 베이스 Relational Database Service 사용
Amazon Elastic Beanstalk 개념
1. 애플리케이션 (폴더)
환경, 버전, 환경 구성을 포함한 Elastic Beanstalk 구성 요소의 논리적 컬렉션
2. 애플리케이션 버전
Java JAR 파일처럼 배포 가능한 코드가 포함된 Amazon S3 객체를 가리킨다.
3. 환경
각 환경은 한 번에 하나의 애플리케이션 버전만 실행한다.
여러 환경에서 동일한 애플리케이션 버전 또는 서로 다른 애플리케이션 버전을 동시에 실행할 수 있다.
4. 환경 티어
HTTP 요청을 처리하는 애플리케이션은 웹 서버 환경 티어에서 실행된다.
Amazon Simple Queue Service 대기열에서 작업을 가져오는 백엔드 환경은 작업자 환경 티어에서 실행된다.
5. 환경 구성
환경 구성 설정을 업데이트하면 Elastic Beanstalk가 자동으로 기존 리소스에 변경 사항을 적용한다.
6. 저장된 구성
고유한 환경 구성을 생성하기 위한 시작점으로 사용할 수 있는 템플릿
콘솔, EB CLI, API를 사용하여 저장된 구성을 생성 및 수정할 수 있다.
7. 플랫폼
운영 체제, 프로그래밍 언어 런타임, 웹 서버, 애플리케이션 서버 및 Elastic Beanstalk 구성요소의 조합이며
웹 애플리케이션을 설계하고 플랫폼에 맞게 타겟팅한다.

Amazon Elastic Beanstalk 기능
1. 광범위한 애플리케이션 플랫폼을 지원한다.
Java, .NET, Node.js, PHP, Ruby, Python, Go, Docker
2. 다양한 애플리케이션 배포 옵션을 가진다.
AWS 관리 콘솔, Elastic Beanstalk 명령줄 인터 페이스, Visual Studio, Eclipse, Intellij를 통해 코드를 배포할 수 있다.
3. 애플리케이션의 상태를 모니터링하고 관리한다.
모니터링 대시보드를 사용하여 대기시간, CPU 사용률, 응답코드와 같은 주요성능 지표를 볼 수 있고, Amazon CloudWatch 경보를 설정할 수 있다.
4. Elastic Load Balancing과 Auto Scaling을 사용하여 애플리케이션을 자동으로 확장 및 축소한다.
Spring Boot 프로젝트를 Elastic Beanstalk를 활용해 PaaS 환경의 Custom Domain으로 배포해보는 실습!
1. AWS 콘솔에서 Elastic Beanstalk을 클릭하기

2. Elastic Beanstalk에서 Environment 설정하기
(1) Web Server 환경, Applicaton 이름, Environment 이름 설정하기

(2) Managed platform, 현재 배포하고자하는 프로젝트 타입 설정하기
(저의 경우, Spring Boot 프로젝트를 배포하는 것이기에 Java, Corretto 17 버전을 선택했습니다)

(3) Applicatoin code와 Presets 설정하기
(https로 보안설정이 첨가된 도메인으로 배포하고자 하는 경우, custom configuration으로 설정해야 합니다!)

(4) KeyPair를 설정해 instance에 연결할때 security credentials 설정하기

(5) service role 설정하기
( IAM에서 Elastic Beanstalk 관련 역할을 첨부한 qrabservice-role을 생성해 이를 사용했습니다.)

(6) Auto Scaling group 설정하기
(인스턴스 개수를 최소/최대로 설정할 수 있는데 저의 경우, 처음에 Max값을 1로 했다가 가용성을 높이기 위해 2로 바꾸었습니다.)

(7) Instance Subnets 설정하기
(한개의 가용영역에 인스턴스를 세팅했습니다.)

(8) Architecture와 Instance types 설정하기
(t2.micro로 설정했더니 프로젝트 세팅과정에서 시간이 오래 걸려서 t3.micro로 바꾸었더니 빠르게 세팅되었습니다.)

(9) Applicatoin Load Balancer로 설정하기

(10) Deployment policy에서 Rolling with additional batch 사용하기

(11) Route53에서 hosted zones 등록하기


(12) 가비아에서 해당 4개의 네임서버를 등록하기

(13) 데이터베이스 정보 설정하기 PORT, SPRING_DATASOURCE_PASSWORD, SPRING_DATASOURCE_URL, SPRING_DATASOURCE_USERNAME

(14) 해당 Environment가 제대로 잘 설정되었는지 생성된 도메인 주소로 들어가보기

(15) EC2의 보안그룹에서 inbound rule 규칙 추가하기 (MYSQL/Aurora)

(16) Route53의 hosted zones 에서 레코드를 생성하는데 이때 내가 만든 Elastic Beanstalk의 url로 설정하기

(17) Elastic Beanstalk에서 환경 설정할때 listener를 추가해준다, 이때 listener 의 프로토콜은 https이고, ssl 증명서를 ACM에서 받아온 증명서를 사용해준다, ssl policys는 ELBSecurityPolicy-2016-08 를 설정해준다.

(18) Spring Boot 프로젝트에서 인증없이 해당 url 경로로 이동할때 접근이 가능하도록 설정한다
health check url : /users, /users/health

(19) Elastic Beanstalk에서 443포트에서 경로가 잘 연결될 수 있도록 해당 health check 경로를 추가해준다.

(20) https://qrab.site 를 허용하도록 corsFilter 함수에 해당 Origin을 지정해준다.

3. Postman에서 https://qrab.site로 작동이 잘 되는지 확인해보기 - 작동이 잘 된다!

'졸업프로젝트' 카테고리의 다른 글
[SpringBoot/Java] Prompt Engineering 과 ChatGPT API를 사용해서 퀴즈를 생성해보기 (0) | 2024.05.27 |
---|