fastapi - fargate 배포 자동화를 위해 설정해야하는 것들은 다음과 같다.
github actions 를 사용해 docker image build 후 ECR에 push
ECS Fargate 구성
AWS CodePipeline 을 사용하여 ECR 에 이미지가 새로 올라오는 것을 감지하여 Fargate 에 배포
클러스터 구성
fargate 환경에서 cpu, memory 등의 지표를 확인하기 위해 container insights 옵션만 체크하고, 클러스터 이름만 지정하여 생성
테스크 구성
시작유형 fargate 설정
테스크 크기 설정 (uvicorn 애플리케이션은 단일 프로세스이므로 1vCPU, 2GB로 구성하였음)
ECR URL 을 사용하여 컨테이너 이미지 설정
포트는 내부적으로 사용하는 8800 포트 사용 (도커 네트워크를 통해 컨테이너에 연결할 포트. 외부 포트와는 관련 없음)
서비스 구성
fargate 용량 공급자 선택
로드밸런서 신규 생성 (HTTPS 적용 및 이후 스케일 아웃 시 로드밸런서를 구성하는 것이 편함)
default VPC 사용 (전부 public 이기 때문에 실제 서비스 시 변경해야함)
서비스 자동 크기 조정 정책 설정 - memory 70퍼 이상 시 스케일 아웃, 최소 task 1개, 최대 task 5개
아래 블로그 참고
Amazon ECR 및 AWS CodePipeline을 사용하여 ECS에 배포하기
위 블로그대로 따라가면 잘못된 json 포멧이라거나, 컨테이너 이름을 찾을 수 없다는 에러가 발생한다.
code build project 설정에서 buildspec을 정의하는 부분이 있는데, name 값으로 “container_name” 을 사용해야한다.
post_build:
commands:
- printf '[{"name":"CONTAINER_NAME","imageUri":"%s"}]' REPOSITORY_URI:IMAGE_TAG > imagedefinitions.json
artifacts:
files: imagedefinitions.json