AWS Fargate는 Amazon ECS 및 Amazon EKS와 함께 활용 가능한 기술로, Amazon EC2 인스턴스 기반 서버나 클러스터 운영 없이 컨테이너를 구동할 수 있게 해줍니다.
Fargate를 사용하면 컨테이너 실행을 위한 가상 머신 클러스터 구성, 확장, 프로비저닝 작업이 불필요합니다. 서버 유형 선택, 클러스터 확장 계획, 클러스터 패킹 최적화 등의 복잡한 작업에서 자유로워집니다.
Amazon ECS 작업 및 서비스는 Fargate 시작 유형 또는 Fargate 용량 공급자를 통해 실행 가능합니다. Fargate 사용을 위해선 애플리케이션을 컨테이너 형태로 패키징하고, 운영 체제, CPU, 메모리 요구 사항을 설정해야 하며, 네트워킹 및 IAM 정책 구성 후 실행할 수 있습니다.
컨테이너 호스팅을 위한 기본 CPU 및 RAM 용량을 유지할 필요 없이, 작업에 필요한 리소스 양을 AWS에 지정하면 AWS가 나머지를 처리합니다. Fargate 작업은 각각 격리되어 기본 커널, CPU, 메모리, 탄력적 네트워크 인터페이스 등을 다른 작업과 공유하지 않습니다.
Fargate 작동 원리
Fargate를 사용하면 컨테이너를 호스팅하기 위한 인프라 구축이나 관리가 필요 없이 컨테이너를 배포할 수 있습니다. 실행할 컨테이너 이미지와 할당할 CPU 및 메모리 리소스 양을 Fargate에 알려주면, Fargate가 자동으로 호스트 서버를 프로비저닝합니다. 컨테이너 실행 중 사용된 리소스에 대해서만 비용이 부과됩니다.
Fargate는 사용자가 컨테이너를 호스팅하는 서버를 관리할 필요가 없는 서버리스 컴퓨팅 엔진입니다. 서버는 여전히 존재하지만 AWS가 관리합니다. Fargate는 컨테이너를 염두에 두고 설계되지 않은 서버리스 컴퓨팅 서비스인 AWS Lambda와는 구별되어야 합니다(Lambda도 컨테이너 이미지 배포를 지원하지만).
Fargate의 장점
AWS Fargate는 작업에 필요한 컴퓨팅, 메모리 및 기타 리소스 양을 정확하게 계산해주어 인스턴스 유형 선택이나 클러스터 용량 확장에 대한 고민을 덜어줍니다.
컨테이너 사용량에 따라 리소스 비용을 지불하므로 과도한 프로비저닝을 방지하고 불필요한 서버 비용을 줄일 수 있습니다.
Fargate 작업(포드)은 자체 커널에서 실행되므로 워크로드 격리 및 보안이 강화된 컴퓨팅 환경이 조성됩니다.
팀은 ECS 또는 EKS 컨테이너를 활용하여 애플리케이션을 설계하고 실행하는 데 집중할 수 있으며, 서버 확장, 보안, 운영 체제 패치와 같은 시간 소모적인 인프라 관리 작업은 Fargate에 맡길 수 있습니다.
Amazon CloudWatch Container Insights와 같은 AWS 서비스와의 연동을 통해 Fargate는 높은 수준의 관찰성을 제공하며, 다양한 타사 기술을 이용한 로그 및 메트릭 수집도 가능합니다.
Fargate를 사용하면 다양한 AWS 서비스를 효율적으로 활용할 수 있습니다.
Fargate는 컨테이너 요구 사항에 맞춰 컴퓨팅 리소스를 지속적으로 조정하여 과도한 프로비저닝을 줄이고, 사용하지 않는 리소스에 대한 비용을 절감합니다. 또한, Fargate Spot 옵션을 사용하면 일반 비용 대비 최대 70%까지 절약할 수 있지만, 중단 가능한 애플리케이션에 적합합니다.
Fargate 구성 요소
클러스터
Amazon ECS 클러스터는 작업 또는 서비스의 논리적 그룹입니다. 클러스터를 통해 애플리케이션을 격리할 수 있으며, Fargate를 사용하여 작업을 실행하면 클러스터 리소스가 관리됩니다.
작업 정의
작업 정의는 애플리케이션 컨테이너를 설명하는 JSON 형식의 텍스트 파일입니다. 작업 정의는 한 번에 최대 10개의 컨테이너를 정의할 수 있으며, 애플리케이션의 다양한 매개변수 설정을 위한 청사진 역할을 합니다.
예를 들어, 작업 정의를 통해 운영 체제 매개변수, 사용 컨테이너, 애플리케이션 오픈 포트, 작업 컨테이너와 함께 사용할 데이터 볼륨 등을 정의할 수 있습니다. 사용 가능한 매개변수는 애플리케이션 요구 사항에 따라 결정됩니다.
작업
작업은 클러스터 수준에서 작업 정의를 인스턴스화한 것입니다. Amazon ECS에서 애플리케이션 작업 정의를 생성한 후 클러스터에서 실행할 작업 수를 선택할 수 있으며, 서비스 또는 독립 프로세스의 일부로 작업을 실행할 수 있습니다.
서비스
Amazon ECS 클러스터 내에서 Amazon ECS 서비스는 사용자가 정의한 작업 수를 유지하고 관리합니다. 작업 실패 또는 중단 시, Amazon ECS 서비스 스케줄러가 작업 정의에 따라 다른 인스턴스를 실행하여 서비스 내 작업 수를 유지합니다.
운영 체제 및 CPU 아키텍처
Fargate에서 지원하는 운영 체제는 Amazon Linux 2, Windows Server 2019 Full 및 Windows Server 2019 Core입니다.
Amazon ECS 작업 정의에 사용할 수 있는 아키텍처는 ARM과 X86_64 두 가지입니다. Windows 컨테이너를 사용하는 경우 X86_64 CPU 아키텍처를 사용해야 하며, Linux 컨테이너의 경우 ARM 기반 애플리케이션을 위한 ARM64 아키텍처와 X86_64 CPU 아키텍처 모두를 사용할 수 있습니다.
EC2 인스턴스 기반 ECS vs AWS Fargate 기반 ECS
EC2 인스턴스 모델에서는 컨테이너가 클러스터 내 EC2 인스턴스(VM)에 배포되며, ECS가 작업 정의에 따라 이를 관리합니다.
장점 👍
- 사용자가 EC2 인스턴스 유형을 완벽하게 제어할 수 있습니다.
- 스팟 인스턴스를 사용하여 비용을 최대 90%까지 절감할 수 있습니다.
단점 👎
- 인스턴스 보안 패치, 네트워크 보안 관리가 필요하며, 클러스터 확장 책임도 사용자에게 있습니다.
Fargate 모델에서는 EC2 인스턴스 또는 서버에 대한 걱정 없이 필요한 CPU 및 메모리 구성을 선택하기만 하면 Fargate가 컨테이너를 배포합니다.
장점 👍
- 서버 관리가 불필요합니다.
- AWS가 가용성 및 확장성을 책임지지만, 적절한 메모리 및 CPU 설정을 선택하는 것이 중요합니다. 부적절한 설정은 애플리케이션 작동 중단으로 이어질 수 있습니다.
- Fargate Spot 사용 시 Fargate 가격에서 최대 70% 할인을 받을 수 있습니다.
단점 👎
- AWS Fargate 기반 ECS는 awsvpc 네트워크 모드만 지원하여 네트워킹 계층 제어가 제한적입니다.
Fargate 없는 EKS vs Fargate 있는 EKS
Fargate 모델이 없는 EKS에서는 클러스터 크기를 미리 결정해야 하며, 필요에 따라 노드를 수동으로 변경할 수 있지만 초기 이상적인 크기를 설정하는 것이 좋습니다.
장점 👍
- HostNetwork 및 HostPort와 같은 구성 변수를 지정하는 등 사용자 제어 범위가 넓습니다.
- 일부 지역에서 Fargate가 지원되지 않으므로, 더 많은 지역에서 컨테이너를 사용하려면 Fargate 없는 EKS를 선택해야 합니다.
단점 👎
- Fargate 없는 EKS는 사용하기 다소 복잡합니다.
Fargate 모델이 있는 EKS에서는 클러스터 크기를 미리 지정할 필요가 없습니다.
장점 👍
- Fargate 포함 EKS는 전용 가상 머신에서 실행되어 보안성이 높으며, 특권 모드 미지원도 보안 측면에서 긍정적입니다.
- 장기적으로 비용 효율적입니다.
단점 👎
- 다양한 측면에서 사용자 제어 능력이 제한됩니다.
결론
Fargate는 강력하고 성숙한 도구로, 모든 인프라 관리를 자동화하여 비용, 시간, 노력을 절약해 줍니다. 컨테이너를 처음 사용하거나 애플리케이션 유지 관리보다 구축에 집중하고 싶은 사용자에게 특히 유용합니다.