On this page
6. AWS: ECS
Amazon ECS는 AWS에서 제공하는 컨테이너 관리 서비스입니다. 쿠버네티스와 비슷하지만, 조금 더 쉽게 사용할 수 있어요.
이번 시간에는 스꾸딩 인프라 팀의 꽃이라고 할 수 있는 ECS에 대해 알아보겠습니다.
공부할 내용 📚
1. ELB
ELB는 AWS의 Load Balancer 서비스로, EC2와 함께 AWS에서 많이 사용됩니다. ELB로 요청을 분산시키고, EC2 개수를 늘리면서 서버의 확장성을 높일 수 있습니다.
- Load Balancer의 주요 기능을 알아봐요. (Load Balancing, High Availability, Fault Tolerance)
- ELB의 종류를 알아봐요. (Application Load Balancer, Network Load Balancer, Classic Load Balancer)
- ELB의 요금을 알아봐요.
- ELB의 주요 설정을 알아봐요. (Listener, Target Group, Health Check)
참고 자료
- “AWS ELB 쉽게 이해하기 #1”: ELB의 기본 개념을 정리해놓은 글입니다.
- Elastic Load Balancing 요금: ELB의 요금을 확인할 수 있습니다.
2. Amazon ECR
Amazon ECR은 AWS에서 제공하는 Docker Registry 서비스로, Docker 이미지를 저장하고, 관리할 수 있습니다. AWS에서 컨테이너를 사용할 때는 ECR을 사용하는 것이 일반적이예요.
- ECR이 어떤 서비스인지, 어떤 기능을 제공하는지 알아봐요.
- 다른 저장소 대신 ECR을 사용하는 이유를 알아봐요.
참고 자료
- “ECR이란?”: ECR의 기본 개념을 정리해놓은 글입니다.
3. Amazon ECS
Amazon ECS는 AWS에서 제공하는 컨테이너 오케스트레이션 서비스로, 컨테이너를 쉽게 관리할 수 있도록 도와줍니다.
- ECS의 기본 개념을 알아봐요.
- ECS의 용어들과 구성을 알아봐요. (Cluster, Task Definition, Task, Service)
- ECS의 실행 모델을 알아봐요. (Fargate, EC2)
- ECS의 요금을 알아봐요.
참고 자료
- “AWS ECS 살펴보기”: ECS의 기본 개념을 정리해놓은 글입니다.
- “ECS vs EKS, EC2 vs Fargate 배포 서비스 비교해보기”: ECS의 EC2와 Fargate를 비교해봅니다.
- “AWS ECS 요금”: ECS의 요금을 확인할 수 있습니다.
프로젝트 실습 🎈
이번 주에는 Node.js 컨테이너를 ECS로 구성해봐요. 아래 그림처럼 지난 주에 EC2로 ALB와 EC2로 구성한 부분을 ECS로 대체할 거예요.
flowchart LR subgraph AWS subgraph ECS ALB --> Node.js end style ECS fill:#ffaa90 CloudFront -- /api/* --> ALB CloudFront -- /* --> S3 end Client -- http://[domain-name] --> CloudFront
AWS CLI를 설치하세요.
- 공식 가이드를 참고해 설치하세요.
- 설치가 완료되면,
aws --version
명령어를 실행해 설치가 잘 되었는지 확인하세요. - Management Console에서 IAM User를 생성하세요. (
AmazonEC2ContainerRegistryFullAccess
권한 필요) - 생성된 IAM User의 “Security Credentials” 탭에서 access key를 생성하세요. (CLI 모드)
- 터미널에서
aws configure
명령어를 실행해 access key를 등록하세요.
Amazon ECR에 Node.js 이미지를 저장해요.
- ECR Repository를 생성하세요. (Private 권장!)
- 로컬에서 Node.js 이미지를 만드세요. (
docker build -t [repository-url] .
) - 아래 명령어로 ECR에 로그인하세요. ([region], [aws_account_id]는 수정해주세요!)
aws ecr get-login-password --region [region] | docker login --username AWS --password-stdin [aws_account_id].dkr.ecr.[region].amazonaws.com
- 이미지를 ECR에 업로드하세요. (
docker push [repository-url]
) - ECR에서 이미지를 확인하세요.
M1/M2 MacBook에서 이미지를 build하면 ECS를 x86에서 실행했을 때 오류가 나요. ECS에서 x86 환경을 사용하려면 Docker build도 x86 환경에서 해주세요!
Amazon ECS Cluster를 생성하세요.
EC2 Launch Type과 Fargate Launch Type 두 가지 방법 중 하나로 ECS Cluster를 생성해보세요.
Fargate는 Free Tier에 포함되지 않아 과금이 있을 수 있어요!
과금을 원치 않는 분들은 EC2로 실습해주세요.
과금을 원치 않는 분들은 EC2로 실습해주세요.
EC2 Launch Type
- ECS Cluster를 생성하세요.
- Infrastructure로 EC2를 선택하세요.
- Desired capacity의 최솟값을 1로 설정하세요.
- 네트워크 설정에서 “Auto-assign public IP"을 켜주세요.
- Task Definition을 생성하세요.
- Launch type은 EC2로 설정하세요.
- Task size는 EC2 사양보다 작게 설정하세요. 메모리가 부족하면 ECS가 Task를 실행하지 못할 수 있어요.
- Container로 ECR 이미지를 등록하세요.
- Container Port mapping으로 3000 포트를 열어주세요.
- ECS Cluster에 Service를 생성하세요.
- Launch type은 EC2로 설정하세요.
- Application type은 Service로 설정하세요.
- Load Balancer를 할당하세요.
- 생성에 시간이 걸릴 수 있어요. (약 5분)
- Service의 Networking 탭의 DNS Name을 확인하세요. (Security Group 확인!)
- CloudFront의 Origin에 Load Balancer의 DNS Name을 등록하세요.
실행이 제대로 되지 않는 경우는 Service의 Events를 확인하면 도움이 돼요.
Fargate Launch Type
TODO