
트래픽 변화에 따라 EC2 인스턴스를 자동으로 추가하거나 제거
이하 내용들은 오토 스케일링 기능으로 생성될 인스턴스를 선택하는 작업
프로 비저닝
컨테이너 인스턴스 AMI (Amazon Machine Image)
=> 컨테이너를 실행할 EC2 인스턴스의 운영체제와 기본 설정이 포함된 이미지
EC2 인스턴스 유형
=> EC2 인스턴스의 하드웨어 사양
원하는 용량
=> ECS 클러스터에 실행할 EC2 인스턴스의 최소 및 최대 개수를 설정
SSH 키 페어
=> EC2 인스턴스에 SSH로 접속할 때 사용하는 인증 키
루트 EBS 볼륨 크기
=> EC2 인스턴스의 루트 볼륨(운영체제 설치 공간) 크기를 설정

ECS에서 실행할 컨테이너를 정의

운영 체제/아키텍처: 컨테이너를 실행할 EC2 인스턴스의 운영체제와 아키텍처를 선택
- 리눅스 운영체제와 x86_64 아키텍처(일반적인 Intel/AMD 기반 서버)를 사용
네트워크 모드
- awsvpc: 각 작업(Task)이 고유한 네트워크 인터페이스를 가져서 독립된 IP 주소를 할당
=> 보안특화
CPU: 컨테이너가 사용할 CPU 용량(코어사용량)
메모리: 컨테이너가 사용할 메모리 용량
태스크 크기는 컨테이너가 실행될 EC2 인스턴스의 자원과 일치해야함
리소스 요구사항이 너무 크거나 작으면 EC2 인스턴스에 배치되지 않을 수 있음
태스크 역할
- 작업(Task) 내 컨테이너가 AWS 서비스(API, 리소스)에 접근할 때 사용하는 IAM 역할
- ex: S3 버킷에 접근하거나 DynamoDB 데이터를 조회할 때 사용
- IAM 콘솔에서 생성한 역할을 선택하거나 새 역할 생성 옵션을 사용
태스크 실행 역할
- 작업(Task)을 실행하는 AWS ECS 자체가 사용하는 IAM 역할
- ECS가 EC2 인스턴스에서 작업을 실행하고, 로그를 수집하며, ECR에서 이미지를 가져오는 데 사용
- 기본적으로 ECS 서비스가 실행에 필요한 권한을 AWS에서 자동으로 생성

이름: 컨테이너의 고유한 이름을 지정
이미지 URI: 컨테이너에서 실행할 Docker 이미지의 URI
프라이빗 레지스트리: Docker Hub 또는 AWS ECR 외의 프라이빗 레지스트리에서 이미지를 가져오는 경우, 인증 정보가 필요
포트 매핑: 컨테이너 내부의 포트를 호스트(EC2 인스턴스)나 awsvpc 네트워크 모드로 노출
읽기 전용 루트 파일 시스템: 컨테이너의 루트 파일 시스템을 읽기 전용으로 설정할지 여부
리소스 할당 제한 - 조건부: 컨테이너가 사용할 CPU, GPU, 메모리의 양을 정의
=> EC2 cpu용량을 초과할 수 없음 , GPU를 할당하려면 EC2 GPU 인스턴스가 필요


3. 어플리케이션 유형: ECS 클러스터에서 실행할 애플리케이션의 유형을 정의
서비스 이름: 서비스 이름
서비스 유형: 작업(Task)을 ECS 클러스터에 배포하는 방식

- 클러스터에 연결할 VPC와 서브넷 선택
- 보안 그룹에서 ECS 작업에 필요한 포트를 허용
ECS-Optimized AMI를 사용중이라면 상관없지만 비싸서 안쓰는걸로 예시를 들겠다.(2$/hr)
ECS 에이전트 및 관련 패키지 설치
Linux
sudo yum update -y
sudo yum install -y ecs-init docker
Ubuntu
sudo apt update
sudo apt install -y docker.io
curl -o /usr/local/bin/ecs-agent https://s3.amazonaws.com/amazon-ecs-agent-us-east-1/amazon-ecs-agent-latest.tar.gz
chmod +x /usr/local/bin/ecs-agent
sudo mkdir -p /etc/ecs
sudo nano /etc/ecs/ecs.config
ECS_CLUSTER=<클러스터 이름>
Linux
sudo systemctl start ecs
sudo systemctl enable ecs
Ubuntu
sudo docker run --name ecs-agent \
--detach=true \
--restart=always \
--volume=/var/run/docker.sock:/var/run/docker.sock \
--volume=/var/log/ecs/:/log \
--volume=/var/lib/ecs/data:/data \
--network=host \
amazon/amazon-ecs-agent:latest
aws ecs list-container-instances --cluster my-cluster