ECS, ECR, EKS, Fargate

박상훈·2023년 1월 30일
0

Docker

도커는 컨테이너 기술로 앱 배포를 위한 소프트웨어 개발 플랫폼
운영체제, 언어에 상관없이 실행할 수 있음

Docker images stored

Image 는 운영체제, 데이터베이스, REST API 등 다양한 소프트웨어를 도커 컨테이너에서
실행 시키기 위해 압축한? 파일

  • Docker Hub
  • Amazon ECR
    • private, public 옵션 있음

Docker vs Virtual Machine

  • Virtual Machine
    • Infrastructure / Host OS / Hypervisor / Guest / App
    • EC2 의 원리로 각자 분리되어 있으며 리소스를 공유하지 않음
  • Docker
    • Infrastructure / Host OS / Docker Daemon / Container
    • 도커 데몬에서 실행되는 컨테이너로 네트워크, 리소스 공유 가능

ECS

AWS 에서 컨테이너 실행은 ECS 클러스터에 ECS 태스크 실행을 의미

EC2 Launch Type

도커 컨테이너는 미리 프로비저닝한 Amazon EC2 인스턴스에 위치

각 각의 EC2 인스턴스에서 ECS 에이전트 실행하여
ECS 에이전트가 EC2 인스턴스를 ECS 서비스, ECS 클러스에 등록
이 후에 ECS 태스크를 수행하기 시작하면 AWS 가 컨테이너를 시작/종료함
이는 새로운 도커 컨테이너가 생기면 EC2 인스턴스들중에 자동으로 생성/제거를 의미

Fargate Launch Type

인프라를 프로비저닝하지 않아 관리할 EC2 인스턴스가 없음
서버리스지만 서버가 없는 건 아니며 관리대상이 없음을 의미
ECS 클러스터가 있을 때 ECS 태스크를 정의만 생성하면 서버 CPU, RAM 에 따라
ECS 태스크를 AWS 가 대신 실행
확장 필요시 태스크 수를 늘리면 자동확장 가능

IAM Roles for ECS

EC2 Instance Profile

ECS 에이전트는 EC2 인스턴스 프로파일을 사용, 이를 이용하여 API 호출
API 호출은 ECS 서비스에서 CloudWatch 로그에 API 호출하여 컨테이너 로그를 전달
이 후 ECR 에서 도커 이미지를 EC2 인스턴스로 가져옴

ECS Task Role

태스크마다 각 각의 역할을 정할 수 있음
예시로 A TASK -> S3 를 참조, B TASK -> DynamoDB 참조

Load Balancer Integrations

  • ALB
    • 모든 사용자는 ALB -> EC2 instances -> ECS Task 에 연결 가능
  • NLB
    • 높은 성능, 높은 처리량을 원하는 경우에 추천
  • CLB (강의에는 ELB 로 적혀있는데 CLB 를 의미하는 것 같음)
    • 지원하지만 추천하지 않음
    • Fargate 의 경우 고급 기능을 지원하지 않음

Data Volumes

EFS

데이터 지속성, 태스크에 파일 시스템을 마운트해서 데이터를 공유하려는 경우
EFS 는 EC2 태스크에 파일 시스템을 직접 마운트 가능
어떤 AZ 에서든 공유 가능
Fargate, EFS 모두 서버리스이므로 AWS 에서 함께 사용하는 것을 권장

S3

S3 는 파일 시스템으로 마운트될 수 없음 !

ECS 실습

ECS 생성

1.ECS Dashboard -> Create cluster
2.name, Infrastructure(Fargate, EC2, 외부 인스턴스 중 선택)
3.EC2 선택시 ASG, OS, EC2 type 등 옵션 추가 설정 필요
4.Create

Task definitions 생성

1.Create new task definition
2.definition name 설정
3.Container name, Image URI(dockerhub 의 도커이미지), port 등 설정
4.Next
5.app 환경 설정으로 Fargate, EC2 로 인스턴스 생성 방법 설정
6.OS, CPU, Memory 등 설정
7.설정한 옵션 확인 후 Create

Security group 2개 생성

Inbound IPv4, IPv6 에 대해 모두 허용하는 보안 그룹 한개 생성
위 생성한 보안그룹에 대해 모든 트래픽을 허용하는 보안 그룹 추가 생성

ECS / Service Create(영상에서는 Deploy)

1.ECS Service(Tab) -> Create 클릭
2.Deployment configuration Service 클릭(Task: 배치 작업용)
3.family(Task definitions) 선택, service name 설정
4.Load balancing 생성
5.Network - Security group 은 위에서 생성한 보안 그룹 적용
6.Create

위 절차대로 모두 생성하면 생성 유형에 맞게 EC2 또는 Fargate 방식으로
인스턴스가 생성되고 그 안에 도커이미지를 띄어 애플리케이션이 실행됨
ECS Service 클릭하고 Update 버튼 클릭 후 Desired tasks 의 숫자를
변경하면 해당 숫자만큼 인스턴스가 추가되거나 줄어듬

ECS Service Auto Scaling

3개의 지표에 대해 오토 스케일링 작업 가능

  • AWS Application Auto Scaling 에서 사용할 수 있는 3가지 지표
    • CPU 사용률에 의한 확장
    • RAM(메모리) 사용률에 의한 확장
    • ALB 지표인 타겟당 요청 수 확장
  • Target Tracking(대상 추적)
    • 특정 타겟을 추적하여 스케일링
    • CloudWatch metric
  • Step Scaling
    • CloudWatch Alarm
  • Scheduled Scaling
    • ECS 서비스 확장을 설정하는 예약 스케일링

EC2 type 을 사용하는 경우 ECS Cluster Capacity Provider 를 사용하여
자동으로 스케일링 받는 것을 권장

  • ECS Cluster Capacity Provider
    • 별다른 지표 없이 사용량이 증가하면 자동으로 태스크를 스케일링

Event Bridge

Client / S3 Bucket / Amazon EventBridge / Task / Amazon DynamoDB

클라이언트가 S3 Bucket 에 객체 저장 요청할 때
Amazon EventBridge 가 해당 이벤트를 확인하고 특정 작업을 Task 에 요청
Task 는 S3 에 저장된 객체를 활용하여 DB 에 인서트하거나 특정 작업 가능

Event Bridge Schedule

Amazon EventBridge 에서 매 1시간마다 Task 에 작업 요청
Task 에서 특정 작업 진행 후 S3 에 객체를 저장하는 구성 가능

SQS

SQS Queue 에 ECS 서비스를 연결하면 Task 는 Queue 에 있는 메시지 확인 및 처리
ECS Service Auto Scaling ECS 서비스에 설정하면
SQS Queue 대기열에 메시지가 많아지는 경우 Task 를 자동으로 스케일링 가능

ECR

  • Elastic Container Registry
  • AWS 에서 도커 이미지 관리
    • 계정에 한해 이미지를 비공개 저장, 여러 계정으로 설정 가능
    • ECR Public Gallery(퍼블릭 저장소) 에 게시
  • ECR 이미지는 백그라운드에서 Amazon S3 에 저장됨
  • ECS Cluster 에 IAM Role 적용하여 ECR 에서 도커 이미지를 가져올 수 있음
  • ECR 에 대한 모든 접근을 IAM 이 보호
  • 이미지 취약점 스캐닝, 버저닝, 태그, 수명 주기 확인 지원

EKS

  • Amazon Elastic Kubernetes Service
  • AWS 컨테이너를 실행하는 또 다른 방법
  • Docker 컨테이너에 대해서 자동 배포, 확장, 관리 지원
  • 실행 타입
    • EC2 는 EC2 인스턴스와 동일하게 배포
    • Fargate 는 EKS 클러스터에 서버리스로 컨테이너 배포
  • 보통 온프레미스, 클라우드에서 쿠버네티스를 이미 사용중인 경우
  • 클라우드 agnostic 으로 Azure, Google Cloud 등 모든 클라우드에서 지원
  • EKS 를 외부에 노출하려면 EKS Private Service LB 또는 ELB 사용

Node Types

  • Managed Node Groups
    • AWS 에서 노드(EC2 인스턴스) 생성 및 관리
    • 노드는 EKS 서비스에서 관리되는 ASG 의 일부
    • 온디맨드, 스팟 인스턴스 지원
  • Self-Managed Nodes
    • 사용자 지정 사항이 많거나 제어 대상이 많은 경우 직접 노드 생성
    • 노드를 EKS 에 별도로 등록하고 ASG 일부로 관리 필요
    • AMI 를 사용하여 빌딩 시간 절약 가능
    • 온디맨드, 스팟 인스턴스 지원
  • AWS Fargate
    • 노드를 원하지 않은 경우
    • 유지 관리 필요 없음, 노드 관리 불필요

Data Volumes

EKS 클러스터에 스토리지 클래스 manifast 지정 필요함
CSI(Container Storage Interface) 규격 드라이버 활용

  • 지원하는 볼륨 서비스
    • Amazon EBS
    • Amazon EFS (Fargate 전용)
    • Amazon FSx for Lustre
    • Amazon FSx for NetApp ONTAP

실습

쿠버네티스를 별도로 공부할 때 어떤식으로 설정하는지만 영상 재참조 필요
강의 영상에서 EKS 는 너무 짧고 내용이 얕음

App Runner

배포를 하기 위한 인프라, 컨테이너 등을 몰라도 빠른 배포 가능
빠른 배포를 요구하는 웹 애플리케이션, API, 마이크로서비스에 사용

1.소스 코드, 도커 이미지로 구성(CPU, Memory, 오토스케일링, 상태 확인 등) 설정
2.이 후 작업을 App Runner 서비스에서 빌드 및 배포
3.배포에는 컨테이너가 생성되고 컨테이너에 배포를 의미
4.컨테이너에 앱이 배포된 후 URL 로 애플리케이션에 접근 가능

profile
엔지니어

0개의 댓글