상세 컨텐츠

본문 제목

경력 0개월차 개발자의 고래 해체 작업 썰 - 1 [Docker, ECS]

소프트웨어/인프라

by moonionn 2021. 8. 24. 02:05

본문

이 글은 docker에 대한 기본적인 이해가 있는 분들을 염두에 두고 작성하였습니다.

 

들어가기에 앞서

redash라는 툴이 있습니다. SQL 쿼리를 날려 데이터를 조회 / 시각화할 수 있으며

여러 데이터 소스를 융합해서 사용할 수 있다는 메리트가 있습니다.

 

출처: https://www.aot-technologies.com/tools-we-love-redash/

 

코드는 오픈 소스로 공개되어 있습니다.

https://github.com/getredash/redash

 

GitHub - getredash/redash: Make Your Company Data Driven. Connect to any data source, easily visualize, dashboard and share your

Make Your Company Data Driven. Connect to any data source, easily visualize, dashboard and share your data. - GitHub - getredash/redash: Make Your Company Data Driven. Connect to any data source, e...

github.com

 

구성은 아래와 같습니다.

 

출처: https://kyle79.tistory.com/194

 

 

WHAT TO DO

redash는 기본적으로 EC2 위에 서비스되도록 설계되어 있습니다. redis 도커 이미지, nginx 도커 이미지, postgresql 도커 이미지가 추가적으로 필요하며, redash 이미지의 경우 docker-compose를 실행하면 여러 개의 컨테이너가 띄워집니다. (같은 이미지라도 명령어와 환경 변수에 따라 각기 다른 역할을 하는 컨테이너들)

 

이렇게 EC2 위에 각기 다른 기능의 컨테이너가 올라가면 아래와 같은 문제가 발생합니다.

 

1. 오토 스케일 + 스케일 아웃/업 이 번거롭다.

2. 데이터베이스 백업이 번거롭다. (EC2 호스트 포트와 postgres 컨테이너 포트를 매핑해줘야 함)

3. 컨테이너별 모니터링과 로그 확인이 번거롭다.

4. EC2 관리에 추가적인 리소스가 소요된다.

5. 각 서버별 버전 업그레이드가 불편하다.

 

기획

이러한 이유로 현재 EC2 위에서 관리되고 있는 redash 서버를 다른 환경으로 구성해야 합니다. Postgresql 컨테이너는 RDS로, Redis는 ElastiCache로 이관하면 되지만... EC2가 없으면 어플리케이션 컨테이너는 어떻게 띄우나? 그게 되나?라고 의문을 품었습니다. 하지만 누가 갓 AWS 아니랄까 봐 AWS는 그런 기능까지 제공해주고 있었습니다. 바로 파게이트를 사용하면 됩니다.

 

어떤 일본인 개발자가 친절하게 그려놓은 구성도

출처: https://qiita.com/kohei789/items/39f441cdd2423834832f

 

HOW TO

* 1. 테스트용 EC2 서버 생성

* 2. 테스트용 EC2 위 redash 환경 구성

3. 기존 데이터베이스 백업 및 RDS로 이전 (+ PostgreSQL 버젼 업그레이드)

4. ElastiCache 생성 및 연동

5. ECS Cluster 생성

6. docker-compose를 기반으로 Task-definitions 작성

7. NLB 적용

8. CORS 처리

9. 도메인 적용

 

* 이번 포스트에서 다룰 범위입니다.

 

1. 테스트용 EC2 서버 생성

일단 테스트용 서버(EC2)를 생성합시다. 저는 Amazon-linux를 사용했지만 우분투를 사용해도 무방합니다. 오히려 redash 공식 코드가 우분투 기반으로 되어 있으니 우분투를 더 추천드립니다.

원래 작업 대상인 redash도 우분투 위에서 돌아가고 있었습니다. 저는 어쩌다보니... 필요한 패키지를 관리하다가 중간에 막혀서 Amazon-linux로 우회하게 되었습니다. (자세한 기억은 안남...) 

 

redash는 쿼리툴이다보니 하드웨어 리소스를 엄청 많이 잡아먹습니다. 저 같은 경우에는 인스턴스 타입을 m5 시리즈로 선택했습니다. (메모리 8기가 정도 되는 걸로)

 

2. 테스트용 EC2 위 redash 환경 구성

친절하게도 redash는 도커 설치부터 컨테이너 실행까지 일련의 과정을 setup.sh 파일로 제공하고 있습니다.

https://github.com/getredash/setup/blob/master/setup.sh

 

GitHub - getredash/setup: Setup scripts for Redash Cloud Images

Setup scripts for Redash Cloud Images. Contribute to getredash/setup development by creating an account on GitHub.

github.com

 

위에서 말씀드렸다시피 redash는 우분투 환경 베이스로 셋팅이 되어 있기 때문에 shell script 파일도 우분투 기반입니다. 만약에 저처럼 다른 리눅스 환경인 분들은 좀 번거롭더라도 손을 봐야겠지요. (ex. apt-get -> yum)

 

redash 공식 도커 이미지 그대로가 아닌, 조금 커스터마이징한 이미지를 사용하고 계시는 분들이라면 아래 코드 줄만 해당 이미지 repository를 향하게 수정해주면 됩니다.

$ sed -ri "s/image: redash\/redash:([A-Za-z0-9.-]*)/image: redash\/redash:$LATEST_VERSION/" docker-compose.yml

 

자 이제 이 shell script 파일을 EC2 컨테이너 위에서 실행하면 됩니다!

모두가 기도한 것처럼 아무 별 탈 없이 도커 컨테이너가 여러개 띄워져 있으면 성공입니다.

 

 

하지만 개발자의 기도가 이루어지는 경우는 별로 없습니다. 뭔가 중간에 잘못될 수 있습니다.

괜찮아요. 🥲 그냥 setup.sh 파일을 수동으로 돌려주면 됩니다... 도커를 직접 설치해주고, 이미지도 직접 pull해오면 되고... 그럼 됩니다.

 

https://hub.docker.com/r/redash/redash

https://hub.docker.com/r/redash/nginx

https://hub.docker.com/_/redis

https://hub.docker.com/_/postgres

 

* redis나 postgres 이미지의 경우 redash github 레포의 docker-compose.yml에 써져있는 버전 참고하세요.

 

저 같은 경우에는 가장 마지막 줄의 sudo docker-compose 명령어가 먹질 않았습니다. (sudo 없이 명령어 실행하니 작업이 진행됨) 이런 에러는 로그가 친절하게 찍히기 때문에 그나마 쉽게 해결할 수 있는 것 같습니다.

 

다음 포스트에서는 데이터베이스 이관 작업에 대해 다루어 보려 합니다. 두구두구두구 🥁

redash가 사용하는 Postgre 이미지 버전이 9.x인데, AWS RDS가 2022년 초부터 9.x 버전을 지원하지 않는다는 이슈 발생과, EC2 위의 컨테이너 데이터를 내 로컬로 백업하고, 그 데이터를 다시 RDS로 이관하는 과정에 대해 상세히 기록할 예정입니다.

관련글 더보기

댓글 영역