DevOps/AWS

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

샤아이인 2022. 6. 1.

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

 

1) Github Actions과 AWS S3 연동

2) EC2 설정과 CodeDeploy 적용

3) EC2와 RDS (이번 글)

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

 

▶ 전체 흐름도

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

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

이번 시간에는 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 서브넷 그룹을 선택해 줍니다.

 

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

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

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

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

 

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

 

2. RDS 보안그룹 생성하기

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

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

 

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

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

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

 

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

 

3. RDS 생성하기

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

 

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

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

 

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

 

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

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

 

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

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

 

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

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

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

 

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

 

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

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

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

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

 

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

 

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

 

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

 

4. EC2에서 RDS에 접근하기

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

 

이 엔드포인트를 통해 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에 접근하는 방법에 대하여 알아보았습니다.

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

 

댓글