ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

     

Designed by Tistory.