ECS CLI로 Fargate 클러스터 생성하기
by Reid
참고 페이지: https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/ECS_CLI_installation.html
참고: 예제는 모두 macOS 기준
ECS CLI
- 로컬 개발 환경에서 클러스터 생성, 업데이트, 모니터링을 간편하게 할 수 있음
- Docker Compose 버전3를 지원
- AWS 관리용이 아니라 로컬에서의 개발 및 테스트 도구로 사용 할 수도 있음
AWS 계정 설정
설치
- 다운로드
$ sudo curl -o /usr/local/bin/ecs-cli https://s3.amazonaws.com/amazon-ecs-cli/ecs-cli-darwin-amd64-latest
- 출력된 두 문자열을 비교하여 유효성 확인
$ curl -s https://s3.amazonaws.com/amazon-ecs-cli/ecs-cli-darwin-amd64-latest.md5 && md5 -q /usr/local/bin/ecs-cli
- 실행 권한 부여
$ sudo chmod +x /usr/local/bin/ecs-cli
- 정상 설치 확인
$ ecs-cli --version
IAM 역할 생성
- ECR에서 컨테이너 이미지를 가져오거나 awslogs 로그 드라이버를 사용하기 위해 작업 실행 역할이 필요
task-execution-assume-role.json
파일 생성{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
- 작업 실행 역할 생성
$ aws iam --region us-east-1 create-role --role-name ecsTaskExecutionRole --assume-role-policy-document file://task-execution-assume-role.json
- 작업 실행 역할과 정책 연결
$ aws iam --region us-east-1 attach-role-policy --role-name ecsTaskExecutionRole --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
구성
- ECS CLI가 사용자를 대신해 API 요청을 하기 위해 자격 증명을 부여
- 구성 정보는
~/.ecs
에 저장
- 기본 설정
$ ecs-cli configure --cluster tutorial --region us-east-1 --default-launch-type FARGATE --config-name tutorial
- ECS 설정
cluster_name
: 만들 클러스터 이름launch_type
: 사용할 시작 유형region_name
: AWS 리전config-name
: 부여하고 싶은 설정 이름$ ecs-cli configure profile --access-key AWS_ACCESS_KEY_ID --secret-key AWS_SECRET_ACCESS_KEY --profile-name tutorial
클러스터와 보안 그룹 생성
- 클러스터 생성
ecs-cli up
명령으로 클러스터 생성- Fargate 시작 유형은 빈 클러스터와 퍼블릭 서브넷 두 개로 구성된 VPC를 생성
$ ecs-cli up
나중에 사용하기 위해 VPC와 Subnet을 기억해둡니다.
- 보안 그룹 생성
- 이전의 VPC ID를 입력하여 보안 그룹을 생성
$ aws ec2 create-security-group --group-name "my-sg" --description "My security group" --vpc-id "VPC_ID"
- 이전의 VPC ID를 입력하여 보안 그룹을 생성
- 엑세스 허용
- 보안 그룹 규칙을 추가하여 80번 포트에 대한 인바운드 접근을 허가
$ aws ec2 authorize-security-group-ingress --group-id "security_group_id" --protocol tcp --port 80 --cidr 0.0.0.0/0
- 보안 그룹 규칙을 추가하여 80번 포트에 대한 인바운드 접근을 허가
Compose 파일 생성
- WordPress 애플리케이션을 생성하는 간단한 Docker compose 파일
- Docker compose v3 사용
- 웹 서버로의 인바운드 트래픽을 위해 80번 포트를 노출
- 컨테이너 로그는 CloudWatch 로그 그룹으로 이동
- Fargate 권장 방식
docker-compose.yml
version: '3'
services:
wordpress:
image: wordpress
ports:
- "80:80"
logging:
driver: awslogs
options:
awslogs-group: tutorial
awslogs-region: us-east-1
awslogs-stream-prefix: wordpress
- ECS의 고유한 파라메터를 전달하기 위해 추가 파일을 생성해야 함
- VPC, 서브넷, 보안그룹 등을 설정
ecs-params.yml
version: 1
task_definition:
task_execution_role: ecsTaskExecutionRole
ecs_network_mode: awsvpc
task_size:
mem_limit: 0.5GB
cpu_limit: 256
run_params:
network_configuration:
awsvpc_configuration:
subnets:
- "subnet ID 1"
- "subnet ID 2"
security_groups:
- "security group ID"
assign_public_ip: ENABLED
Compose 파일 배포
- ecs-cli compose service up 명령으로 클러스터에 배포
- 프로젝트 이름은 현재 디렉토리 이름이 기본으로 설정되지만
--project-name
으로 재정의 할 수 있음$ ecs-cli compose --project-name tutorial service up --create-log-groups --cluster-config tutorial
실행중인 컨테이너 보기
- ecs-cli compose service ps 명령으로 실행 중인 클러스터 확인
$ ecs-cli compose --project-name tutorial service ps --cluster-config tutorial
나중에 사용하기 위해 task-id를 기억해둡니다.
컨테이너 로그 확인
- ecs-cli logs 명령으로 로그 확인
- 기억해두었던 task-id를 입력
$ ecs-cli logs --task-id a06a6642-12c5-4006-b1d1-033994580605 --follow --cluster-config tutorial
클러스터 작업 규모 조정
- ecs-cli compose service scale 명령으로 작업 개수를 변경 가능
- 애플리케이션 실행 개수를 2개로 늘림
$ ecs-cli compose --project-name tutorial service scale 2 --cluster-config tutorial
리소스 정리
- ecs-cli compose service down 명령으로 컨테이너 중지
- 정리해두지 않으면 계속 요금이 부과될 것임
$ ecs-cli compose --project-name tutorial service down --cluster-config tutorial
- 클러스터 종료
$ ecs-cli down --force --cluster-config tutorial
Subscribe via RSS