DevOps/AWS

[AWS] Github Actions, CodeDeploy, Nginx 로 무중단 배포하기 - 3

샤아이인 2022. 6. 1.

[AWS] Github Actions, CodeDeploy, Nginx 로 무중단 배포하기 - 3

총 4개의 시리즈 글로 진행될 것입니다.

 

1) Github Actions과 AWS S3 연동

2) EC2 설정과 CodeDeploy 적용

3) EC2와 RDS (이번 글)

4) Nginx 설치와 배포 스크립트

 

▶ 전체 흐름도

우선 전반적인 흐름은 다음과 같습니다!

과정을 진행하면서 막힐 때, 다음 그림을 보면서 생각해보시면 어떤 부분에서 막히고 있는지 이해하기 쉬우실 거예요!

[AWS] Github Actions, CodeDeploy, Nginx 로 무중단 배포하기 - 3

이번 시간에는 EC2 와 RDS 가 서로 연동이 되도록 하는 과정을 진행하겠습니다!

 

3. EC2와 RDS

1. DB Subnet Group 생성하기

지난 글에서 RDS는 Subnet Group 이 필요하다는 말을 했습니다.

Group이 필요한 이유는 2개의 private Subnet이 동일한 RDS를 각각 하나씩, 즉 DB 2중화 를 해서 가용성을 높이기 위해서 입니다.

 

다만 우리는 Group 까지 만들어 보고 설정은 하되, 실질적인 RDS 생성 단계에서는 단일 subet 하나만 사용할 예정입니다.

즉 우리는 2중화 까지는 하지 않을것 입니다. (RDS 요금이 2배로 드니까....)

 

DB 서브넷 그룹을 선택해 줍니다.

[AWS] Github Actions, CodeDeploy, Nginx 로 무중단 배포하기 - 3 - 				
    
    	3. EC2와 RDS
    
 - undefined - 1. DB Subnet Group 생성하기

 

이후 설정을 다음과 같이 해줍니다.

[AWS] Github Actions, CodeDeploy, Nginx 로 무중단 배포하기 - 3 - 				
    
    	3. EC2와 RDS
    
 - undefined - 1. DB Subnet Group 생성하기

지난 글에서 만든 Private Subnet 2개를 지정해주시면 됩니다.

(사실 지난 글에서 서브넷을 b 와 d AZ에 만들어 줬는데... b 와 c인 이유는.... 개인적인 이유로 다시 만들었기 때문입니다...

이전 글부터 읽어오시던 분들은 b 와 d 를 선택하시면 됩니다.)

 

생성 버튼을 누르면 Subnet Group이 생성됩니다.

 

2. RDS 보안그룹 생성하기

이번에는 인스턴스 단위의 방화벽에 해당되는 보안그룹을 설정해줘야 합니다.

VPC -> 보안 -> 보안그룹생성 을 누르면 다음과 같은 화면이 보입니다.

[AWS] Github Actions, CodeDeploy, Nginx 로 무중단 배포하기 - 3 - 				
    
    	3. EC2와 RDS
    
 - undefined - 2. RDS 보안그룹 생성하기

 

지난 글에서 만든 EC2의 publig-sg 를 인바운드 규칙에 허용시켜주면 됩니다.

이 뜻은 RDS는 public-보안 그룹에서 오는 input을 받아들이겠다는 의미 입니다.

그 외의 지점으로부터 오는 접근은 모두 차단하게 됩니다.

 

이름은 그냥 db-sg-shine으로 만들었습니다. 다른 이름으로 변경하셔도 됩니다!

 

3. RDS 생성하기

드디어 RDS를 생성해 봅시다!

[AWS] Github Actions, CodeDeploy, Nginx 로 무중단 배포하기 - 3 - 				
    
    	3. EC2와 RDS
    
 - undefined - 3. RDS 생성하기

 

생성 방식으로는 표준 생성을 선택하고, 엔진으로는 MySQL은 선택했습니다.

[AWS] Github Actions, CodeDeploy, Nginx 로 무중단 배포하기 - 3 - 				
    
    	3. EC2와 RDS
    
 - undefined - 3. RDS 생성하기

이게 사실 Oracle이나 MySql 과 같이 무료가 아닌 DB들은 시간당 요금이 조금더 비싸긴 한데... free tier 선에서 사용할것 이니 상관없습니다.

 

템플릿은 프리티어를 꼭 선택해주십쇼! 나머지는 요금이 더 발생할 수 있습니다.

[AWS] Github Actions, CodeDeploy, Nginx 로 무중단 배포하기 - 3 - 				
    
    	3. EC2와 RDS
    
 - undefined - 3. RDS 생성하기

 

이후 데이터 베이스 설정을 진행합니다.

DB 이름을 설정해주고, DB의 마스터 이름과 비밀번호를 지정해 줍니다. (해당 마스터 이름과 비밀번호를 잘 기억해두십쇼!)

[AWS] Github Actions, CodeDeploy, Nginx 로 무중단 배포하기 - 3 - 				
    
    	3. EC2와 RDS
    
 - undefined - 3. RDS 생성하기

 

다음으로 인스턴스는 free tier 범주에 속하는 t2.micro를 선택해 주십쇼!

[AWS] Github Actions, CodeDeploy, Nginx 로 무중단 배포하기 - 3 - 				
    
    	3. EC2와 RDS
    
 - undefined - 3. RDS 생성하기

주의 할점이 있는데 이게 기본으로 t3.micro로 맨 처음 선택되어 있기 때문에, 잘못 보면 t2.micro인줄 알고 지나쳐 요금이 발생하게 됩니다. 꼭 t2.micro를 선택하셔야 합니다! (아 물론 돈이 많으신분 말고...)

 

스토리지는 범용 SSD로 20Gib 를 할당하였습니다.

[AWS] Github Actions, CodeDeploy, Nginx 로 무중단 배포하기 - 3 - 				
    
    	3. EC2와 RDS
    
 - undefined - 3. RDS 생성하기

원래 우리는 Subnet Group 을 만들었기 때문에 다중 AZ 배포에서 "대기 인스턴스 생성"을 선택하면 DB 2중화가 진행됩니다.

하지만 이전에 말했듯 이러한 기능이 가능함을 소개해드리기 위해 Subnet Group을 만든것 이지, 우리는 사용하지는 않을 것 입니다.

 

저희는 그냥 다중 배포를 하지 않도록 하겠습니다.

 

이후 연결 부분에서 다음과 같이 설정을 진행해 줍니다.

서브넷 그룹은 지난번 글에서 만든 서브넷 그룹을 선택해주시면 됩니다.

[AWS] Github Actions, CodeDeploy, Nginx 로 무중단 배포하기 - 3 - 				
    
    	3. EC2와 RDS
    
 - undefined - 3. RDS 생성하기

퍼블릭 엑세스는 꼭 아니요 를 선택해 주십쇼! 외부에서 우리의 RDS 에 접근할수 없도록 할것 입니다.

이후 보안 그룹은 직전 단락에서 만든 보안그룹을 선택해주시면 됩니다.

 

인증은 암호인증을 사용합시다.

[AWS] Github Actions, CodeDeploy, Nginx 로 무중단 배포하기 - 3 - 				
    
    	3. EC2와 RDS
    
 - undefined - 3. RDS 생성하기

 

이후 추가구성에서 백업 관련된 부분은 전부 해제 하시고, 유지 관리도 선택 해제 하시고 데이터베이스 생성을 누르시면 됩니다.

 

이후 다음과 같이 생성되는것을 확인하게 됩니다.

[AWS] Github Actions, CodeDeploy, Nginx 로 무중단 배포하기 - 3 - 				
    
    	3. EC2와 RDS
    
 - undefined - 3. RDS 생성하기

 

4. EC2에서 RDS에 접근하기

database-airbnb (저의 RDS 이름)을 클릭하여 상세 페이지로 이동하면 엔드포인트 확인이 가능합니다.

[AWS] Github Actions, CodeDeploy, Nginx 로 무중단 배포하기 - 3 - 				
    
    	3. EC2와 RDS
    
 - undefined - 4. EC2에서 RDS에 접근하기

 

이 엔드포인트를 통해 EC2에서 RDS 에 접근할수 있게 됩니다.

[AWS] Github Actions, CodeDeploy, Nginx 로 무중단 배포하기 - 3 - 				
    
    	3. EC2와 RDS
    
 - undefined - 4. EC2에서 RDS에 접근하기

 

5. SpringBoot에서 application.yml 수정하기

mysql 기준으로 RDS 와 연동하기 위해서, 더 나아가 DB 와 로컬에서라도 연동하려면 다음과 같은 SpringBoot의 설정이 필요합니다.

spring:
  profiles:
    active: local
  datasource:
    url: ${datasource}
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: ${username}
    password: ${password}

  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        format_sql: true
    database: mysql

logging.level:
  org.hibernate.SQL: debug
  com.airbnb: debug

datasource, username, password 같은 경우 환경변수로 받을 것 이라, 위와 같이 만들었습니다.

 

여기까지 EC2 에서 private subnet에 있는 RDS에 접근하는 방법에 대하여 알아보았습니다.

다음 글에서는 마지막으로 배포 스크립트를 작성하여 배포하는 과정에 대하여 알아봅시다!

 

댓글