Fargate 배포하기

chory·2021년 4월 27일
3

fargate deploy

목록 보기
1/1

Fargate란?

AWS Fargate는 기본 인프라를 관리할 필요 없이 컨테이너를 배포하고 관리할 수 있는 컴퓨팅 엔진이다.
=> 컨테이너만 올리면 분산처리하여 서버가 꺼지지 않게 배포를 도와준다.

배포하러 자 드가자!


하러 가기 이전에 파게이트는 ecs의 기본적인 개념을 알 필요가 있다.

ECS

클러스터에서 컨테이너를 쉽게 실행, 중지 및 관리할 수 있게 해주는 확장성과 속도가 뛰어난 컨테이너 관리 서비스

Cluster

클러스터란 말 그대로 군집이다. 그말인 즉슨 ecs에서 서비스, 작업정의가 작업을 하는 논리적 공간, 그룹이다.

Task definition

작업정의는 ecs에서 최소 실행 단위이며, 태스크를 실행을 위한 설정과, 컨테이너에 대한 정보를 포함하고 있다. 그리고 클러스터에 종속되어 있지 않다. 작업정의를 선언하면 다른 클러스터에서 똑같이 생성을 할 수 있다.

Task

컨테이너를 실행하는 최소의 단위이며 서비스에 의하여 실행이 됩니다. 그리고 클러스터 안에 여러 작업을 가진다.

해당 그림처럼 작업정의는 따로 선언을 하고, 필요한 클러스터 안에서 선언된 작업정의를 가져와 작업을 실행 합니다.

Service

서비스는 작업정의를 이용해, 타스크의 작업개수, 배포방식 등등 여러 작업에 대한 설정들을 가져와 관리를 한다.

Container Instance

Docker deamon과 ECS agent가 실행 중인 EC2 인스턴스이다.

배포

1. 배포할 도커파일 리퍼지토리 생성하기

  1. ECS의 ECR 이동 후 "리포지토리 생성" 버튼 클릭하여 리포지토리 생성
  2. 내가 생성을 한 리퍼지토리 선택 후 "푸시 명령 보기"
  3. 팝업이 뜰 경우 해당 커멘드들을 도커 파일의 경로가 있는 위치로 이동하여 입력

로드밸런서 생성

  1. EC2 화면 이동
  2. "로드 밸런싱" ⇒ "Load Balancer 생성" ⇒ "Application Load Balancer (HTTP, HTTPS)"
  3. "로드 밸런서" 탭에서 내가 생성한 로드 밸런서를 선택 하고, 하단의 탭에 "리스너" 로 들어가 자신이 원하는 외부 포트를 생성

클러스터 생성

  1. ECS 화면 이동
  2. "클러스터" ⇒ 오른쪽 상단 "클러스터 생성" ⇒ "네트워킹 전용 AWS Fargate 제공"
  3. 클러스터 이름 작성
  4. 생성

태스크 정의

  1. "작업 정의" ⇒ "새 작업 정의 생성"
  2. "fargate"선택
  3. 자신이 원하는 스팩 설정
  4. 컨테이너 정의

    "컨테이너 추가" 버튼을 클릭하면 다음과 같은 드로어가 나타난다.
  5. 컨테이너 이름 작성
  6. 이미지 작성: 앞에서 도커파일을 올린 ecr(ElasticContainer Repogitory)의 url을 "이미지*"에 올린다.
  7. 메모리 제한:
    소프트 제한 ⇒ 최소한의 메모리
    하드 제한 ⇒ 해당 메모리를 초과되게 되면 종료됨
    포트 매핑: 컨테이너 내부의 웹서버가 킨 포트 ex) 8080
  8. 이후 추가 해당 포스트에서 해당 설정은 하지 않고 진행을 한다.

서비스 생성

  1. "ECS" ⇒ "클러스터" ⇒ 앞에서 만든 클러스터 선택
  2. 하단에 "서비스"에서 "배포" 버튼
  3. "애플리케이션 유형"에서
    "패밀리"에서 앞에서 생성한 태스크 선택

    4.로드 밸런싱
    4.1 로드 밸런서 유형 ⇒ "Application Load Balancer"
    4.1 레디오 버튼에서 "기존 로드 밸런서 사용"
    4.1 로드 밸런서 select box 에서 EC2에서 만든 로드 밸런서 선택
    4.1 대상 그룹 이용: 새로 만들 대상 그룹 이용 대상 작성

인바운드 포트 설정

외부포트는 로드밸런서의 리스너에서 허용을 했지만 로드밸런서에서 요청을 하는 포트를 컨테이너에서 킨 서버와 통신을 하기 위해 인바운드를 열어줘야 한다.

1. "ec2"로 이동하여 왼쪽 탭 "로드밸런서"로 가서 내가 생성한 로드밸런서 선택
2. 하단의 "설명"에서 "보안" 메뉴 안에 연결된 "보안그룹"에 들어가서 컨테이너에서 열은 포트를 "인바운드 규칙"을 추가한다.

확인하기

  1. "EC2" ⇒ "로드 밸런서" ⇒ 앞에서 생성한 로드밸런서 선택 "DNS 이름" 복사하여 브라우저 창에 검색

보너스

next js 기준

standard_init_linux.go:219: exec user process caused: exec format error
(일반 도커 파일 방식으로 하면 셀 명령을 못잡는 경우가 있어 초기 이미지를ecs에서 제공하는 방식을 사용하였다.)

FROM public.ecr.aws/bitnami/node:14.15.1-debian-10-r8
WORKDIR /app

COPY package.json yarn.lock ./
RUN yarn

COPY . .

RUN yarn build
EXPOSE 3030
CMD ["yarn", "start"]

계속 글을 수정하도록 하겠습니다.
지금까지 봐주셔서 감사합니다.

profile
모든걸 뛰어넘는 끈기의 레전드 중에 전설의 탑클래스 개발자

0개의 댓글