AWS 엘라스틱 빈스톡을 이용한 백엔드 배포
AWS CLI 설치
1. AWS 계정 생성
2. 파이썬 3 설치
3.AWSCLIV2.msi 설치
- 설치는 긍정적으로, aws --version으로 확인
4. AWS CLI 설정
- 로그인 후 IAM 서비스 접속 : Identity and Access Management - 역할마다 다른 접근 권한 부여
- 왼쪽 메뉴에서 엑세스 관리 - 사용자
- 오른쪽 대시보드 상단 사용자 추가 클릭
- 세부 설정 : 원하는 사용자 이름 입력 후 프로그래밍 방식 액세스 선택 - 액세스 키와 시크릿 키 자동 생성
- 권한 설정 : 기존 정책 직접 연결 클릭 후, AdminstratorAccess (모든 리소스 권한 / EC2, RDS, EMR 등)
- 태그 추가 : 선택사항
- 검토 후 사용자 만들기 클릭 후 액세스 키, 시크릿 키 기록
- 터미널에서 aws configure 명령어로 설정 : 액세스 키, 시크릿 키 입력
1) Default regoin name : 데이터센터 선택, (한국 : ap-northeast-2) 가까운 곳 선택
2) Defalut output format : json
5. pip를 이용해 EB CLI 설치 (엘라스틱 빈스톡을 위한 CLI)
- 터미널에서 pip install awsebvcli --upgrade --user
5-1. 윈도우 사용자를 위한 환경 변수 설정 (eb cli를 위함)
- 내 PC -> 속성 -> 고급 시스템 설정 -> 환경 변수
- 시스템 변수 에서 Path 변수 편집
- 새로만들기 클릭 후 %USERPROFILE%\AppData\Roaming\Python\Python39\Scripts 추가 후 확인
- 터미널에서 eb --version 으로 설치 여부 확인
백앤드 배포
1. eb 초기화
- eb init 프로젝트명-backend
- select a default region : 지역 선택
- 서버 미들웨어 운영체제 선택
1) select a platform : Java
2) select a platform branch : java 8 running on 64bit Amazon Linux
- Do you want to set up SSh for your instance? : EC2 접근 SSH 설정을 묻는 내용 (N)
- 설정 완료 : .elsticbeanstalk/config.yml 생성
2. 백엔드 애플리케이션 설정 : 개발용과 배포용 분리
- 백엔드 코드에서 /src/main/resources에
application-prod.yaml,application-dev.yaml 생성 및
자동으로 생성 된 application-properties.yml 삭제
- application-prod.yaml
server :
port : 5000
spring :
jpa :
database : MYSQL
show-sql : true
database-platform : org.hibernate.dialect.MYSQL8Dialect
hibernate :
ddl-auto : update
database:
url : jdbc:mysql://${rds.hostname}:${rds.port}/${rds.db.name}
username : ${rds.username}
password : ${rds.password}
1) server 설정 : 기본적으로 5000
2) jpa 설정
a. database : MYSQL 사용
b. show-sql : jpa가 실행한 sql 쿼리를 로그로 보여줄지 여부 설정
c. database-platform : MYSQL8Dialect 사용, java data 형과 db data 형 매핑 라이브러리
d. hibernate : ddl-auto : update
ddl (Data Definition Language) Create, Alter, Drop 쿼리
어플리케이션 시작 시 db table 을 어떻게 할지?
create : 모두 지우고 새로 생성, update : 없는 테이블 새로 생성, 수정 테이블 업데이트
validate : 현재 데이터베이스의 테이블 스키마가 애플리케이션 정의 모델과 일치하는지 확인
* 보통 validate 사용하고 업데이트 스크립트와 롤백 스크립트 따로 작성
3) datasource 설정 : ${}을 사용하여 엘라스틱 빈스톡이 알아서 넣도록 설정
a. url : 데이터베이스 url, jdbc:<db_type>://<host>:<port>/<db_name> 형태
b. username : db 사용자 이름
c. password : db 패스워드
- application-dev.yaml : 공백 파일 => h2 db 사용
- build-gradle : runtimeOnly 'mysql:mysql-connector-java' 추가
- HealthCheck API : AWS 로드 밸러서는 기본 경로에 HTTP 요청을 보내 애플리케이션 동작 여부 확인
이를 위해 HealthCheckController 생성 ( getMapping("/") 시, "The service is up and running..." 리턴하는 컨트롤러)
- target.jar 설정 : 엘라스틱 빈스톡에 자동으로 S3에 업로드하고 엘라스틱 빈스톡 환경에 설정
1) 프로젝트 root 에서 커멘드 실행
2) ./gradlew build 실행 하여 프로젝트 빌드
3) build/libs/프로젝트명-0.0.1-SNAPSHOT.jar 이름 복사
4) .elasticbeanstalk/config.yml 에 다음 코드 추가
deploy:
artifact : build/libs/프로젝트명-0.0.1-SNAPSHOT.jar
3. eb create를 이용하여 AWS 환경 생성
- 커멘드 창에 다음과 같이 입력
eb create --database --elb-type application --instance-type t2.micro
a. eb create : AWS 에 엘라스틱 빈스톡 환경 생성
b. --database : RDS 데이터베이스 자동 생성
c. --elb-type : 엘라스틱 로드 밸런서 타입 매개변수 (application / classic / network)
d. --instance-type : 애플리케이션이 동작할 인스턴스 타입, 프리티어로 제공되는 t2.mcro 사용
- 환경 이름과 CNAME prefix 설정 (고유한 값)
- Spot Fleet requests 설정 -> N
- RDS DB uesrname과 master password 설정
4. 애플리케이션 배포
- 사용할 애플리케이션 yaml 파일 지정
- 터미널에 다음과 같이 실행
eb setenv SPRING_PROFILES_ACTIVE=prod
=> application-prod.yaml 파일 이용
환경 구성
1.접근
- 엘라스틱 빈스톡 페이지에서 애플리케이션 이름 -> 구성
2. 개별 리소스 확인 : <REGION>에는 내가 설정한 지역 region을 입력(ex. ap-northeast-2)
- RDS
aws rds describe-db-instances --region <REGION>
- 오토스케일링 그룹
aws autoscaling describe-auto-scaling-groups --region <REGION>
- 로드 밸런서
aws elbv2 describe-load-balancers --region <REGION>
- 타겟 그룹(로드밸런서와 ASG 연결)
aws elbv2 describe-target-groups --region <REGION>
- 클라우드 포메이션 : 엘라스틱 빈스톡이 생성한 클라우드 스택 확인
템플릿 - Designer 에서 보기 누르면 이미지로 관계를 볼 수 있음
앤드 포인트 테스트 : 포스트맨을 이용하여 환경 페이지 URL을 복사하여 확인
프론트엔드 통합 테스팅 : 프론트 엔드의 app-config.js 변경
//backend uri를 가져오도록 구현
let backendHost;
const hostname = window&&window.location && window.location.hostname;
if(hostname === "localhost"){
backendHost = <가져온 URL>;
}
export const API_BASE_URL = '${backendHost}';