AWS ECS fargate를 사용한 Appilication 배포 - 2
지난 글에서는 Fargate를 통해 Appilication을 배포하였고 본 글에서는 Appilication이 도커 이미지 또는 작업이 업데이트 되는 경우와 기타 옵션들에 대해 좀 더 자세히 확인하도록 하겠습니다.
웹 어플리케이션 업데이트
소스가 업데이트 되었으니 지난글에서와 같이 우선 ECR에 푸쉬 하도록 하겠습니다.
푸쉬 명령어 4개 중에 1번의 로그인 과정은 최초 로그인 후 12시간이 지속되니 로그인 세션이 남아있다면 생략 가능 합니다. 추가로 푸쉬전에 태깅을 할때 latest로 태깅을 하면 지난 푸쉬 이미지 Tag과 겹치니 버전과 같은 고유한 숫자, 문자등으로 식별할 수 있도록 구분하여 태깅합니다.
이번 푸쉬 명령어에서는 최초에서 변경된 내용만 업데이트 되었습니다.
(venv) user:~/hello_app$ docker build -t fargatedemo/helloapp .
Sending build context to Docker daemon 67.66MB
Step 1/8 : FROM python:alpine
---> 1a8edcb29ce4
Step 2/8 : LABEL Name=flaskapp Version=0.0.1
---> Using cache
---> 840ae2afa937
...(중략)...
Successfully built 74b72d5f1369
Successfully tagged fargatedemo/helloapp:latest
(venv) user:~/hello_app$
푸쉬가 끝난 후 ECR에서 repository를 확인하면 다음과 같이 image가 추가 되어 있습니다.
새로운 이미지를 생성하였으니 작업정의도 업데이트가 필요 합니다. 업데이트를 하기 위하여 작업정의 항목에서 지난글에서 작성한 작업정의를 체크한 후 새 개정 생성을 클릭합니다.
지난글에서 작성하였던 작업정의 생성 화면과 거의 유사한 설정 화면이 나옵니다. 설정한 것들은 현재는 크게 바뀌지 않았고 소스 코드가 담긴 도커 이미지가 바뀌었으니 하단에 컨테이너 정의 항목으로 이동하여 해당 컨테이너를 클릭하여 설정화면이 나오면 이미지의 URL을 새로 업데이트 된 이미지의 URL로 변경합니다.
다음은 컨테이너 항목 창에서 업데이트를 클릭하여 나온 후 최하단의 생성 버튼을 눌러서 새 개정을 생성해 주면 다음과 같이 개정이 추가 됩니다.
추후에도 개정을 도커이미지 업데이트(소스 변화)에 따라 생성시 버젼별로 작업을 관리 할 수도 있고 서비스 업데이트 후 문제가 발생시 지난 버전의 작업으로 빠르게 롤백이 가능합니다.
새로운 작업정의를 바탕으로 서비스도 업데이트가 필요 합니다. 서비스 업데이트를 위해 클러스터 항목에서 지난글에서 작성한 서비스가 포함된 클러스터를 클릭하면 다음과 같이 클러스터에 대한 상세 정보가 표시 됩니다. 업데이트를 할 서비스를 체크 후 업데이트 합니다.
서비스 생성시 화면과 유사한 1단계 설정 화면이 표시되는데 Revision을 최신 버전으로 변경하고 새 배포 적용에 체크를 하고 다음 단계로 넘어갑니다.
추가로 2단계 네트워크 설정 및 3단계 오토스케일링도 변동이 없다면 4단계 검토 화면까지 넘어가서 서비스 업데이트를 적용합니다.
서비스가 업데이트 되면 Fargate는 작업 개수, 최소 정상 상태 백분율, 최대 백분율 배포를 수행합니다.
배포 중에 배포 화면은 다음과 같이 새로 배포된 작업정의 개정이 PRIMARY이지만 기존 작업도 실행하다 안정화 된 후 제외됩니다.
역시 작업탭에서도 Task2의 기존 작업 외에 Task 3이 프로비저닝 -> 펜딩 -> 런닝 상태로 진행 되어 정상 작동시 서비스를 인계 후 기존 작업은 추후에 중지 됩니다.
서비스 업데이트 후 추가로 한 /welcome 경로에 대한 서비스가 추가 되었습니다.
부록
배포 관련 옵션
지난 글에서 배포 관련 옵션인 작업 개수, 최소 정상 상태 백분율, 최대 백분율 배포에 대하여 간략하게 넘겼는데 다음과 같습니다.
작업 개수 - 사용자가 원하는 평상시 원하는 실제 서비스 작업 숫자
최소 정상 상태 백분율 - 작업 개수 대비 배포가 진행중 작업의 stuatus RUNNING의 필수 백분율
최대 백분율 - 작업 개수 대비 배포 진행되는중 PROVISIONING, RUNNING, PENDING 등의 모든 상태가 가능한 백분율
예를 들면 작업개수가 2 이고 최소가 50, 최대가 100이면 배포를 진행하기 위해 이미 실행중이던 작업 하나를 중단하는 상황이 발생 합니다.
최소와 최대의 비율에 따라 대략적으로 아래표와 같이 진행합니다.
결론은 클러스터 자원을 적게 하기 위해서는 1~2번 방법을 가용성을 위해서는 3~4번을 사용하면 되겠습니다.
다만 Fargate 특성상 초단위로 사용한 비용만 청구 되고 실제 4번 단계로 진행되어도 작업개수의 200%로 작업이 진행되는 10분 내외이기 때문에 최대 백분율은 default인 200%가 좋을듯 합니다.
최소정상상태 |
최대 백분율 |
작업 분류 |
배포전 |
단계 1 |
단계 2 |
단계 3 |
단계 4 |
50% |
100% |
기존 작업 |
2(success) |
1(success) |
1(success) |
|
|
배포 대상 작업 |
|
|
1(success) |
1(success) |
2(success) |
||
50% |
150% |
기존 작업 |
2(success) |
2(success) |
1(success) |
|
|
배포 대상 작업 |
|
1(pending) |
1(pending) |
1(success) 1(pending) |
2(success) |
||
100% |
150% |
기존 작업 |
2(success) |
2(success) |
1(success) |
1(success) |
|
배포 대상 작업 |
|
1(pending) |
1(success) 1(pending) |
2(success) |
2(success) |
||
100% |
200% |
기존 작업 |
2(success) |
2(success) |
2(success) |
|
|
배포 대상 작업 |
|
2(pending) |
2(success) |
2(success) |
|
스케일 업
'aws' 카테고리의 다른 글
AWS ECS fargate를 사용한 Appilication 배포 - 4 Blue/Green Deployments (1) | 2019.02.12 |
---|---|
AWS ECS fargate를 사용한 Appilication 배포 - 3 CodePipeline을 통한 CI/CD (0) | 2019.02.12 |
AWS ECS fargate를 사용한 Appilication 배포 - 1 (0) | 2019.01.20 |