ECS 클러스터, 작업 정의 및 서비스
컨테이너 이미지와 리소스 제한을 포함한 ECS 작업 정의를 지정하고 클러스터에 등록한 다음, 원하는 수를 유지하는 서비스를 생성합니다.
ECS 클러스터, 작업 정의 및 서비스은(는) CoddyKit의 무료 Cloud & IT Cert Prep 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cloud & IT Cert Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cloud & IT Cert Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
AWS에서 컨테이너를 사용하는 이유
컨테이너는 애플리케이션과 모든 종속 항목을 여러 환경에서 일관되게 실행되는 이식 가능하고 격리된 단위로 패키징합니다. Amazon ECS(Elastic Container Service)는 제어 플레인을 직접 관리하지 않고도 Docker 컨테이너를 실행하는 AWS의 완전 관리형 컨테이너 오케스트레이션 서비스입니다. ECS는 AWS 서비스(IAM, ALB, CloudWatch, Secrets Manager)와 긴밀하게 통합되며, Kubernetes의 복잡성 없이 AWS에서 컨테이너를 실행하는 데 권장되는 방법입니다.
ECS 클러스터: 그룹화 단위
ECS 클러스터는 컨테이너가 실행되는 컴퓨팅 리소스의 논리적 그룹입니다. 클러스터에는 EC2 인스턴스(EC2 시작 유형), Fargate 용량(Fargate 시작 유형) 또는 둘 다 포함될 수 있습니다. 하나의 클러스터에서 여러 서비스와 독립 실행형 작업을 실행할 수 있습니다. 클러스터는 리전 단위이지만 여러 가용 영역에 걸쳐 있습니다. 일반적으로 환경(dev/staging/prod)별로 하나의 클러스터를 구성하고, 각 클러스터 안에서 서로 다른 마이크로서비스를 위한 여러 서비스를 실행합니다.
aws ecs create-cluster \
--cluster-name 'MyAppCluster' \
--capacity-providers FARGATE FARGATE_SPOT \
--default-capacity-provider-strategy \
capacityProvider=FARGATE,weight=1,base=1작업 정의: 청사진
작업 정의는 ECS에서 컨테이너를 실행하기 위한 청사진으로, Docker Compose 파일과 유사합니다. 작업 정의에는 컨테이너 이미지(ECR URI 또는 Docker Hub), CPU 및 메모리 할당량, 포트 매핑, 환경 변수, 로깅 구성, 볼륨, IAM 작업 역할을 지정합니다. 작업 정의에는 버전이 지정되며 각 리비전은 변경할 수 없습니다. 사이드카 패턴(주요 애플리케이션 + 로그 전달기 + 모니터링 에이전트)을 위해 작업 하나에 여러 컨테이너를 정의할 수 있습니다.
{
'family': 'myapp-task',
'networkMode': 'awsvpc',
'requiresCompatibilities': ['FARGATE'],
'cpu': '512',
'memory': '1024',
'executionRoleArn': 'arn:aws:iam::123456789012:role/ecsTaskExecutionRole',
'taskRoleArn': 'arn:aws:iam::123456789012:role/myAppTaskRole',
'containerDefinitions': [{
'name': 'myapp',
'image': '123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp:latest',
'portMappings': [{'containerPort': 8080}]
}]
}작업 역할과 실행 역할 비교
ECS 작업은 서로 다른 목적을 가진 두 개의 별도 IAM 역할을 사용합니다. 작업 실행 역할은 ECS 에이전트가 ECR에서 컨테이너 이미지를 가져오고, 로그를 CloudWatch로 전송하며, 작업 시작 중 Secrets Manager 또는 Parameter Store에서 보안 암호를 가져오는 데 사용합니다. 작업 역할은 컨테이너 내부에서 실행되는 애플리케이션 코드가 AWS 서비스(S3, DynamoDB, SQS)를 호출하는 데 사용합니다. 각 역할에 최소 권한을 별도로 할당하고, 애플리케이션에 필요하지 않은 권한을 실행 역할에 부여하지 마십시오.
장시간 실행되는 워크로드를 위한 ECS 서비스
ECS 서비스는 동시에 실행되는 작업 인스턴스의 지정된 수(원하는 개수)를 유지합니다. 작업이 실패하거나 중지되면 서비스 스케줄러가 자동으로 대체 작업을 시작합니다. 서비스는 Elastic Load Balancing과 통합되어 트래픽을 분산하고 롤링 배포와 블루/그린 배포를 지원합니다. 웹 서버, API 서버, 백그라운드 작업자와 같은 장시간 실행되는 프로세스에는 서비스를 사용하십시오. 일회성 작업에는 대신 독립 실행형 작업을 실행하십시오.
aws ecs create-service \
--cluster 'MyAppCluster' \
--service-name 'MyAppService' \
--task-definition 'myapp-task:5' \
--desired-count 3 \
--launch-type FARGATE \
--network-configuration '{
"awsvpcConfiguration": {
"subnets": ["subnet-aaa111", "subnet-bbb222"],
"securityGroups": ["sg-xyz"],
"assignPublicIp": "DISABLED"
}
}'네트워크 모드: awsvpc와 브리지
awsvpc 네트워크 모드는 각 ECS 작업에 자체 Elastic Network Interface(ENI)와 VPC 내부의 프라이빗 IP 주소를 제공합니다. 이는 EC2 인스턴스와 동일한 방식입니다. 이 모드를 사용하면 작업별로 보안 그룹을 세밀하게 제어할 수 있으며 Fargate 작업에 필수입니다. 브리지 네트워크 모드는 호스트에서 Docker의 기본 제공 가상 네트워크를 사용하고 호스트에서 컨테이너로 포트를 매핑하며, 호스트 EC2 인스턴스의 ENI를 공유합니다. SAA-C03 시험에서는 Fargate가 항상 awsvpc를 사용하고, EC2 시작 유형은 둘 중 하나를 사용할 수 있다는 점을 기억하십시오.
ECS 서비스에 로드 밸런서 연결
작업 인스턴스 전체에 트래픽을 분산하려면 ECS 서비스를 ALB 대상 그룹에 등록하십시오. 새 작업이 시작되면 ECS가 자동으로 대상 그룹에 등록하고, 작업이 중지되면 ECS가 등록을 해제합니다. 상태 확인이 실행되기 전에 컨테이너가 시작할 시간을 확보할 수 있도록 상태 확인 유예 기간(예: 60~120초)을 구성하십시오. 유예 기간이 없으면 ALB가 시작이 느린 컨테이너를 준비되기 전에 비정상으로 판단하여 대체 작업이 반복적으로 생성될 수 있습니다.
aws ecs create-service \
--cluster 'MyAppCluster' \
--service-name 'MyAppService' \
--load-balancers \
'targetGroupArn=arn:aws:elasticloadbalancing:...,containerName=myapp,containerPort=8080' \
--health-check-grace-period-seconds 120 \
--task-definition 'myapp-task:5' \
--desired-count 3롤링 배포와 블루/그린 배포 비교
ECS 서비스는 두 가지 배포 전략을 지원합니다. 롤링 업데이트는 기존 작업을 새 작업으로 점진적으로 교체하며, minimumHealthyPercent(하한)와 maximumPercent(상한)로 구성할 수 있습니다. 100/200으로 설정하면 새 작업이 시작되는 동안 기존 작업이 실행됩니다(정상 상태 100% 필요, 최대 용량 200%). 블루/그린 배포(AWS CodeDeploy를 통해 사용)는 기존 작업과 함께 새 작업 세트를 생성하고, ALB의 가중치 기반 라우팅을 사용하여 트래픽을 점진적으로 전환한 다음 검증 후 기존 작업을 종료합니다. 블루/그린 배포는 다운타임 없이 롤백할 수 있습니다.
ECS에서 CloudWatch로 로깅하기
작업 정의에서 awslogs 로그 드라이버를 구성하여 컨테이너의 표준 출력과 표준 오류를 CloudWatch Logs로 직접 전송하십시오. 로그 그룹, 리전, 스트림 접두사를 지정하십시오. 작업 실행 역할에는 logs:CreateLogStream 및 logs:PutLogEvents 권한이 필요합니다. 여러 서비스의 로그를 중앙에서 집계하려면 FireLens(Fluent Bit 또는 Fluentd가 실행되는 사이드카 컨테이너)를 사용하여 로그를 S3, OpenSearch 또는 타사 로깅 시스템으로 라우팅하는 방법을 고려하십시오.
'logConfiguration': {
'logDriver': 'awslogs',
'options': {
'awslogs-group': '/ecs/myapp',
'awslogs-region': 'us-east-1',
'awslogs-stream-prefix': 'myapp'
}
}Cloud Map을 사용한 ECS 서비스 검색
ECS의 마이크로서비스가 서로 통신해야 할 때는 작업이 일시적으로 존재하고 시작될 때마다 새로운 IP를 받으므로 IP 주소를 하드코딩할 수 없습니다. AWS Cloud Map(ECS 서비스 검색)을 사용하여 각 작업의 IP와 포트를 DNS 네임스페이스에 등록하십시오. 다른 서비스는 myservice.namespace.local을 조회하여 현재 정상 상태인 작업의 IP를 확인합니다. ECS는 새 작업을 자동으로 등록하고 실패한 작업의 등록을 해제하므로 수동 관리 없이 DNS 레코드를 정확하게 유지합니다.
ECS 작업 정의의 보안 암호
작업 정의에 자격 증명을 하드코딩하지 마십시오. 대신 작업 정의에서 Secrets Manager 또는 Parameter Store의 보안 암호를 참조하십시오. ECS는 작업 시작 시 해당 값을 환경 변수로 주입합니다. 작업 실행 역할에는 보안 암호를 가져올 권한이 있어야 합니다. Secrets Manager에는 secretsmanager:GetSecretValue를 사용하고, Parameter Store에는 ssm:GetParameters를 사용하십시오. 보안 암호는 컨테이너 시작 시 한 번 가져오므로, 보안 암호를 교체한 후 새 값을 적용하려면 작업을 교체해야 합니다.
'secrets': [
{
'name': 'DB_PASSWORD',
'valueFrom': 'arn:aws:secretsmanager:us-east-1:123456789012:secret:myapp/db-password-AbCdEf'
},
{
'name': 'API_KEY',
'valueFrom': 'arn:aws:ssm:us-east-1:123456789012:parameter/myapp/api-key'
}
]빠른 확인
이 레슨에서 다룬 AWS Solutions Architect(SAA-C03) 개념에 대한 이해도를 확인하십시오.
레슨 요약
이 레슨에서는 다음을 배웠습니다. ECS 클러스터는 작업이 실행되는 컴퓨팅 리소스를 그룹화합니다. 작업 정의는 컨테이너 이미지, CPU/메모리, 역할, 로깅을 버전이 지정된 청사진으로 정의합니다. ECS 서비스는 원하는 작업 수를 유지하고, 트래픽 분산을 위해 ALB와 통합되며, 롤링 배포 또는 블루/그린 배포를 지원합니다. 다음으로 EC2 시작 유형과 서버리스 Fargate 시작 유형을 비교하겠습니다.
자주 묻는 질문
“ECS 클러스터, 작업 정의 및 서비스” 강의는 무료인가요?
네 — “ECS 클러스터, 작업 정의 및 서비스” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cloud & IT Cert Prep 강의 전체를 잠금 해제할 수 있습니다. Cloud & IT Cert Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
“ECS 클러스터, 작업 정의 및 서비스”에서 뭘 배우나요?
컨테이너 이미지와 리소스 제한을 포함한 ECS 작업 정의를 지정하고 클러스터에 등록한 다음, 원하는 수를 유지하는 서비스를 생성합니다. 브라우저에서 직접 실행하는 실습 코드로 Cloud & IT Cert Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Cloud & IT Cert Prep을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Cloud & IT Cert Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“ECS 클러스터, 작업 정의 및 서비스” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Cloud & IT Cert Prep 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Cloud & IT Cert Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- ECS 클러스터, 작업 정의 및 서비스
- EC2 시작 유형과 Fargate 비교
- ECR: 컨테이너 이미지 저장 및 가져오기
- ECS 서비스 자동 확장 및 로드 밸런싱