Infra & Tools/Docker&K8s

aws EFS and k8s

sung.hyun.1204 2022. 8. 18. 23:00

 

현 상황 :

AWS ECS  와 ALB 를 설정해둠

 

AWS Fargate는 서버를 관리하지 않고도 애플리케이션 구축에 초점을 맞출 수 있도록 지원하는 종량제 서버리스 컴퓨팅 엔진입니다. 

 

 

 

Elastic File System :

 

Docker container 종료시 기본적으로 데이터가 삭제가 된다.

이는 볼륨을 추가적으로 설정하여 컨테이너가 종료가 되어도 데이터를 보존 하는 방식으로 사용하는데,

Elastic Container System도 이와 같은 기능이 있다.

Elastic File System.

 

EFS 를 이용하면 하드 드라이브에 연결이 가능하다.

BindMount : 우리가 모르는 장소에 데이터가 저장이 된다.

EFS : 우리가 알 수 있는 장소에 데이터가 저장 된다.

 

DB 구축시 고려 사항.

 

AWS RDS,, 나올줄 알았지만 강의는 Mongo DB Atlas 를 다룬다.

최종  Targegt 아키텍처

 

개발을 완료를 했다고 바로 배포를 하지 않고 product 에 맞게 최적화를 시키는 작업이 필요하다.

 

React script 를 보면 다음 두가지의 경우가 있다.

  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    ...}

 

Start. 는 개발용이다.  start 로 실행할시  다음 frontend app.js코드를 브라우저 친화 적인 코드로 변화를 시킨다.

  return (
    <div>
      {error && <ErrorAlert errorText={error} />}
      <GoalInput onAddGoal={addGoalHandler} />
      {!isLoading && (
        <CourseGoals goals={loadedGoals} onDeleteGoal={deleteGoalHandler} />
      )}
    </div>
  );

브라우저는 위의 코드를 실행하지 않습니다. == > 개발 중에는 필요하지만 제품 배포용에는 적합하지 않습니다.

 

build 는 배포용 입니다.  컴파일 및 최적화를 하여 start 보다 가볍고 최적화된 파일을 내보냅니다. 

 

 

 

개발용으로 설정해둔 node 서버 , -> frontend release 에서는 필요없다. (당연한 말..)

 

Dockerfile.prod

FROM node:14-alpine as build

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

CMD ["npm, "run, "build"]

 

포트 노출이 없으니 삭제, start -> build 로 바꿔준다.

 

 

결과 : 최적화된 파일 

 production 에서 이용이 가능한가 ->  x  

서버가 필요하다.

 

 

Multi -Stage Build

 

사용법 : FROM  명령은 새 스테이지를 만든다.

 

copy --from=build 를 통해 (1 줄에 as build 라는 이름으로 설정해둠) 원하는 스테이지의 최종 결과를 가져온다.

 

/app/build : 가져올 파일 위치

 

/usr/share/nginx/html :  복사해서 넣을 위치.

FROM node:14-alpine as build

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

RUN npm run build

FROM nginx:stable-alpine

COPY --from=build /app/build /usr/share/nginx/html

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

CMD ["nginx", "-g", "daemon off;"] : nginx 를 시작하는 커멘드이다.