What is ECS?
- ECS는 Elastic Container Service를 뜻하며 AWS에서 도커 컨테이너를 실행하게 해주는 서비스
- ECS를 사용하기 위해서는 인프라를 유지하고 프로비저닝해야 함
- EC2 인스턴스가 ECS 클러스터를 지원하며
Fargate의 경우 EC2 인스턴스를 유지하지 않아도 되는 서버리스 컨테이너 플랫폼이 존재 - AWS는 컨테이너를 시작하고 멈추는 역할을 하며,
ECS는 한 번 컨테이너를 갖추고 나면 애플리케이션 로드 밸런서와 통합해서 서비스와 테스크를 세상에 노출시킴 - EC2 인스턴스가 3개 있으며 각각 다른 유형의 컨테이너를 작동시키고 있을 때,
ECS 서비스는 새 도커 컨테이너를 시작하고 싶다면 도커 컨테이너의 요구사항(필요한 CPU, RAM의 용량)에 맞춰
도커 컨테이너를 어떤 EC2 인스턴스에 위치시킬지 찾은 후, 도커 컨테이너를 특정 EC2 인스턴스에 위치하게 함
Amazon EC2 Launch Type for ECS
- ECS에는 두 가지 실행 유형이 존재
1) Amazon EC2 실행 유형
2) Fargate 실행 유형 - Amazon EC2 실행 유형 : ECS 테스크들을 실행하기 위해서는 도커 컨테이너를 생성하고 EC2 인스턴스를 구동해야 함
리전, VPC, 두 개의 가용 영역과 함께 Amazon ECS 클러스터가 존재할 때
VPC는 하나인데 다중 AZ에 걸쳐 정의되어 있으며 오토 스케일링 그룹을 생성해서 EC2 인스턴스와 컨테이너 인스턴스들을 생성
컨테이너 인스턴스들은 m5.xlarge, t2.small로 서로 유형이 다르며 다른 가용 영역에서도 마찬가지임
이 컨테이너들은 모두 하나 또는 그 이상의 오토 스케일링 그룹에 속해 있으며 ECS 클러스터에 등록하길 원함
그러기 위해서는 ECS 에이전트를 컨테이너 인스턴스들에서 운영해야 하며 ECS를 위해 만들어진 AMI를 사용하면
ECS 에이전트는 사전에 구성되게 되어 ECS 에이전트가 모든 컨테이너 인스턴스들에서 구동되게 됨
ECS 에이전트로 인해 컨테이너 인스턴스들은 Amazon ECS 클러스터에 등록되게 되며 ECS 테스크들을 실행하는데 사용됨
만약 컨테이너 인스턴스가 크다면 ECS 테스크를 더 많이 실행할 수 있음
What is Fargate ?
- AWS에서 도커 컨테이너를 실행하게 하므로 인프라를 프로비저닝할 필요가 없으므로 EC2를 실행하거나 관리할 필요 없음
그러므로 서버를 관리하지 않아서 서버리스 오퍼링이라고 불리며 도커 컨테이너를 실행하기 더 간단하고 쉬움 - AWS는 CPU와 RAM이 얼마나 필요한지에 따라 컨테이너를 실행해 주며
AWS가 알아서 처리하고 숨기므로 백엔드의 어디에서 실행되는지 상관이 없음 - Fargate 클러스터에서 새 ECS 테스크가 실행되어야 한다면 Fargate 우리가 원하는 것을 실행해주며 EC2 인스턴스도 필요 없음
즉, 컨테이너가 그냥 실행됨
- Fargate는 ECS의 일부
Fargate Launch Type for ECS
- ECS에는 두 가지 실행 유형이 존재
1) Amazon EC2 실행 유형
2) Fargate 실행 유형 - Fargate 실행 유형 : ECS 테스크들을 실행하기 위해서는 도커 컨테이너를 생성하고 EC2 인스턴스를 구동해야 함
리전, VPC, 두 개의 가용 영역과 함께 Amazon ECS 클러스터가 존재할 때
Fargate 서비스가 테스크를 실행할 것이고 EC2 인스턴스를 미리 생성해 줄 필요가 없어서 훨씬 간단
Fargate 테스크에 액세스하려면 VPC에서 실행되는 ENI (Elastic Network Interface)가 필요하며
이는 테스크를 네트워크 IP에 바인드 해주어 테스크에 액세스할 수 있게 하며 테스크가 늘어나면 ENI도 더 생성됨
ENI는 별개의 IP이기 때문에 충분한 IP 주소들을 가지고 있는지와 VPC에 사설 IP가 충분한지 확인이 필요하며
테스크가 많을 경우 Fargate 클러스터를 가동할 만큼 충분히 큰 VPC가 있어야 함
IAM Roles for ECS Tasks
- ECS 테스크들은 AWS 서비스에서 연산을 실행할 수 있으므로 ECS 테스크에 IAM 역할이 필요
예) DynamoDB나 Amazon S3와 통신 - ECS를 위한 EC2 실행 유형이 있을 때의 역할 유형
- ECS에게 처음으로 부여될 역할 유형은 Amazon EC2 인스턴스에 연결되는 역할 (EC2 Instance Profie)
ECS 에이전트에 의해 사용되며 인스턴스를 ECS 클러스터에 등록해서 ECS 서비스에 API를 호출하기 위해 사용하며
Amazon CloudWatch Logs로 컨테이너 로그들을 보내고 Amazon ECR에서 도커 이미지를 풀하고 Secrets이 있다면
Secrets Manager 또는 EC2 인스턴스 프로파일을 사용해 파라미터 스토어로부터 가져옴 - ECS 테스크 역할
도커 컨테이너가 애플리케이션을 가동하고 테스크를 생성하면 테스크 역할을 연결하게 되며 각 테스크가 득정 역할을 가지게 됨
EC2 인스턴스에 가동한 두 번째 테스크가 있다면 그 테스크를 위한 새 ECS 테스크 역할을 생성
ECS 서비스가 여러 개 테스크를 구동할거라면 서비스마다 다른 ECS 테스크 역할을 주는게 필요하며 이는 테스크 정의에서 정의
테스크 역할일 ECS 테스크에 연결되면 Amazon S3 버킷에 액세스할 수 있고 DynamoDB와 통신하여 액세스할 수 있도록 허용
특정 AWS 서비스에 액세스해야 하는 테스크가 있는 ECS 서비스가 있다면 ECS 테크스 역할을 새로 생성하여
테스크의 유형에 따라 테스크 역할이 존재하도록 하여 보안이 세분화되게 함
ECS Data Volumes – EFS File Systems
- ECS는 EFS 파일 시스템과 통합되므로 서비스들이 데이터를 공유하거나 ECS 테스크들에 대한 데이터 볼륨으로 사용
- EC2 인스턴스가 있고 테스크가 여러 개라면 EFS 파일 시스템을 생성해서 파일 시스템에 ECS 테스크를 직접 마운트
EC2 인스턴스에도 작동하며, Fargate 테스크도 가능 - 테스크에 EFS 볼륨을 마운트하면 데이터를 공유할 수 있으며 EFS는 다중 가용 영역에 걸쳐 사용할 수 있기 때문에
데스크 역시 어느 가용 영역에서든 실행할 수 있어 EFS 볼륨에서도 동일한 데이터를 공유할 수 있음
- 만약 Fargate와 EFS를 함께 사용한다면 서버리스 테스크 관리와 데이터 저장소 EFS를 쓸 수 있어
서버를 관리하지 않고 완전한 서버리스 형태로 데이터를 저장하고 컴퓨팅을 실행할 수 있음 - ECS와 EFS를 함께 사용하는 사례로는 컨테이너를 위한 지속형 다중 AZ 공유 스토리지를 사용하는 것이 있음
'Cloud > AWS' 카테고리의 다른 글
[SAA] ECS 롤링 업데이트 (0) | 2022.04.12 |
---|---|
[SAA] ECS 스케일링 (0) | 2022.04.12 |
[SAA] Docker 소개 (0) | 2022.04.11 |
[SAA] Amazon MQ (0) | 2022.04.08 |
[SAA] SQS vs SNS vs Kinesis (0) | 2022.04.08 |