[AWS] Amazon ECS

연수·2022년 3월 6일
0

AWS

목록 보기
4/5

✔️ AWS Fargate란?

  • Fargate는 AWS ECS와 EKS를 기반으로 작동하는 서비스로, 도커 컨테이너를 EC2 인스턴스 없이 독립적으로 실행할 수 있게 해준다.
  • 컨테이너의 이동성, 서버리스의 탄력성, 사용 용이성 등의 장점을 갖는다.
  • EC2보다 컴퓨팅 성능을 더 세세하게 선택할 수 있으며, 태스크 단위에서 IAM 롤이나 네트워크 인터페이스를 부여하는 것도 가능하다.
  • Fargate를 사용하면 ECS를 기반으로 EC2와 같은 별도의 컴퓨팅 자원에 의존하지 않고 컨테이너를 독립적으로 실행할 수 있다. 즉, 컴퓨팅 자원에 대한 추가적인 관리 없이 애플리케이션을 실행하는 것이 가능하다.
  • Fargate 서비스의 컴퓨팅 용량은 오토 스케일링 기능을 사용해 쉽게 확장이 가능하여 모든 배포 작업을 수행하는 데 시간에 적게 소요된다.
  • 컨테이너를 기반으로 하기 때문에 람다에서 지원하는 언어들보다 훨씬 더 다양한 환경을 그대로 이식하는 것이 가능하다.

 


✔️ ECS 구성 과정

👉 사전 작업

👆 (M1에서) ECS 배포 오류 관련

[참고] https://appleg1226.tistory.com/35

 

✌️ Dockerfile, app.conf 수정

  • spring 컨네이너와 nginx 컨테이너를 띄우기 위해 도커 파일 작성

    [참고] https://www.jenkins.io/doc/book/pipeline/docker/

  • spring Dockerfile

    FROM openjdk:11 AS builder
    COPY ./intern-project/gradlew .
    COPY  ./intern-project/gradle gradle
    COPY  ./intern-project/build.gradle .
    COPY  ./intern-project/settings.gradle .
    COPY  ./intern-project/src src
    RUN chmod +x ./gradlew
    RUN ./gradlew bootJar
    
    FROM openjdk:11
    COPY --from=builder build/libs/*.jar app.jar
    
    EXPOSE 8080
    ENTRYPOINT ["java","-jar","/app.jar"]
  • nginx Dockerfile

    FROM nginx
    
    RUN rm -rf /etc/nginx/conf.d/default.conf 
    COPY  ./web/prd/nginx/conf.d/app.conf /etc/nginx/conf.d/app.conf 
    WORKDIR /etc/nginx 
    
    EXPOSE 80
    
    CMD ["nginx","-g","daemon off;"]
  • app.conf

    server {
        resolver 10.1.0.2 valid=5s;
    	  # VPCr가 10.1.0.0/16이라면 resolver는 10.1.0.2
        
        location / {
            set $target "{nlb DNS 주소}";
            proxy_pass http://$target;
            proxy_set_header   Host $target;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

 

👉 작업 정의

  • td-dev-spring-01, td-dev-nginx-01, td-prd-spring-01, td-prd-nginx-01
  • 호환성 요구 사항 : FARGATE
  • 네트워크 모드 : awsvpc
    • 컨테이너 네트워킹을 간소화하고 컨테이너화된 애플리케이션이 서로, 그리고 VPC 내 다른 서비스와 통신하는 방식을 더 세부적으로 제어할 수 있다.
    • 태스크 내에서 더 세부적으로 보안 그룹 및 네트워크 모니터링 도구를 사용 가능하게 만들어 컨테이너 보안을 강화한다.
    • 각 태스크는 고유한 탄력적 네트워크 인터페이스(ENI)를 받으므로 VPC 흐름 로그와 같은 네트워킹 기능을 이용해 태스크에서 주고 받는 트래픽을 모니터링할 수도 있다.
  • 작업 메모리(MiB) : 1024
  • 작업 CPU(단위): 512

 

👉 컨테이너 정의

  • container-dev-spring-01, container-dev-nginx-01, container-prd-spring-01, container-prd-nginx-01
  • 메모리 제한(MiB): 1024
  • 포트 매핑: 80, 8080

 

👉 클러스터 생성

  • ecs-dev-spring-01, ecs-dev-nginx-01, ecs-prd-spring-01, ecs-prd-nginx-01
  • 네트워킹 전용

 

👉 서비스 구성

  • ecs-service-dev-spring-01, ecs-service-dev-nginx-01, ecs-service-prd-spring-01, ecs-service-prd-nginx-01
  • 시작 유형 : FARGATE
  • 작업 정의 및 클러스터 선택
  • 작업 개수 : 2
    • 최소 정상 상태 백분율 : 100
    • 최대 백분율 : 200
  • 배포 유형 : 롤링 업데이트
    • 새 서비스 배포가 시작되면 ECS 서비스 스케줄러가 현재 실행 중인 태스크를 새 작업으로 대체하는 방식
  • 클러스터 VPC : vpc-dev-01 / vpc-prd-01
  • 서브넷 : private subnets
  • 로드밸런싱 : 생성해둔 alb 또는 nlb 선택하여 대상 그룹에 컨테이너 추가

 


✔️ Auto Scaling

  • (서비스 구성에서 함께 설정)
  • 최소 작업 개수 : 2 / 최대 작업 개수 : 5
  • 조정 정책 : Target Tracking Policy
  • ECS 서비스 측정치
    • ALBRequestCount(WEB)
      • WEB 단은 웹 브라우저(클라이언트)로부터 요청을 받아 처리하기 때문에 request count를 기준치로 설정
    • AverageCPUUtilization(WAS)
      • WAS 단은 여러 로직을 수행하는 동적인 콘텐츠를 처리하기 때문에 CPU 사용률을 기준치로 설정하였다.
  • Target Value : 70%
  • 확장 및 축소 휴지 기간 : 60초
    • 지속적이지만 과도하지 않은 확장을 하기 위함

 

profile
DCDI

0개의 댓글