- AWS 사용법
- AWS CLI
- EB CLI
- 백엔드 배포
AWS를 사용하는 방법은 아래와 같다.
이번에는 CLI 써본다~~
AWS CLI는 파이썬 기반이라서... 파이썬이 있어야한다..
파이썬 공부를 해야되니까...^^ 즐겁다..!
brew install python3
python3 --version
근데 나 아나콘다 환경 대체 어떻게 된겨
pip3 install awscli
aws --version
IAM 생성하고 액세스 키와 시크릿 액세스키 발급
AWS는 IAM을 제공하여 사람마다 다른 접근 권한을 배정할 수 있다. 각 사람에게는 아이디와 비밀번호, 사람이 아닌 프로그램에는 액세스키와 시크릿 액세스키를 제공하는 것.
AWS 콘솔에 아이디와 비밀번호를 사용하는 것처럼 AWS CLI가 나의 AWS 계정에 접근하기 위해서는 액세스키와 시크릿 액세스키가 필요하다.
AWS Credential 설정
aws configure
AWS Access Key ID [None]: <액세스 키 ID>
AWS Secret Access Key [None]: <시크릿 액세스 키>
Default region name [None]: us-east-1
Default output format [None]: json
AWS CLI는 AWS의 모든 서비스를 위한 CLI. 그래서 AWS CLI 사용 시 EC2, 로드밸런서 등 다 사용 가능하다.
EB CLI는 일라스틱 빈스톡만을 위한 CLI
pip3 install awsebcli
eb --version
색칠된 부분을 구현할것이다~..
- 환경별 애플리케이션 프로퍼티 파일 설정
- RDS
- EC2
- 오토 스케일링 그룹
- 로드밸런서
일라스틱 빈스톡은 위 사진의 노란 점선 부분을 생성해준다.
현재 프로젝트의 백엔드 애플리케이션은 RDS에 MySQL을 데이터베이스로 사용하고 서버는 로드밸런서에 오토스케일링 그룹을 연결하는 형태
진행 순서는 아래와 같다.
일련의 과정을 일라스틱 빈스톡을 사용하면 간단하게 수행 가능하다.
[예시]
eb create --database --elb-type application --instance-type t2.micro
백엔드 애플리케이션 프로젝트로 이동
eb init
명령어를 사용하여 애플리케이션을 생성해준다
eb init TodoApp-BE
Select a default region
1) us-east-1 : US East (N. Virginia)
2) us-west-1 : US West (N. California)
3) us-west-2 : US West (Oregon)
4) eu-west-1 : EU (Ireland)
5) eu-central-1 : EU (Frankfurt)
6) ap-south-1 : Asia Pacific (Mumbai)
7) ap-southeast-1 : Asia Pacific (Singapore)
8) ap-southeast-2 : Asia Pacific (Sydney)
9) ap-northeast-1 : Asia Pacific (Tokyo)
10) ap-northeast-2 : Asia Pacific (Seoul)
// 생략
(default is 3): 10
Select a platform.
// 생략
6) Java
7) Node.js
8) PHP
9) Packer
10) Python
11) Ruby
12) Tomcat
(make a selection): 6
Select a platform branch.
1) Corretto 11 running on 64bit Amazon Linux 2
2) Corretto 8 running on 64bit Amazon Linux 2
3) Java 8 running on 64bit Amazon Linux (Deprecated)
4) Java 7 running on 64bit Amazon Linux (Deprecated)
(default is 1):
Do you want to set up SSH for your instances?
(Y/n): n
설정 완료 시 .elasticbeanstalk 디렉터리 생성되고 이 안에는 config.yml파일이 생성된다.
애플리케이션 프로퍼티 파일을 개발용과 배포용으로 분리해준다
/src/main/resources 아래에 application-prod.yaml과 application-dev.yaml 파일을 생성한다. 기존 프로퍼티 파일은 삭제
server:
port: 5000
spring:
jpa:
database: MYSQL
show-sql: true
database-platform: org.hibernate.dialect.MySQL8Dialect
hibernate:
ddl-auto: update
datasource:
url: jdbc:mysql://${rds.hostname}:${rds.port}/${rds.db.name}
username: ${rds.username}
password: ${rds.password}
jdbc:<DB타입>://<호스트>:<포트>/<DB이름>
형태이다.${}
지정공백으로 남겨두면 dev 사용 시 h2 DB, prod 사용시 mysql 사용가능
build.gradle의 dependencies에 코드 추가
runtimeOnly 'mysql:mysql-connector-java'
AWS 로드밸런서는 기본 경로인 "/"에 HTTP 요청을 보내서 애플리케이션이 동작하는지 확인한다. EB은 이를 기반으로 애플리케이션의 상태를 확인한다. 그리고 이 상태를 AWS 콘솔에 표시해준다
이를 위해서 "/"에 API를 생성해준다.
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HealthCheckController {
@GetMapping("/")
public String healthCheck() {
return "Service is up and running........";
}
}
"/" API는 인증 없이 사용가능하다!
WebSecurityConfig에서 이미 "/"와 "/auth/**"는 인증하지 않아도 되도록 설정했기 때문에..
만약 이 설정 안 해두면 "/" 접근도 403코드를 리턴하고 따라서 로드밸런서는 이 애플리케이션에 에러가 있다고 판단한다.
EB가 애플리케이션을 자동으로 S3에 업로드하고 EB환경에 설정할 수 있도록 설정 해야한다.
업로드할 애플리케이션의 경로를 알려주면 이러한 설정이 가능하다.
터미널에서 프로젝트 루트 디렉터리에서 빌드 커맨드를 실행하여 프로젝트를 빌드해준다
./gradlew build
빌드가 완료되면 build/libs 폴더 내부에 jar파일이 생성된다.
SNAPSHOT.jar의 경로를 복사해서 .elasticbeanstalk/config.yml에
deploy:artifact 부분에 추가해준다.
eb create
커맨드를 이용하여 AWS에 환경 생성
eb create --database --elb-type application --instance-type t2.micro
AWS 일라스틱 빈스톡 환경을 확인해보면 상태가 Severe하다.
생성만 하고 배포를 아직 하지 않아서 그렇다.
eb setenv
커맨드를 이용하여 환경이 사용할 애플리케이션의 yaml파일을 지정해준다.
eb setenv SPRING_PROFILES_ACTIVE=prod
재시작 완료되면 OK 된다
배포 완~~~ 😇