도커는 컨테이너 기술로 앱 배포를 위한 소프트웨어 개발 플랫폼
운영체제, 언어에 상관없이 실행할 수 있음
Image 는 운영체제, 데이터베이스, REST API 등 다양한 소프트웨어를 도커 컨테이너에서
실행 시키기 위해 압축한? 파일
AWS 에서 컨테이너 실행은 ECS 클러스터에 ECS 태스크 실행을 의미
도커 컨테이너는 미리 프로비저닝한 Amazon EC2 인스턴스에 위치
각 각의 EC2 인스턴스에서 ECS 에이전트 실행하여
ECS 에이전트가 EC2 인스턴스를 ECS 서비스, ECS 클러스에 등록
이 후에 ECS 태스크를 수행하기 시작하면 AWS 가 컨테이너를 시작/종료함
이는 새로운 도커 컨테이너가 생기면 EC2 인스턴스들중에 자동으로 생성/제거를 의미
인프라를 프로비저닝하지 않아 관리할 EC2 인스턴스가 없음
서버리스지만 서버가 없는 건 아니며 관리대상이 없음을 의미
ECS 클러스터가 있을 때 ECS 태스크를 정의만 생성하면 서버 CPU, RAM 에 따라
ECS 태스크를 AWS 가 대신 실행
확장 필요시 태스크 수를 늘리면 자동확장 가능
EC2 Instance Profile
ECS 에이전트는 EC2 인스턴스 프로파일을 사용, 이를 이용하여 API 호출
API 호출은 ECS 서비스에서 CloudWatch 로그에 API 호출하여 컨테이너 로그를 전달
이 후 ECR 에서 도커 이미지를 EC2 인스턴스로 가져옴
ECS Task Role
태스크마다 각 각의 역할을 정할 수 있음
예시로 A TASK -> S3 를 참조, B TASK -> DynamoDB 참조
EFS
데이터 지속성, 태스크에 파일 시스템을 마운트해서 데이터를 공유하려는 경우
EFS 는 EC2 태스크에 파일 시스템을 직접 마운트 가능
어떤 AZ 에서든 공유 가능
Fargate, EFS 모두 서버리스이므로 AWS 에서 함께 사용하는 것을 권장
S3
S3 는 파일 시스템으로 마운트될 수 없음 !
1.ECS Dashboard -> Create cluster
2.name, Infrastructure(Fargate, EC2, 외부 인스턴스 중 선택)
3.EC2 선택시 ASG, OS, EC2 type 등 옵션 추가 설정 필요
4.Create
1.Create new task definition
2.definition name 설정
3.Container name, Image URI(dockerhub 의 도커이미지), port 등 설정
4.Next
5.app 환경 설정으로 Fargate, EC2 로 인스턴스 생성 방법 설정
6.OS, CPU, Memory 등 설정
7.설정한 옵션 확인 후 Create
Inbound IPv4, IPv6 에 대해 모두 허용하는 보안 그룹 한개 생성
위 생성한 보안그룹에 대해 모든 트래픽을 허용하는 보안 그룹 추가 생성
1.ECS Service(Tab) -> Create 클릭
2.Deployment configuration Service 클릭(Task: 배치 작업용)
3.family(Task definitions) 선택, service name 설정
4.Load balancing 생성
5.Network - Security group 은 위에서 생성한 보안 그룹 적용
6.Create
위 절차대로 모두 생성하면 생성 유형에 맞게 EC2 또는 Fargate 방식으로
인스턴스가 생성되고 그 안에 도커이미지를 띄어 애플리케이션이 실행됨
ECS Service 클릭하고 Update 버튼 클릭 후 Desired tasks 의 숫자를
변경하면 해당 숫자만큼 인스턴스가 추가되거나 줄어듬
3개의 지표에 대해 오토 스케일링 작업 가능
EC2 type 을 사용하는 경우 ECS Cluster Capacity Provider 를 사용하여
자동으로 스케일링 받는 것을 권장
Client / S3 Bucket / Amazon EventBridge / Task / Amazon DynamoDB
클라이언트가 S3 Bucket 에 객체 저장 요청할 때
Amazon EventBridge 가 해당 이벤트를 확인하고 특정 작업을 Task 에 요청
Task 는 S3 에 저장된 객체를 활용하여 DB 에 인서트하거나 특정 작업 가능
Amazon EventBridge 에서 매 1시간마다 Task 에 작업 요청
Task 에서 특정 작업 진행 후 S3 에 객체를 저장하는 구성 가능
SQS Queue 에 ECS 서비스를 연결하면 Task 는 Queue 에 있는 메시지 확인 및 처리
ECS Service Auto Scaling ECS 서비스에 설정하면
SQS Queue 대기열에 메시지가 많아지는 경우 Task 를 자동으로 스케일링 가능
EKS 클러스터에 스토리지 클래스 manifast 지정 필요함
CSI(Container Storage Interface) 규격 드라이버 활용
쿠버네티스를 별도로 공부할 때 어떤식으로 설정하는지만 영상 재참조 필요
강의 영상에서 EKS 는 너무 짧고 내용이 얕음
배포를 하기 위한 인프라, 컨테이너 등을 몰라도 빠른 배포 가능
빠른 배포를 요구하는 웹 애플리케이션, API, 마이크로서비스에 사용
1.소스 코드, 도커 이미지로 구성(CPU, Memory, 오토스케일링, 상태 확인 등) 설정
2.이 후 작업을 App Runner 서비스에서 빌드 및 배포
3.배포에는 컨테이너가 생성되고 컨테이너에 배포를 의미
4.컨테이너에 앱이 배포된 후 URL 로 애플리케이션에 접근 가능