AWS 서비스 파악하기 - ECS, EKS

ECS와 EKS를 비교 학습하고, ECS를 활용해본다.

서론

원티드 프리온보딩 4월 백엔드 챌린지에서
도커를 활용하여 클라우드 배포까지 해보는 특강을 진행했다.

최근에 개인적으로 도커를 많이 사용하면서
도커를 활용할 수 있는 다양한 정보를 접하고 싶었는데
때마침 특강을 진행해서 감사히 듣게 되었다.

이미 알고 있던 기본적인 도커 개념과 활용 방법을 확실히 정리할 수 있어서 좋았고,
가장 집중해서 본 부분은 클라우드 환경에서 ECS 또는 EKS를 사용하여
도커를 활용하는 부분이었다.

ECS와 EKS에 대한 내용을 정리하고, 나중에 잘 활용해보고자
블로그에 포스팅하게 되었다.


EKS (Elastic Kubernetes Service)

  • 관리형 쿠버네티스 서비스
  • 사용자는 쿠버네티스 API를 사용하여 EKS 클러스터를 관리할 수 있다.
  • 다양한 AWS 서비스와의 통합을 제공한다.
  • 쿠버네티스 기반의 컨테이너 오케스트레이션을 가능하게 하며,
    이미 쿠버네티스에 익숙한 사용자 또는
    복잡한 애플리케이션 아키텍처를 가진 사용자에게 적합한 옵션이다.
  • 복잡한 애플리케이션 아키텍처와 고도로 확장 가능한 환경을 구축할 수 있다.

ECS (Elastic Container Service)

  • 관리형 컨테이너 오케스트레이션 서비스
  • 도커 컨테이너를 실행하기 위한 기능 제공
  • 사용자는 컨테이너 이미지를 정의하고 클러스터에 배포, 관리, 스케일링 할 수 있다.
  • 컨테이너화된 애플리케이션을 운영하기에 적합한 환경을 제공한다.

쿠버네티스를 활용해야 하는 상황은 아니어서 주로 ECS 위주의 학습
기술 문서도 한글로 잘 되어 있다!


ECS 서비스 종류

  • 호스트 유형
    • EC2, Fargate, External
  • EC2
    • 용량공급자를 통해 EC2 Auto-Scaling Group을 연결
    • ECS에서 제공하는 관리형 지표(Capacity Provider Reservation)에 따라 EC2 용량 추가 및 제거 가능
    • 컨테이너 수의 증가 및 축소에 따라 EC2도 함께 증가 및 축소됨
    • EC2 요금만큼 과금
      • EC2 인스턴스는 계속 실행되어 있기 때문에 그만큼의 과금이 필요함
  • Fargate
    • 서버리스 컨테이너 오케스트레이션
    • EC2 처럼 배포하거나 관리할 필요 없음 (서비스만 운영)
    • 컨테이너 실행에 필요한 인프라 및 리소스 관리를 AWS가 대신 처리함
    • 시간당 vCPU, Storage 용량 비용 부과
    • 컨테이너를 쉽게 배포하고 스케일링할 수 있으며, 고가용성과 확장성을 제공함
  • External
    • 보안상의 이유로 AWS 인프라가 아닌 호스트에서 서비스가 동작하게 하고 싶을때 사용
    • 호스트 및 컨테이너 등의 실제 서비스는 물리적으로 AWS 밖에서 동작
    • AWS 콘솔에서 관리

ECS 구성

  • ECS Task Definition을 작성하고 그 Task 대로 컨테이너가 운영됨
    • JSon 양식
    • 컨테이너 이미지, 컨테이너 자원 할당, 포트 구성, 환경변수, 로그 구성 등 설정
  • (1) AWS ECR 컨테이너 레지스트리에 컨테이너 이미지 push
    • 도커 이미지를 private으로 쉽게 관리 가능
    • AWS 서비스와 연동이 더 간편함
  • (2) ECR에서 이미지를 관리하며 ECS Task Definition에 이미지 주입
  • (3) ECS 클러스터에 Task Definition 대로 적용
    • 특정 이미지를 가지고 어떤 작업을 할 지, 어느 정도의 리소스를 사용할 지 등

EKS와 비교

  • EKS는 트래픽이 없더라도 비용이 발생
  • ECS는 트래픽이 많아진다면 비용이 더 많이 발생할 수 있지만,
    토이 프로젝트 용도로는 좋다.
    • 트래픽이 없으면 비용이 발생하지 않음
  • Github Actions에 ecs 무중단 배포 템플릿이 제공됨
    • EKS는 공식 템플릿 없음

ECS 실습

ECS 배포 과정

  • ECS 클러스터 생성
    • 템플릿 : 네트워킹 전용
    • VPC 설정 확인
  • AWS ECR 레포지토리 생성 → 사용할 이미지 push (AWS CLI 사용)
    • “푸시 명령 보기” 설명 참고
    • AWS CLI 환경 설정
      • IAM 계정 생성
      • IAM 권한 설정
        • AmazonECS_FullAccess
        • AmazonEC2ContainerRegistryFullAccess
      • access key 및 secret access key 생성
    • 이미지 push
  • ELB (Elastic Load Balancing)
    • EC2 → 로드밸런서 → 로드밸런서 생성 → Application Load Balancer
    • VPC 지정
    • Target Group 임시 생성
    • Load Balancer 생성 완료
      • Listener 삭제
      • Target Group 삭제
  • Task Definition 정의
    • Fargate
    • 컨테이너 추가
      • ECS → Repository → 이미지 URI 확인
      • 메모리 제한
      • 포트 매핑
    • Task Definition 생성
  • Service 생성
    • Task Definition → Service 생성
    • 원하는 Task 선택 후 서비스 생성
    • VPC 및 서브넷 설정
    • 보안 그룹
      • Task Definition에서 설정한 컨테이너 포트와 동일하게 설정
    • 로드 밸런서 추가
    • Auto Scaling 설정

Task와 Service

  • Task
    • 하나의 작업
  • Service
    • 여러 개의 Task 관리
    • 다양한 설정 가능 (ELB, Auto Scaling 등)

Github Actions 자동 배포

  • Deploy to Amazon ECS workflow 제공
  • 세부 설정 수정
    • Settings → Actions secrets 세팅 (AWS access key 관련)
    • 도커 이미지 정보 및 Task 정보 세팅

References

Choi SeungEun Tech Blog
Built with Hugo
Theme Stack designed by Jimmy