컨테이너 오케스트레이션은 다수의 컨테이너를 자동으로 배포, 관리, 스케일링(확장 및 축소)하는 것을 말한다. 컨테이너 몇 개 정도는 직접 하나씩 띄우고 내릴 수 있지만 컨테이너가 수십, 수백 개로 늘어나면 사람이 일일이 관리하기 어려워지는데 이걸 대신 자동으로 해주는 게 오케스트레이션 도구(컨트롤러)의 역할이다.
개발자 ──명령──▶ 컨트롤러(ECS/EKS) ──자동 배포·관리──▶ 컨테이너 1, 2, 3 ... N
ECS(Amazon Elastic Container Service)는 AWS의 관리형 컨테이너 오케스트레이션 서비스다. 인프라 관리 부담 없이 컨테이너화된 애플리케이션을 배포/관리/확장할 수 있고 IAM/CloudWatch/로드밸런서 같은 AWS 서비스들과 긴밀하게 통합돼 있다.
ECS는 런치 타입을 두 가지로 지원한다.
이 구조를 보면서 EKS의 Pod/Deployment 개념과 자연스레 연관지어 Task Definition은 Pod 스펙, Task는 실제 실행 중인 Pod, Service는 Deployment와 각각 비슷한 역할을 한다고 이해했다. 결국 이름과 세부 구현은 다르지만 실행할 스펙을 정의하고 → 그 스펙대로 실제 컨테이너를 띄우고 → 원하는 개수를 계속 유지시켜주는 3단 구조 자체는 ECS든 EKS든 똑같았다.
ECS 작업에는 IAM 역할이 두 가지 필요하다.
'컨테이너를 실행시키는 데 필요한 권한'과 '컨테이너 안의 애플리케이션이 실행 중에 필요한 권한'이 서로 다른 시점, 다른 주체의 권한이라서 분리된 것이라고 이해하기.
ECS에서 작업을 실행할 때는 네트워크 모드를 선택해야 하는데 크게 두 가지로 나뉜다.
[awsvpc 모드]
Task 1 ──ENI 1(172.31.16.1)──▶ Container (독립된 IP, 독립된 보안 그룹)
Task 2 ──ENI 2(172.31.16.2)──▶ Container (독립된 IP, 독립된 보안 그룹)
[브릿지 모드]
┌─ Container (Port 3000)
EC2 ENI 1 ────┤ (단일 ENI를 여러 컨테이너가 공유, 보안 그룹은 인스턴스 단위)
└─ Container (Port 3000)
awsvpc 모드는 각 작업(Task)마다 ENI를 따로 생성해서 독립된 프라이빗 IP를 할당하기 때문에 Task 단위로 보안 그룹을 따로 적용할 수 있고 IP 충돌 걱정도 없다. 반면 브릿지 모드는 하나의 EC2 ENI를 여러 컨테이너가 공유하는 방식이라 컨테이너별로 보안 그룹을 따로 줄 수 없고 호스트 포트를 매핑할 때도 포트 충돌을 신경 써야 한다.
ECS가 각 Task에 별도의 ENI를 붙여주는 awsvpc 모드를 보면서 이 방식은 Task 하나당 ENI 하나가 필요해서 인스턴스당 실행 가능한 Task 수가 ENI 개수 제한에 영향을 받을 수 있겠다는 생각도 들었다.
실제 배포 흐름은 이랬다.
ECR 이미지 준비 → Task Definition 작성(작업 정의) → ECS Task/Service로 배포 → 모니터링
(EC2 or Fargate 자원 위에서 실행)
컨테이너 이미지를 ECR에 올려두고 그 이미지를 어떻게 실행할지 Task Definition으로 정의한 다음, 이를 실제 Task나 Service로 배포하고, 이후엔 CloudWatch 같은 서비스로 계속 모니터링하는 흐름이다.
📍 출처: 패스트캠퍼스 강의 - 실전 DevOps의 모든 것