AWS 컨테이너: ECS, Fargate, EKS, ECR

Seoyoung Yoon·2024년 6월 23일
0

aws

목록 보기
2/5
post-thumbnail

Docker

애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼

ECS(Elastic Container Service)

도커 관리를 위한 Amazon 플랫폼
aws에서 도커컨테이너 실행방법 = ECS클러스터에서 ECS 태스크 실행

런치타입, 실행방식

  1. EC2 Lanch Type : ecs는 태스크에 따라 EC2 인스턴스들에 컨테이너를 배포하고 실행함
    태스크로 빠르게 확장조절이 가능
    사용자가 EC2 인스턴스를 프로비저닝하고 관리
  2. fargate Lanch Type : 서버리스 컴퓨팅 모델로, 사용자가 인프라를 프로비저닝하거나 관리할 필요 없이 컨테이너를 실행할 수 있음. AWS가 필요한 모든 인프라를 자동으로 관리.

IAM 역할정의

AWS 리소스에 대한 액세스를 안전하게 제어 가능

  1. EC2 인스턴스 프로필(EC2 Lanch Type에서만 가능)
    ECS는 EC2 인스턴스 프로필을 이용해 ECS 서비스에 API 호출
    ECS클러스터에서 EC2 인스턴스가 실행될때, 인스턴스들이 AWS API 호출을 할 수있도록 권한을 부여

    사용예시)

    1. ECS 에이전트가 ECS 서비스에 API 호출을 수행하여 클러스터 상태를 업데이트
    2. EC2 인스턴스에서 실행중인 컨테이너가 CloudWatch Logs에 로그를 전송
    3. ECS 에이전트가 ECR(AWS 도커 이미지 저장소)에서 Docker 이미지를 풀링.

    ECS 에이전트는 Secrets Manager 또는 SSM Parameter Store에서 민감한 데이터를 참조하기 위해 API 호출을 수행

  2. ECS Task Role
    ECS 태스크 내에서 실행되는 컨테이너가 AWS 리소스에 액세스 할 수있도록 권한을 부여
    각각의 태스크 마다 고유 역할을 갖는다.
    ECS 작업 자체에서 사용되는 IAM역할로, 컨테이너가 S3, SQS등과 같은 다른 AWS 서비스를 호출하려고 할때 사용한다.

    사용예시)

    1. S3 버킷에 데이터를 쓰기 / 읽기
    2. DynamoDB 테이블에 데이터 쓰기 / 읽기
    3. 다른 AWS 서비스와 통합

ECS IAM 역할

로드밸런서 통합

ALB 로 사용, 많은 경우 사용됨
NLE(Network Load Balancer) 는 처치량이 많고 고성능이 필요할때 권장됨, 또는 AWS Private Link와 함께 사용하는 경우
CLB 권장하지 않음

데이터 지속성, EFS

ECS에서 데이터를 지속적으로 저장하기 위해서는 데이터 볼륨이 필요하다.

EFS는 네트워크 파일 시스템으로 EC2, Fargate와 호환되며, ECS 태스크에 파일 시스템을 마운트하여 데이터를 공유하는데 사용 할 수 있다. → ECS 클러스터에서 실행되는 모든 도커 컨테이너는 동일한 파일 시스템에 접근 할 수있다.
ECS에서의 EFS 활용

EFS는 여러 가용영역(AZ)에 걸쳐서 데이터를 공유할 수 있기때문에 EFS에 연결된 ECS 태스크는 모든 AZ에서 데이터를 공유할수 있으며 통신할수있다.

EFS는 서버리스 서비스이므로 서버를 관리할필요없고 사용량에 따라 비용을 지불하면 된다.

: EFS를 이용해 다중AZ 공유 스토리지를 공유 할 수 있다.

ECS 클러스터에서 애플리케이션을 실행하기로 하였으나 도커 컨테이너가 웹사이트 파일, 이미지, 비디오 등과 같은 동일한 웹사이트 콘텐츠에 액세스 하기를 원하는 경우 사용한다.

Auto Scaling

AWS Application Auto Scaling 은 자동으로 태스크의 수를 증가 감소시킨다.

CPU 사용률, 메모리 사용률, ALB 타겟당 요청수에 따라 조절됨

ECS Service Auto Scaling 자동 스타일링 (tack level) ≠ EC2 Auto Scaling (EC2 instance Level)

  • ASG(Auto Scaling Group Scaling) CPU 사용량에 따라 ASG를 조절하고, CPU 폭등 후 시간이 지나면 EC2 인스턴스를 확장
  • ECS 클러스터 Capacity Provider라는 고급 기능을 사용하여 ECS 클러스터의 용량을 자동으로 확장 CPU, RAM 부족 시 EC2 인스턴스를 자동으로 추가함 EC2 런치타입을 사용할 경우 ECS 클러스터 capacity Provider를 활용하는것이 좋음

EKS(Elastic Kubernetes Service)

쿠버네티스 관리 플랫폼

쿠버네티스 : 컨테이너화된 도커 애플리케이션으로 오픈소스이며, 자동배포, 확장 및 관리가 가능하다.

ECS의 대안이 될 수 있으나, API 가 다르다. 쿠버네티스는 오픈소스이며 표준을 제공한다.

2가지 모드

  1. 작업자모드로의 EC2

    EC2를 사용하여 ECS 클러스터에서 컨테이너를 실행하는 방식

  2. 서버리스 컨테이너로 Fargate

    서버리스모델로, 사용자가 인프라를 관리할 필요없이 컨테이너를 실행, 모든 인프라는 AWS에서 관리한다.

AWS에서 쿠버네티스를 관리하고 싶을 때(이미 온프레미스나 클라우드에서 쿠버네티스를 사용하고 있는 경우)

쿠버네티스는 cloud-anostic 하다. → 클라우드 서비스에 종속되지 않고 다양한 클라우드 환경에서 사용가능 AWS, Google, AZURE 등과 같은 곳에서 사용가능

⭐ Pods는 아마존 쿠버네티스와 관련이 있음

EKS의 노드타입

  1. Managed Node Groups(관리형 노드 그룹)

    EKS에서 관리하는 EC2 인스턴스 그룹

  2. Self-managed Nodes(자가 관리 노드)

    사용자가 직접관리하는 EC2 인스턴스, 사용자가 EC2 인스턴스를 직접 프로비저닝하고 쿠버네티스 클러스터에 연결

    커스터마이징이 필요할때 사용한다.

  3. Fargate

    서버리스 컴퓨팅 엔진으로, EC2 인스턴스를 프로비저닝하거나 관리할 필요없이 컨테이너를 실행

    EC2 직접관리 하지 않고도 쿠버네티스 pod를 실행할 수 있음

데이터 볼륨

StorageClass 매니페스트를 지정

컨테이너 스토리지 인터페이스(CSI) 호환 드라이버를 활용한다.

EKS는 EBS,EFS, FSx for Lustre, FSx for NetApp ONTAP을 활용해 컨테이너가 사용하는 데이터를 저장하고 공유한다.

AWS Fargate

Amazon 자체의 서버리스 컨테이너 플랫폼

ECS, EKS와 작동함

인프라를 프로비저닝 할수없기때문에 관리할 ec2가 없음

단지 작동할 태스크를 지정해주면 CPU/RMA에 따라서 ECS 태스크를 실행하게 된다.

크기를 확장하고 싶다면 단지 태스크의 수를 늘려주면된다. (EC2 확장이 필요없음)

⭐ 시험에서 서버리스인 경우 Fargate로 사용

사용예시) AWS로 마이그레이션하려는 온프레미스 호스팅 도커 기반 애플리케이션이 여러개 있는데 인프라를 프로비저닝하거나 관리하고싶지는 않은 경우! 파게이트를 이용한다. ECS를 사용하면 인프라를 운영 관리해야함

Amazon ECR

Elastic Container Registry

aws에 있는 도커 이미지를 저장하고 관리함

비공개 / 공개 옵션

  • ECR, ECS 동작방식

ECR에서 도커 이미지를 가져와 ECS 클러스터안에 있는 EC2 인스턴스에서 실행

AppRunner

자동확장, 로드밸런싱 수행

데이터 베이스 연결, 캐시, 메시지 대기열 연결

AWS를 처음 이용하는 개발자에서 간편하고 유용

profile
Believe in yourself 🍀

0개의 댓글