AWS에서 제공하는 컨테이너 오케스트레이션 서비스로 여러 어플리케이션 컨테이너를 쉽고 빠르게 실행하고,컨테이너를 적절하게 분배 및 확장 & 축소 할 수 있도록 도와주는 서비스.
비슷한 서비스로 Docker의 Docker Swarm, 구글의 Kubernetes, 하시코프의 Nomad등이 있다.
Googel의 쿠버네티스에 비해 다소 오케스트레이션에 부족한 기능들도 있지만, ECS에서 제공해주는 정도의 수준만 필요한 경우라면 비용적인 부분이나, 다른 오케스트레이션에 비해 비교적 적은 학습 시간으로 빠르게 여러분들의 서비스를 ECS로 적용할 수 있다.
논리적인 공간
.태스크는 2가지 방법을 실행가능하다.
(1) 태스크 디피니션으로 직접 태스크를 실행.
(2) 서비스
정의.
(1)방법은 곧바로 실행되고 이후에 관리되지 않는다. 특별한 이유 없다면 거의 사용 X.
(2)방법은 클러스터에서 개수만큼 태스크가 실행되도록 자동적으로 관리해준다.
리플리카와 데몬 타입이 있는데, 데몬은 모든 컨테이너 인스턴스에 해당하는 테스크가 하나씩 실행된다. 그래서 인스턴스 관리를 위한 용도로 사용된다. 리플리카는 웹서버를 비롯한 실제 서비스에 주로 사용.
즉, 태스크를 관리하는 상위그룹이라고 볼 수 있습니다.
실행 유형
(1) EC2
(2) Fargate (serverless)
ECS 클러스터내에 인스턴스가 없어도, 태스크에 정의한 CPU, 메모리 설정에 따라 인스턴스 없이 서버리스 하게 서비스를 실행할 수 있다.
1) EC2
version: 0.2
phases:
install:
runtime-versions:
nodejs: 16
commands:
- npm i npm@latest -g
pre_build:
commands:
- npm install
build:
commands:
- npm run build
artifacts:
files:
- 'deploy-live/**/*'
name: mktc-bundle-live
2) ECS
version: 0.2
phases:
install:
runtime-versions:
nodejs: 16
docker: 20
commands:
- npm i npm@latest -g
pre_build:
commands:
- aws ecr get-login-password /*하단 푸시 명령어 보기 참고*/
- REPOSITORY_URI= /*레지스트리 URI*/
- COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
- npm install
build:
commands:
- echo Npm 빌드
- npm run build
- echo 도커 이미지 빌드
- docker build -t $REPOSITORY_URI:latest deploy/live
post_build:
commands:
- echo ECR 푸시
- docker push $REPOSITORY_URI:latest
- echo Writing image definitions file...
- printf '[{"name":"/*레지스트리 이름*/","imageUri":"%s"}]' $REPOSITORY_URI:latest > imagedefinitions.json
artifacts:
files: imagedefinitions.json
ECR을 만든뒤 상단에 [푸시 명령보기] 버튼을 통해 확인할 ECR에 푸시하는 명령어를 볼 수 있다.
해당 레지스트리에 image가 올라가있다면 build가 잘 된걸 확인 할 수 있다.
출처
https://boostbrothers.github.io/technology/2020/01/29/AWS-ECS-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0/
https://countrymouse.tistory.com/entry/awsecs
https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/launch_types.html