Share
Sign In

ECS & ECR & OpsWorks

💡
Docker 아시죠?
1. ECS
ECS Cluster
EC2 인스턴스의 논리적 묶음이다. 해당 인스턴스들은 ECS 전용 AMI 위에 ECS agent가 돌아가야 한다.
Task Definitions
ECS에게 어떻게 도커 컨테이너를 동작해야 하는지 알려주는 JSON 형식의 메타데이터이다. 컨테이너에 대한 모든 것을 정의만 하지, 실제 동작을 시키지는 않는다!
Task : Task definition을 참조해 실제 cluster에 생성된 컨테이너를 말한다. 클래스와 인스턴스의 관계랄까
Host port를 빈칸으로 하면 동적으로 생성한다. 이렇게 해야 한 인스턴스에 여러 컨테이너를 실행할 때 포트 충돌이 발생하지 않는다.
Service
task를 cluster 위에 어떻게 동작시킬지 정의한다. ECS는 service를 보고 task를 생성한다.
Auto scaling이나 배포 전략 등을 설정한다.
Load balancer와 연결하면, service 안의 task들이 자동으로 연결된다.
Fargate
EC2를 쓰지 않고, task definition과 service만 만들면 알아서 컨테이너를 생성해주는 서버리스 ECS 서비스이다.
Elastic Beanstalk과 ECS
EB의 Single & Multi Docker Container mode는 ECS를 생성해, 그 위에서 동작한다. 소스 코드의 Dockerrun.aws.json에 설정을 정의한다.
IAM Roles
Auto Scaling
ECS에서 auto scaling은 Task 수를 늘리는 것과 EC2 인스턴스 수를 늘리는 것 두 가지가 있다.
Service에서는 auto scaling을 하기 위한 두 가지 옵션이 있는데,
Target tracking : 특정 지표를 만족하도록 알아서 scaling
Step scaling : 특정 지표를 만족했을 때, scaling
CloudWatch와 연동
Task definition에서 로그를 CW로 보내도록 설정할 수 있다. 그러면 CW에서 service별로 지표와 로그를 볼 수 있다. 또한 event와 alarm을 설정할 수도 있다.
CodePipeline CI/CD
https://ecsworkshop.com/introduction/cicd
2. ECR
IAM으로 접근을 제어하는 private 도커 이미지 저장소이다.
3. Opsworks
💡
Opsworks를 제대로 쓰려면 Chef를 알아야 하기 때문에, 여기서는 OpsWorks Stacks만 다룬다.
OpsWorks는 infrastructure, configuration, application을 한 번에 관리할 수 있게 도와주는 서비스이다.
OpsWorks Stack
LB 레이어, Application 레이어, DB 레이어 같이 역할별로 레이어(인스턴스 그룹)을 나눈다. 그리고 레이어의 집합을 스택이라고 부른다.
OpsWorks는 Cookbook을 통해 인스턴스를 프로비저닝하고 어플리케이션을 가져와 배포한다.
Instance Type
OpsWorks에서는 인스턴스마다 크기, 타입, AZ를 각각 설정해줘야 한다.
24/7 : 24시간 돌아가는 인스턴스
Time-based : 특정 시간대에만 실행한다.
Load-based : 레이어의 평균 CPU / Memory 사용량이 임계치를 넘었을 때만 실행한다.
Deployment
레이어 전체에 어플리케이션을 배포할 수 있다.
커맨드를 일괄 입력해 업데이트를 진행할 수 있다.
Stacks Lifecycle Events
각각의 생명주기 이벤트마다 원하는 명령(reciept)을 실행할 수 있다.
Setup : 인스턴스의 부팅이 끝남. 끝나면 online state에 진입함
Configure : 인스턴스 하나라도 online state에 진입하거나 나가면, 스택의 모든 인스턴스가 configure reciept를 실행한다. 인스턴스끼리 서로의 상태를 확인할 때 주로 사용한다.
Deploy : deploy 명령을 실행
Undeploy : App을 지웠거나 undeploy 명령을 실행했을 때
Shutdown : shutdown 명령이 실행되었지만, 실제 종료되기는 전. online state가 아니게 됨 → configure 이벤트
Auto Healing & CloudWatch Events
OpsWorks Stacks agent와 5분동안 소통이 안되면 인스턴스를 실패로 처리한다. 그러면 OpsWorks는 해당 인스턴스를 정지하고 새로 실행한다.
인스턴스 실패 이벤트는 CloudWatch Event를 통해 다른 서비스에 넘길 수도 있다.