[Docker] AWS ECS 배포 실습(AWS ECS)
✅ Amazon ECS로 컨테이너 서비스 배포하기: 클라우드 기반 컨테이너 오케스트레이션
이전 포스팅에서는 Docker Compose를 사용하여 로컬 환경에서 여러 컨테이너를 효율적으로 관리하는 방법을 배웠습니다. 이제는 이 컨테이너들을 클라우드 환경에 배포하여 실제 서비스로 운영하는 방법을 알아볼 차례입니다! 이번 포스팅에서는 Amazon ECS(Elastic Container Service)를 사용하여 컨테이너 서비스를 배포하는 과정을 자세히 살펴보겠습니다.
☑️ Amazon ECS란 무엇인가요?
Amazon ECS는 완전관리형 컨테이너 오케스트레이션 서비스로, Docker 컨테이너를 클라우드에서 쉽게 실행하고 관리할 수 있도록 도와줍니다. ECS를 사용하면 다음과 같은 이점을 얻을 수 있습니다.
- 서버리스 컨테이너 실행 (AWS Fargate): 서버 프로비저닝 및 관리 없이 컨테이너를 실행할 수 있습니다.
- 확장성: 필요에 따라 컨테이너 수를 자동으로 조절하여 트래픽 변화에 유연하게 대응할 수 있습니다.
- 고가용성: 여러 가용 영역에 컨테이너를 분산 배치하여 서비스 가용성을 높일 수 있습니다.
- 통합 로깅 및 모니터링: Amazon CloudWatch와 통합하여 컨테이너 로그를 수집하고 모니터링할 수 있습니다.
- 로드 밸런싱: Elastic Load Balancing과 통합하여 컨테이너에 대한 트래픽을 효율적으로 분산할 수 있습니다.
☑️ Amazon ECS 아키텍처 이해하기
Amazon ECS는 다음과 같은 주요 구성 요소로 이루어져 있습니다.
- 클러스터 (Cluster): 컨테이너를 실행하는 논리적인 그룹입니다. EC2 인스턴스 또는 AWS Fargate를 사용하여 클러스터를 생성할 수 있습니다.
- 작업 정의 (Task Definition): 컨테이너 실행에 필요한 설정 정보를 정의합니다. 사용할 도커 이미지, CPU 및 메모리 할당량, 환경 변수, 네트워크 설정 등을 포함합니다.
- 서비스 (Service): 작업 정의를 기반으로 컨테이너를 실행하고 관리합니다. 원하는 컨테이너 수를 지정하고, 자동 확장, 로드 밸런싱 등의 기능을 설정할 수 있습니다.
- 컨테이너 인스턴스 (Container Instance): EC2 인스턴스 기반 클러스터에서 컨테이너를 실행하는 EC2 인스턴스입니다.
- ECS 에이전트 (ECS Agent): 컨테이너 인스턴스에 설치되어 컨테이너 실행 및 상태 관리를 담당하는 소프트웨어입니다.
☑️ Amazon ECS를 활용한 컨테이너 서비스 배포 실습
이제 Amazon ECS를 사용하여 Nginx 웹 서버와 Django 애플리케이션으로 구성된 2-Tier 웹 서비스를 배포해 보겠습니다.
1. 사전 준비
- ECR 저장소 생성:
aws ecr create-repository
명령어를 사용하여fc-django
와fc-nginx
라는 이름의 저장소를 생성합니다. - ECR 로그인:
aws ecr get-login-password
명령어를 사용하여 ECR에 로그인합니다. - 도커 이미지 빌드 및 푸시: 제공된 소스 코드를 사용하여 Nginx 및 Django 이미지를 빌드하고, ECR 저장소에 푸시합니다.
2. ECS 작업 정의 생성
- ECS 콘솔 접속: AWS 관리 콘솔에서 ECS 서비스로 이동합니다.
- 작업 정의 생성: “새 작업 정의 생성” 버튼을 클릭하고, “EC2” 시작 유형을 선택합니다.
- 작업 정의 구성: 작업 정의 이름을
2tier-task
로 지정하고, 볼륨socket_volume
을 추가합니다. - 컨테이너 정의:
fc-django
컨테이너: ECR에 저장된 Django 이미지 URI, 메모리 제한 500MB를 설정하고,/app
디렉토리를socket_volume
에 마운트합니다. 로그 구성을 활성화합니다.fc-nginx
컨테이너: ECR에 저장된 Nginx 이미지 URI, 메모리 제한 500MB, 포트 매핑80:80
을 설정합니다.fc-django
컨테이너를 볼륨 소스로 지정하여 볼륨을 공유합니다.
- 시작 종속 관계:
fc-nginx
컨테이너가fc-django
컨테이너에 의존하도록 설정하고, 상태를 “START”로 지정하여 동시에 시작되도록 합니다. - 작업 정의 생성 완료: “생성” 버튼을 클릭하여 작업 정의를 생성합니다.
3. ECS 서비스 생성
- 클러스터 선택: ECS 클러스터 목록에서 이전에 생성한
ecs-cluster
를 선택합니다. - 서비스 생성: “서비스 생성” 버튼을 클릭합니다.
- 서비스 구성:
- 시작 유형: “EC2”
- 작업 정의:
ecs-task
패밀리, 최신 개정 - 서비스 이름:
2tier-svc
- 서비스 유형: “REPLICA”
- 작업 개수: 2
- 로드 밸런서:
- 상태 검사 유예 기간: 300초
- Application Load Balancer: 기존에 생성한
ecs-alb
선택 - 컨테이너:
fc-nginx
, 포트: 80 - 타겟 그룹: 기존에 생성한 타겟 그룹 선택
- 서비스 생성 완료: “서비스 생성” 버튼을 클릭하여 서비스를 생성합니다.
- 서비스 상태 확인: 약 20초 후에 서비스 상태가 “RUNNING”으로 변경되고, 원하는 작업 개수(2)만큼 컨테이너가 실행 중인지 확인합니다.
4. 서비스 접속
- 로드 밸런서 DNS 주소 확인: EC2 서비스에서 생성한 로드 밸런서(
ecs-alb
)를 선택하고, DNS 주소를 복사합니다. - 웹 브라우저 접속: 웹 브라우저에 복사한 DNS 주소를 입력하여 배포된 웹 서비스에 접속합니다.
- 접속 오류 해결: 만약 504 에러가 발생한다면,
ecs-sg-instance
보안 그룹에 3000번 포트(Django 애플리케이션 포트)에 대한 인바운드 규칙을 추가해야 합니다.
참고: 실습 환경 및 AWS 설정에 따라 일부 절차나 설정이 다를 수 있습니다. 자세한 내용은 AWS 공식 문서를 참고하시기 바랍니다.
이번 포스팅에서는 Amazon ECS를 사용하여 컨테이너 서비스를 배포하는 방법을 자세히 알아보았습니다. 다음 포스팅에서는 더욱 심화된 컨테이너 오케스트레이션 기술과 활용 방법에 대해 알아보겠습니다.
This post is licensed under CC BY 4.0 by the author.
Comments powered by Disqus.