[cloud native][platform][AWS] Amazon ECS(Elastic Container Service)
Updated:
개요
- https://aws.amazon.com/ko/ecs/
- 컨테이너화된 어플리케이션의 손쉬운 배포, 관리 및 크기 조정을 지원하는 완전관리형 컨테이너 오케스트레이션 서비스
주요 기능
- https://aws.amazon.com/ko/ecs/features/
- AWS Fargate를 통한 기본적인 서버리스
- AWS Fargate
- https://aws.amazon.com/ko/fargate/
- 서버를 관리하지 않고도 어플리케이션 구축에 초점을 맞출 수 있도록 지원하는 종량제 서버리스 컴퓨팅 엔진
- 어플리케이션의 요구 사항을 정의하고 Fargate를 시작 유형으로 선택하면 Fargate가 컨테이너 실행에 필요한 모든 조정 및 인프라 관리를 처리
- AWS Fargate
- Amazon ECS Anywhere
- https://aws.amazon.com/ko/ecs/anywhere/
- 고객 관리형 인프라에서 컨테이너 워크로드를 손쉽게 실행 및 관리
- 컨테이너 기반 어플리케이션에서 일관된 도구 및 API 경험을 제공
- 보안 및 격리를 고려한 설계
- 보안, 자격 증명 및 관리와 거버넌스 도구와 기본적으로 통합되므로 프로덕션으로 빠르게 전환하는 데 도움
- 컨테이너에 대한 세분화된 권한을 할당하여 어플리케이션을 구축할 때 격리 수준을 개선
- 자율적인 제어 플레인 작업
- 제어 플레인, 노드 또는 추가 기능을 관리할 필요가 없는 완전관리형 컨테이너 오케스트레이션 서비스
- AWS와 서드 파티 도구에 기본적으로 통합되므로 환경이 아닌 어플리케이션을 구축에 집중
추가 기능
- https://aws.amazon.com/ko/ecs/features/
- 개발
- Docker 지원
- Docker 컨테이너를 실행하고 관리
- 다중 컨테이너 어플리케이션을 정의하고 실행
- Windows 컨테이너 호환성
- Windows 컨테이너 관리를 지원
- AMI(Windows Amazon Machine Image)는 인스턴스 및 컨테이너 시작 시간 성능과 CPU, 메모리 사용률, 예약 지표에 대한 가시성을 제공
- AWS Copilot
- https://aws.amazon.com/ko/containers/copilot/
- 컨테이너화된 어플리케이션을 빠르게 시작하고 쉽게 관리할 수 있도록 하는 명령줄 인터페이스(CLI)
- 레지스트리로 푸시, 작업 정의 생성 및 클러스터 생성을 포함하여 배포 수명 주기의 각 단계를 자동화
- 리포지토리 지원
- Docker Hub 및 Amazon ECR(Elastic Container Registry)과 같은 액세스 가능한 프라이빗 Docker 레지스트리와 함께 사용 가능
- Docker 지원
- 관리
- 태스크 정의
- JavaScript Object Notation(JSON) 템플릿을 통해 태스크를 정의
- Docker 리포지토리 및 이미지, 메모리 및 CPU 요구 사항, 공유 데이터 볼륨, 컨테이너가 서로 연결되는 방식, 어플리케이션 사양의 버전 등
- 프로그래밍 방식 제어
- API 세트를 제공하여 서비스를 통합하고 확장
- 클러스터 생성/삭제, 태스크 등록/취소, Docker 컨테이너 실행/종료, 클러스터와 해당 인스턴스의 상태에 대한 자세한 정보 제공
- AWS CloudFormation을 사용하여 Amazon ECS 클러스터를 프로비저닝하고, 태스크 정의를 등록하고, 컨테이너 일정을 수립
- AWS CloudFormation
- https://aws.amazon.com/ko/cloudformation/
- 인프라를 코드로 처리하여 AWS 및 서드 파티 리소스를 모델링, 프로비저닝 및 관리
- 컨테이너 배포
- 컨테이너를 새로운 버전으로 쉽게 업데이트
- Application Load Balancer에 자동으로 컨테이너를 등록하고 등록 취소
- 블루/그린 배포
- AWS CodeDeploy의 블루/그린 배포는 어플리케이션 업데이트 중에 가동 중단 시간을 최소화
- AWS CodeDeploy
- https://aws.amazon.com/ko/codedeploy/
- 다양한 컴퓨팅 서비스에 대한 소프트웨어 배포를 자동화하는 완전관리형 배포 서비스
- 컨테이너 자동 복구
- Capacity Providers
- 여러 유형의 컴퓨팅 용량에서 컨테이너식 워크로드가 실행되는 방법에 대한 유연한 규칙을 정의하고 용량의 확장을 관리
- 스토리지
- Amazon EFS(Elastic File System)
- 파일을 추가하고 제거할 때 자동으로 확장되고 축소되며 관리 또는 프로비저닝이 필요하지 않음
- 인프라가 아닌 어플리케이션에 집중 가능
- Amazon EFS(Elastic File System)
- 태스크 정의
- 일정 예약 및 태스크 배치
- 작업 일정 예약
- 배치 처리 작업처럼 작업을 수행한 후 중단하는 프로세스를 실행
- 작업 대기열에서 자동으로 또는 사용자가 정의하는 시간 간격에 따라 태스크를 시작
- 서비스 일정 예약
- 무상태 서비스 및 어플리케이션을 실행
- 지정된 수의 태스크가 지속적으로 실행되고 실패 시 태스크를 다시 시작
- 고객은 Elastic Load Balancing 로드 밸런서에 태스크가 등록되었는지 확인하고, 태스크 실행을 위해 정의한 상태 확인을 수행
- 데몬 일정 예약
- ECS 클러스터에 있는 선택된 각 인스턴스에서 동일한 작업을 자동으로 실행
- 로깅, 모니터링 또는 백업과 같은 서비스에 대한 공통 관리 기능을 제공하는 태스크를 손쉽게 실행
- 태스크 배치
- 사용자 지정 속성을 기반으로 Amazon EC2(Elastic Compute Cloud) 인스턴스 클러스터에 태스크를 배치하는 방법을 사용자가 지정
- 빈(bin) 팩과 스프레드 같은 배치 전략을 사용하여 태스크가 배치되는 위치를 추가적으로 정의
- 정책을 연결하면 코드를 작성하지 않고도 정교한 배치 가능
- 작업 일정 예약
- 네트워킹
- 서비스 검색
- Amazon ECS는 AWS Cloud Map과 통합
- AWS Cloud Map
- https://aws.amazon.com/ko/cloud-map/
- 클라우드 리소스 검색 서비스
- 어플리케이션 리소스의 사용자 지정 이름을 정의
- 동적으로 변화하는 이러한 리소스의 업데이트된 위치를 유지 관리
- 웹 서비스가 항상 가장 최신 리소스 위치를 검색할 수 있어 어플리케이션 가용성이 향상
- 웹 서비스에서 항상 이 동적으로 변화하는 리소스의 최신 위치를 검색하므로 어플리케이션 가용성이 개선
- 서비스 메시
- 어플리케이션에 있는 모든 마이크로서비스가 통신하는 방법을 표준화하여 복잡한 마이크로서비스 어플리케이션을 쉽게 구축하고 실행
- AWS App Mesh
- https://aws.amazon.com/ko/app-mesh/
- 어플리케이션 수준의 네트워킹을 통해 서비스에서 여러 유형의 컴퓨팅 인프라와 원활하게 통신할 수 있도록 하는 서비스 메시
- 태스크 네트워킹
- Docker 네트워킹을 지원하며, Amazon VPC와 통합하여 컨테이너에 대한 격리를 제공
- 컨테이너를 다른 서비스 및 외부 트래픽에 연결하는 방법을 제어
- 네트워킹 모드
- 작업 네트워킹/awsvpc
- 실행 중인 각 ECS 작업에 전용 탄력적 네트워킹 인터페이스를 할당
- 컨테이너는 VPC에서 EC2 인스턴스처럼 모든 네트워킹 기능을 사용
- 브리지
- 로컬 가상 네트워크 내 호스트에서 실행되는 모든 컨테이너를 연결하는 Linux 브리지를 생성
- 브리지는 호스트의 기본 네트워크 연결을 통해 액세스
- 호스트
- 컨테이너를 호스트의 네트워크 스택에 직접 추가함으로써 격리되지 않은 상태로 호스트의 네트워크 상에 컨테이너를 노출
- 없음
- 컨테이너의 외부 네트워킹을 비활성화
- 작업 네트워킹/awsvpc
- 로드 밸런싱
- Elastic Load Balancing과 통합되므로 Application Load Balancer 또는 Network Load Balancer를 사용하여 컨테이너에 트래픽을 분산
- 태스크 정의와 사용할 로드 밸런서를 지정하면 Amazon ECS가 자동으로 로드 밸런서에 컨테이너를 추가하고 제거
- 태스크 정의에서 동적 포트를 지정하여 컨테이너가 EC2 인스턴스에 예약된 경우 컨테이너에 미사용 포트를 제공
- 서비스 검색
- 모니터링 및 로깅
- 모니터링
- Amazon CloudWatch
- Amazon CloudWatch를 통해 컨테이너와 클러스터를 모니터링하는 기능을 제공
- https://aws.amazon.com/ko/cloudwatch/
- DevOps 엔지니어, 개발자, 사이트 안정성 엔지니어(SRE), IT 관리자 및 제품 소유자를 위해 구축된 모니터링 및 관찰 서비스
- 실행 중인 태스크의 평균 및 전체 CPU 사용률과 메모리 사용률을 태스크 정의, 서비스 또는 클러스터별로 그룹화하여 모니터링
- CloudWatch 경보를 설정하여 컨테이너 또는 클러스터를 확장하거나 축소해야 할 때 알림을 수신
- Amazon CloudWatch
- 로깅
- Amazon ECS API 호출을 기록
- AWS CloudTrail을 통해 로그 파일 및 API 호출 기록 제공
- AWS CloudTrail
- https://aws.amazon.com/ko/cloudtrail/
- AWS 인프라 전체의 계정 활동을 모니터링하고 기록하여 스토리지, 분석 및 해결 작업을 제어
- 보안 분석, 리소스 변경 추적, 규정 준수 감사가 가능
- AWS Config
- AWS Config를 Amazon ECS와 통합하여 AWS 계정의 AWS 리소스 구성에 대한 가시성을 확보
- AWS Config
- https://aws.amazon.com/ko/config/
- AWS 리소스 구성을 측정, 감사 및 평가할 수 있는 서비스
- 규정 준수 및 보안, 운영 문제 해결과 리소스 관리를 간소화
- 모니터링
- 하이브리드 배포
- AWS Outposts
- https://aws.amazon.com/ko/outposts/
- 일관된 하이브리드 환경을 위해 거의 모든 온프레미스 또는 엣지 로케이션에 AWS 인프라 및 서비스를 제공하는 완전관리형 솔루션
- AWS Outposts