Docker 이미지 생성

ECS의 태스크 정의를 위해서사용할 테스트 이미지를 생성하였다. 이미지 생성 과정에서 생긴 이슈를 다음과 같이 정리하였다.

  1. SSH 이슈

    git clone을 ssh 인증을 이용하여 사용하기 위해서는 ssh가 설치되어야 한다. 하지만 기본 이미지에서는 ssh를 수동으로 설치해야 하는데 이 과정에서 interactive 창이 등장하였다.

    timezone을 묻는 창이 생긴다.

    timezone을 묻는 창이 생긴다.

    위의 문제를 해결하기 위해서 몇가지 환경변수 세팅이 필요하였다.

    ENV PYTHONUNBUFFERED 1
    ENV TZ Etc/UTC
    
    RUN sudo apt update && \\
        sudo ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \\
        sudo touch /etc/timezone && \\
        sudo chmod 666 /etc/timezone && \\
        sudo echo $TZ > /etc/timezone && \\
        sudo apt install -y ssh
    

    권한에 따라서 chmodsudo는 선택적으로 적용하자.

    상황에 따라서는 다음과 같은 환경변수 설정만으로 충분하다고 한다.

    ENV DEBIAN_FRONTEND noninteractive
    ENV TZ Etc/UTC
    
  2. git clone 이슈

    git clone을 도커파일 내에서 실행하기 위해선 SSH 인증 방식을 채택하였다. 먼저 private key를 복사하며 호스트(gitlab.com)를 known_hosts에 등록해야 한다.

    RUN mkdir /home/ubuntu/.ssh
    COPY id_rsa /home/ubuntu/.ssh/
    RUN sudo chmod +r /home/ubuntu/.ssh/id_rsa && \\
        ssh-keyscan gitlab.com >> /home/ubuntu/.ssh/known_hosts
    

    위의 방식으로 호스트가 잘 등록되었다면 터미널이 중단되는 문제는 없어진다.

ECS with Terraform

테라폼을 이용해서 오토스케일링 그룹과 클러스터를 만들어주면 EC2기반의 ECS 클러스터가 생성된다. 코드 내역은 다음을 참고하자

롤링 업데이트를 이용한 배포

롤링업데이트의 경우 서비스를 정의하는 상황에서 최소 정상상태 백분율과 최대 백분율에 기반하여 RUNNING과 PENDDING 상태를 번갈아 적용하여 무정지 배포를 수행한다.

→ 하지만 백분율의 범위에 따라서 무정지 배포가 적용되지 않을 수 있다.

롤링 업데이트 모의 배포

간단하게 pikurate에서 통계서버로 활용되고 있는 django 기반 서버를 태스크 정의로 묶자