기술 공부

AWS 엘라스틱 빈스톡을 이용한 백엔드 배포

랼랼 2022. 4. 14. 17:29

 

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}';

 

반응형