[AWS SAA] AWS Container - ECS, Fargate, ECR, EKS

junghan·2023년 3월 21일
0

AWS SAA

목록 보기
35/51
post-thumbnail

컨테이너

Docker

  • 앱 배포를 위한 소프트웨어 개발 플랫폼이고, 앱이 컨테이너에 패키징되면 어느 운영체제에서든 같은 방식으로 실행됩니다.
  • 앱이 실행되는 위치에 관계없이 동일하게 실행됩니다.
    • 모든 기계
    • 호환성 문제 없음
    • 예측 가능한 행동
    • 업무량 감소
    • 손쉬운 유지 관리 및 배포
    • 모든 언어, 모든 OS, 모든 기술에서 작동
    • 행위 특성도 예측 가능해서 작업을 덜어줍니다.
    • 유지 및 배포가 쉽습니다.
    • 언어, 운영체제, 기술에 상관 없이 실행이 가능합니다.
  • 사용 예 :
    • 마이크로서비스 아키텍처
    • 온프레미스에서 클라우드로 앱으로 리프트-앤-시프트

도커 이미지 OS

  • 도커 이미지들은 도커 레포지토리에 저장됩니다.

  • 도커 레포지토리

    • Docker Hub (https://hub.docker.com)
      • 유명한 퍼블릭 레포지토리
      • 많은 기술에 맞는 기본 이미지를 찾을 수 있습니다. (예: Ubuntu, MySQL, ...)
    • Amazon ECR

Docker vs Virtual Machines

https://velog.velcdn.com/images/chan9708/post/1fe3df71-afd4-4c5e-803c-3a8e0eb3a8d7/image.png

  • 도커는 가상화 기술의 일종이지만, 순전히 가상화 기술은 아닙니다.
  • 리소스가 호스트와 공유되어 한 서버에서 다수의 컨테이너를 공유할 수 있습니다.

도커가 실행되는 방식

https://velog.velcdn.com/images/chan9708/post/98f42824-9d12-4a1d-a4dc-aa8cd4c8e40b/image.png

  • Dockerfile을 작성해야 합니다.
    • 도커 이미지를 받은 뒤,
    • 도커 컨테이너를 구성하는 파일을 작성하여
    • 도커를 빌드하고 실행시킵니다.

AWS와 도커 컨테이너 관리

  • Amazon ECS:
    • 도커 관리를 위한 Amazon의 전용 플랫폼입니다.
  • Amazon EKS:
    • Kubernetes의 관리형 버전으로 오픈 소스 프로젝트입니다.
  • AWS Fargate:
    • Amazon의 서버리스 컨테이너 플랫폼으로 ECS와 EKS 둘 다 함께 작동할 수 있습니다.
  • Amazon ECR:
    • 컨테이너 이미지를 저장합니다.


ECS

ECS란?

Amazon Elastic Container Service(Amazon ECS)는 컨테이너화된 애플리케이션을 쉽게 배포, 관리, 스케일링할 수 있도록 도와주는 완전 관리형 컨테이너 오케스트레이션 서비스입니다.

ECS - EC2 type

https://velog.velcdn.com/images/chan9708/post/0923090d-80a8-468f-ab52-20654fc2a11f/image.png

  • AWS에서 컨테이너를 실행하면ECS 클러스터에 이른바 ECS 태스크를 실행하는 것입니다.
  • EC2 클러스터에는 EC2 시작 유형 바로 EC2 인스턴스입니다.
  • EC2 시작 유형으로 EC2 클러스터를 사용할 때는 인프라를 직접 프로비저닝하고 유지해야 해합니다.
  • 각 EC2 인스턴스는 ECS 클러스터에 등록하기 위해서 ECS 에이전트를 실행해야 합니다.
  • ECS 태스크를 수행하기 시작하면 AWS가 컨테이너를 시작하거나 멈출 겁니다.

ECS - Fargate type

https://velog.velcdn.com/images/chan9708/post/6f3a3b49-ad07-489f-99eb-635f5b0b7be2/image.png

  • AWS에 도커 컨테이너를 실행하는데,인프라를 프로비저닝하지 않아 관리할 EC2 인스턴스가 없습니다.
  • 서버리스
    • 서버를 관리하지 않아 서버리스라 부르는데 서버가 없는 건 아닙니다.
  • ECS 태스크를 정의하는 태스크 정의만 생성하면 ECS 태스크를 대신 실행합니다.
    • 새 도커 컨테이너를 실행하면 어디서 실행되는지 알리지 않고 그냥 실행됩니다.
  • 작업을 위해 백엔드에 EC2 인스턴스가 생성될 필요도 없어요.
  • 확장하려면 간단하게 태스크 수만 늘리면 돼요.
    • EC2 인스턴스를 관리할 필요가 없습니다.


ECS - IAM Roles(역할)

  • EC2 인스턴스 프로필(EC2 시작 유형만 해당):
    • ECS 에이전트에서 사용
    • ECS 서비스 ECR에 API 호출
    • 컨테이너 로그를 CloudWatch Logs로 전송
    • ECR에서 Docker 이미지 가져오기
    • Secrets Manager 또는 SSM Parameter Store에서 민감한 데이터 참조
  • ECSTask 역할(EC2와 fargate 둘 다 해당):
    • 각 작업이 특정 역할을 갖도록 허용
    • 실행하는 다양한 ECS 서비스에 대해 서로 다른 역할을 사용합니다.
    • 작업 역할은 작업 정의에 정의되어 있습니다

로드 밸런서 통합

  • 애플리케이션 로드 밸런서
    • 거의 모든 유스 케이스를 지원하고 작동합니다.
  • 네트워크 로드 밸런서
    • 처리량이 매우 많거나 높은 성능이 요구될 때만 권장합니다.
    • AWS Private Link 권장
  • ELB
    • 권장하지 않습니다.
    • Fargate와 연결할 수 없습니다.

데이터 볼륨 (EFS)

  • EC2 태스크에 파일 시스템을 마운트해서 데이터를 공유하려고 합니다.
  • EFS 파일 시스템을 사용하는 게 좋습니다.
  • EC2와 Fargate 시작 유형 모두 호환이 되며EC2 태스크에 파일 시스템을 직접 마운트할 수 있습니다.
  • 어느  AZ에 실행되는 태스크든 Amazon EFS에 연결되어 있다면 데이터를 공유할 수 있습니다.
  • Fargate + EFS = **서버리스
  • 사용 예:
    • EFS와 ECS를 함께 사용해서 다중 AZ가 공유하는 컨테이너의 영구 스토리지

ECS가 Lustre용 FSx를 지원하지 않는다는 것.
ECS 태스크의 파일 시스템으로 Amazon S3 버킷을 마운트할 수 없음.


ECS Service Auto Scaling

  • 원하는 ECS 작업 수를 자동으로 늘리거나 줄입니다.
  • AWS의 Auto Scaling이라는 서비스를 사용하면 세 개의 지표에 대해 확장이 가능합니다.
    - ECS 서비스의 CPU 사용률
    - 메모리 사용률
    - ALB 관련 지표인 타겟당 요청 수
    • 대상 추적: 특정 CloudWatch 지표의 목표 값을 기준으로 조정
      단계 조정: 지정된 CloudWatch 경보를 기준으로 조정
      예약된 조정: 지정된 날짜/시간을 기준으로 조정(예측 가능한 변경)
  • ECS ASG(task level) =/= EC2 ASG(EC2 instance level)
  • 백엔드에 EC2 인스턴스가 없다면Fargate를 사용하는 것이 서비스 오토 스케일링에 도움이 됩니다.
    • 서버리스이니까요.

EC2 시작 유형에서 ASG EC2 인스턴스

  • Auto Scaling Group
    • CPU 사용률에 따라 ASG를 확장
    • EC2 인스턴스를 추가
  • ECS 클러스터 용량 공급자(Capacity Provider) (추천)
    • 새 태스크를 실행할 용량이 부족하면 자동으로 ASG를 확장합니다.
    • 오토 스케일링 그룹과 함께 사용되며 RAM이나 CPU가 모자랄 때 EC2 인스턴스를 추가합니다.

ECS 아키텍쳐

ECS tasks invoked by Event Bridge

첫 번째는 EventBridge로 작동되는 ECS 태스크입니다. Amazon ECS 클러스터가 있고 이와 함께 Fargate와 S3 버킷이 있는 예시를 보겠습니다.

  1. 사용자가 S3 버킷에 객체를 업로드할 때,
  2. S3가 Amazon EventBridge와 통합되어 이벤트를 모두 보낼 수 있습니다.
  3. Amazon EventBridge에는 ECS 태스크를 실행하는 규칙을 만들 수 있는데,
  4. 그 규칙에 의해 ECS 태스크가 생성되고 관련 ECS 태스크 역할이 주어집니다.
  5. 태스크는 객체를 받아 처리하고 Amazon DynamoDB에 결과를 보내게 되죠.

이 동작이 될 수 있는 것은 ECS 태스크 역할이 결합된 덕분입니다. 이렇게 도커 컨테이너를 이용해 S3 버킷으로부터 이미지나 객체를 처리하는 서버리스 아키텍처를 완성할 수 있습니다.

ECS tasks invoked by Event Bridge Schedule

두 번째 아키텍처 예시는 EventBridge Schedule(일정)입니다
Fargate와 EventBridge를 사용하는 ECS 클러스터가 있다고 가정해보겠습니다.

  1. 한 시간마다 트리거되는 규칙의 일정을 만들면 Fargate에서 ECS 태스크를 실행할 겁니다.

  2. 즉 한 시간마다 Fargate 클러스터에 새 태스크가 생성됨에 따라, 태스크에는 자유롭게 Amazon S3에 접근 가능한 ECS 태스크 역할 등을 생성하게 되고,

  3. 태스크, 도커 컨테이너, 프로그램이 Amazon S3의 파일에 대해 한 시간마다 배치(Batch) 처리를 하게 됩니다.

이때 아키텍처는 서버리스로 동작합니다.

ECS – SQS Queue Example

마지막 예시는 SQS 대기열입니다. ECS의 서비스에 두 개의 태스크가 있고 SQS 대기열에 메시지를 전송했다고 가정하겠습니다.

  1. 서비스 자체적으로 SQS 대기열로부터 메시지를 가져와서(poll) 처리할 것입니다.

  2. 여기에 ECS 서비스 오토 스케일링을 활성화하면 SQS 대기열에 메시지가 많아질수록 ECS 서비스에 태스크가 많아집니다.



ECR

ECR이란?

Amazon Elastic Container Registry(Amazon ECR)는 안전하고 확장 가능하고 신뢰할 수 있는 AWS 관리형 컨테이너 이미지 레지스트리 서비스입니다.

  • AWS에 도커 이미지를 저장하고 관리하는 데 사용됩니다.
    • 계정에 한해 이미지를 비공개로 저장.
    • 퍼블릭 저장소를 사용해 Amazon ECR Public Gallery에 게시하는 방법.
  • ECR은 Amazon ECS와 완전히 통합되어 있고 이미지는 백그라운드에서 Amazon S3에 저장됩니다.
  • 액세스는 IAM으로부터 제어됩니다. (허용 에러 => 정책)
  • 이미지의 취약점 스캐닝, 버저닝 태그 및 수명 주기 확인을 지원합니다.


EKS

EKS란?

Amazon Elastic Kubernetes Service(Amazon EKS)는 자체 Kubernetes 컨트롤 플레인 또는 노드를 설치, 운영 및 유지 관리할 필요 없이 AWS의 Kubernetes 실행에 사용할 수 있는 관리형 서비스입니다.

https://velog.velcdn.com/images/chan9708/post/f635d924-8c1c-4ba4-bd1a-110faa33caa6/image.png

  • AWS에 관리형 Kubernetes 클러스터를 실행하는 방법입니다.
  • Kubernetes
    • 오픈 소스 시스템
    • 컨테이너화된 애플리케이션을 자동으로 배포스케일링 그리고 관리할 수 있습니다.
  • 컨테이너를 실행하려는 목적은 비슷하지만 API는 아주 다릅니다.
  • EKS는 두 가지 실행 모드를 지원:
    • EC2 인스턴스 등 작업자 노드(포드들)를 배치할 때 EC2 실행 모드
    • EKS 클러스터에 서버리스 컨테이너를 배치할 때 Fargate 모드
  • 사용 :

    회사가 이미 온프레미스에서 Kubernetes를 사용하거나 다른 클라우드에서 Kubernetes를 쓰는 경우혹은 그냥 Kubernetes API를 사용하려는 경우AWS를 통해 Kubernetes 클러스터를 관리하고자 할 때Amazon EKS를 사용할 수 있습니다.

  • Kubernetes는 Cloud-agnostic입니다.
    • Azure나 Google 클라우드 등 어떤 클라우드에서도 가능합니다.
    • 클라우드나 컨테이너 사이를 옮겨 다니려면 Amazon EKS를 사용하는 게 훨씬 편합니다.

Amazon EKS – 노드 유형

  • 관리 노드 그룹 (Managed Node Groups)
    • 노드(EC2 인스턴스) 생성 및 관리
    • 노드는 EKS에서 관리하는 ASG의 일부입니다.
    • 온디맨드 또는 스팟 인스턴스 지원
  • 자체 관리 노드 (Self-Managed Nodes)
    • 직접 생성하고 EKS 클러스터에 등록되고 ASG에서 관리하는 노드
    • 사전 구축된 AMI 사용 가능 - Amazon EKS 최적화 AMI
    • 온디맨드 또는 스팟 인스턴스 지원
  • AWS 파게이트 (AWS Fargate)
    • 유지보수가 필요하지 않습니다. 관리되는 노드 없음

Amazon EKS – 데이터 볼륨

  • EKS 클러스터에서 StorageClass 매니페스트를 지정해야 합니다.
  • CSI(Container Storage Interface) 호환 드라이버 활용
  • 지원 목록:
    • 아마존 EBS
    • Amazon EFS(Fargate와 함께 작동)
    • Amazon FSx for Lustre
    • NetApp ONTAP용 Amazon FSx


AWS 앱 실행기

  • 규모에 맞게 웹 애플리케이션 및 API를 쉽게 배포할 수 있는 완전 관리형 서비스
  • 인프라 경험이 필요하지 않음
  • 소스 코드 또는 컨테이너 이미지로 시작
  • 웹 앱 자동 빌드 및 배포
  • 자동 확장, 고가용성, 로드 밸런서, 암호화
  • VPC 액세스 지원
  • 데이터베이스, 캐시 및 메시지 대기열 서비스에 연결
  • 사용 사례: 웹 앱, API, 마이크로서비스, 신속한 생산 배포

AWS Certified Solutions Architect Associate 시험합격!

profile
42seoul, blockchain, web 3.0

0개의 댓글