컨테이너
Docker
- 앱 배포를 위한 소프트웨어 개발 플랫폼이고, 앱이 컨테이너에 패키징되면 어느 운영체제에서든 같은 방식으로 실행됩니다.
- 앱이 실행되는 위치에 관계없이 동일하게 실행됩니다.
- 모든 기계
- 호환성 문제 없음
- 예측 가능한 행동
- 업무량 감소
- 손쉬운 유지 관리 및 배포
- 모든 언어, 모든 OS, 모든 기술에서 작동
- 행위 특성도 예측 가능해서 작업을 덜어줍니다.
- 유지 및 배포가 쉽습니다.
- 언어, 운영체제, 기술에 상관 없이 실행이 가능합니다.
- 사용 예 :
- 마이크로서비스 아키텍처
- 온프레미스에서 클라우드로 앱으로 리프트-앤-시프트
도커 이미지 OS
Docker vs Virtual Machines
- 도커는 가상화 기술의 일종이지만, 순전히 가상화 기술은 아닙니다.
- 리소스가 호스트와 공유되어 한 서버에서 다수의 컨테이너를 공유할 수 있습니다.
도커가 실행되는 방식
- 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
- AWS에서 컨테이너를 실행하면
ECS 클러스터에 이른바 ECS 태스크를 실행하는 것입니다.
- EC2 클러스터에는 EC2 시작 유형
바로 EC2 인스턴스
입니다.
- EC2 시작 유형으로 EC2 클러스터를 사용할 때는 인프라를 직접 프로비저닝하고 유지해야 해합니다.
- 각 EC2 인스턴스는
ECS 클러스터에 등록
하기 위해서 ECS 에이전트를 실행해야 합니다.
- ECS 태스크를 수행하기 시작하면 AWS가 컨테이너를 시작하거나 멈출 겁니다.
ECS - Fargate type
- AWS에 도커 컨테이너를 실행하는데,인프라를 프로비저닝하지 않아 관리할 EC2 인스턴스가 없습니다.
서버리스
- 서버를 관리하지 않아 서버리스라 부르는데 서버가 없는 건 아닙니다.
- ECS 태스크를 정의하는 태스크 정의만 생성하면 ECS 태스크를 대신 실행합니다.
- 새 도커 컨테이너를 실행하면 어디서 실행되는지 알리지 않고 그냥 실행됩니다.
- 작업을 위해 백엔드에 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 버킷이 있는 예시를 보겠습니다.
- 사용자가 S3 버킷에 객체를 업로드할 때,
- S3가 Amazon EventBridge와 통합되어 이벤트를 모두 보낼 수 있습니다.
- Amazon EventBridge에는 ECS 태스크를 실행하는 규칙을 만들 수 있는데,
- 그 규칙에 의해 ECS 태스크가 생성되고 관련 ECS 태스크 역할이 주어집니다.
- 태스크는 객체를 받아 처리하고 Amazon DynamoDB에 결과를 보내게 되죠.
이 동작이 될 수 있는 것은 ECS 태스크 역할이 결합된 덕분입니다. 이렇게 도커 컨테이너를 이용해 S3 버킷으로부터 이미지나 객체를 처리하는 서버리스 아키텍처를 완성할 수 있습니다.
ECS tasks invoked by Event Bridge Schedule
두 번째 아키텍처 예시는 EventBridge Schedule(일정)입니다
Fargate와 EventBridge를 사용하는 ECS 클러스터가 있다고 가정해보겠습니다.
-
한 시간마다 트리거되는 규칙의 일정을 만들면 Fargate에서 ECS 태스크를 실행할 겁니다.
-
즉 한 시간마다 Fargate 클러스터에 새 태스크가 생성됨에 따라, 태스크에는 자유롭게 Amazon S3에 접근 가능한 ECS 태스크 역할 등을 생성하게 되고,
-
태스크, 도커 컨테이너, 프로그램이 Amazon S3의 파일에 대해 한 시간마다 배치(Batch) 처리를 하게 됩니다.
이때 아키텍처는 서버리스로 동작합니다.
ECS – SQS Queue Example
마지막 예시는 SQS 대기열입니다. ECS의 서비스에 두 개의 태스크가 있고 SQS 대기열에 메시지를 전송했다고 가정하겠습니다.
-
서비스 자체적으로 SQS 대기열로부터 메시지를 가져와서(poll) 처리할 것입니다.
-
여기에 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 실행에 사용할 수 있는 관리형 서비스입니다.
- 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 시험합격!