본문 바로가기
DevOps/AWS

[DevOps] CICD 추가 과정 2. dev, release db 만들기

by persi0815 2024. 7. 10.

이전에 캡쳐했던 사진들을 쓰니, 이름이 reborn으로 바뀐 점 주의바랍니다..!

 

AWS가 제공하는 RDS를 사용하여 Dev, Release db를 만들어 보려고 합니다. 

 

1. DB 위하여 subnet group 만들기

Subnet group이란?

데이터베이스 인스턴스가 배치될 서브넷의 집합을 정의하는 구성요소이다. rds는 vpc(virtual private cloud) 내에서 실행되며, rds 생성시 데이터베이스가 위치할 서브넷 그룹을 선택해야 한다. 

 

왜 subnet group을 사용해야 하는가? 

- rds 인스턴스가 여러 가용 영역에 걸쳐 배포될 수 있도록 하여 장애 발생 시 서비스 중단을 방지한다. 

- rds 인스턴스가 어느 서브넷에 배포될지 명확하게 지정할 수 있다. (private 인지 public인지 등등)

- 기존 vpc 서브넷이 누리는 ACL(Access Control List)라는 방어막을 활용해 서브넷 그룹은 데이터베이스 인스턴스의 네트워크 접근을 제거하고, 보안 그룹과 연계하여 데이터베이스 접근을 관리할 수 있다. 

1) dev subnet group

dev db는 public subnet을 사용한다. 

publlic subnet을 사용하는 이유는 외부(Intellij 혹은 DataGrip 과 같은 툴)에서 접근할 수 있도록 하기 위해서인데, 사실 보안을 따지자면, private subnet에 두는 것이 옳다. 

2) release subnet group

release db는 private subnet을 사용한다. 

위에서 말했듯이 보안을 위해서인데, 이러면 툴(외부)에서 db에 접근 못하는거 아니냐? db 관리 어떻게 하냐? 라고 한다면, 또 접근할 수 있게하는 방법이 있다. 여러 방법 중 나는 bastion host 방식을 택했는데, 아래에 해당 내용 관련해서 자세히 나오니 아래를 참고하자. 

 

2. 본격적으로 DB 만들기

1) dev db

db 선택해주고

프리티어 선택해준다. 

이름을 쓰고, 

사용할 username과 password를 작성해주자. 추후 사용해야 할 일이 생기니 꼭꼭 기억해두자!!

 

storage는 돈이 나가니 꺼주자. 

 

vpc를 잘 선택해준다. 

 

dev db는 public access를 허용해준다. 

 

만든 시큐리티 골라주자. 가용영역은 a, c중 아무거나 들어간다. 

 

Additional configuration에서 백업은 돈이 나가니 지워주자. 

 

2) release db

dev db 생성과 과정이 유사해, 다른 점만 첨부하겠다. 

 

생성하고, 5분정도 기다리면 아래처럼 available이 뜬다!

 

3. Dev, Release 인프라 

1) dev

 

2) Release

release db는 보안 때문에, 외부에서 접근하지 못하도록 막기 위해 private에 두어야 한다. 

하지만, 나와 같이 data grip이나 intellij등의 툴(외부)를 통해 db에 접근하고자 하는 개발자들이 많다. 이때, 인터넷에 db를 노출하지 않고도 안전하게 db 리소스에 접근할 수 있는 방법이 있다. 

 

나는 Bastion Host + SSH Tunneling 기술을 사용했다. 

이에 대한 자세한 내용은 아래 포스팅을 참고하자..!

이렇게 subnet group을 만들고

 

이젠, bastion host 인스턴스를 만들어주자

용량 큰거 필요 없으니 t2.micro 골라주고, key pair 기입하자. 

 

network 세팅까지 하고 나면 아래처럼 인스턴스가 만들어진다. 

 

그리고, elastic beanstalk의 configuration들어가서 edit으로 db관련 환경변수도 설정해주자. 그래야 배포된 환경에서 해당 db에 접근할 수 있게 된다. 

 

이제, bastion-host 사용해서 private 서브넷에 있는 release db를 외부와 소통할 수 있게 해주자. 

그냥 무턱대로 private에 잇는 db를 외부(data grip)에서 접근시도하면 fail이 뜬다. 

 

이렇게 설정해줄꺼 해주고

 

다시 시도하면 succeeded가 뜬다!!!

 

이렇게 bastion host와 ssh tunnel을 통해서만 해당 release db에 접근할 수가 있어 복잡한 만큼 보안적으로 강해진다!!

이 과정을 통해 private subnet도 쓸모가 있다는 것을 다시금 인지할 수 있었다!!