-
[GitLab] 한 ec2 인스턴스로 여러 서비스 배포하기 - 1 (ec2 인스턴스에 gitlab-runner 설정하기까지)Infra/devOps 2024. 5. 5. 17:09
기존 배포 구조 내가 다니고 있는 회사는 B2B 비즈니스를 하는 곳으로
일반적인 사이트보다 트래픽이 적은 편이다.
위의 사진은 기존 우리가 사용하던 아키텍처이다.
간단히 설명을 하자면
백엔드는 gitlab-ci를 통해 빌드된 도커 이미지를 ecr 에 올린 후
그 이미지를 우리의 elastic beanstalk 가 지정하고 있는 s3 버킷에 올려,
ec2 인스턴스에 컨테이너로 동작시키고, 로드밸런서와 acm 과 도메인 설정을 해준다.
프론트는 빌드된 정적 파일을 s3 버킷에 올려
그 버킷을 원본으로 지정하는 클라우드 프론트를 동작시키는 것이다.
백엔드 배포해주세요 프론트 배포해주세요 백엔드인지 프론트엔드인지 구분하는 것은
gitlab-ci.yml 의 rules 를 사용하였다.
이 배포 구조를 변경하려 했던 이유는
ec2의 요금 정책과 관련이 있다.
aws ec2 요금표 aws 비용 정책 위와 같이 인스턴스 별로 시작된 시점부터 비용이 발생한다.
우리는 하나의 서비스가 큰 트래픽을 발생시키고 있지 않기에
서비스 별로 하나의 ec2 인스턴스를 배정한다면
스펙 대비 너무 많은 비용을 지불하게 된다!
그래서 변경될 구조는 다음과 같다.
변경된 배포 구조 우리가 생성한 ec2 인스턴스마다 gitlab-runner (이하 러너)를 등록해두고
그 러너에게 dep.sh 를 실행할 인자를 전달한다.
그렇게 전달한 인자를 가지고 dep.sh 이 deploy를 하게 된다.
deploy stage 이 코드에 들어있는 변수 명은 블로그에 올리기 위해 임의의 이름으로 변경하였다.
입력해둔 변수 이름은 아무 의미가 없으니 그냥 어떤 환경 변수를 주입했는지를 보면 될 것같다.
과정은 ecr 과 도커에 로그인 처리를 해둔 후 dep.sh 를 실행시켜
그 dep.sh 에서 ecr image를 받고 docker run 을 시켜주게 된다.
물론 해당 서비스가 이미 컨테이너로 동작하고 있는지에 대한 처리도 넣었다.
dep.sh 'Infra > devOps' 카테고리의 다른 글
[Monitoring] Prometheus + google chat 으로 알림받기 (1) 2024.11.06 [웹 사이트 성능 향상시키기] gzip 을 적용해보자. (0) 2024.10.22 [Ubuntu22.04] 우분투 22.04 원격 튕김 오류 해결 (0) 2024.06.24