본문 바로가기

개발노트

[Django][AWS] 마이그레이션용 컨테이너 분리

  • 배경 
    회사에서 github action을 사용해서 AWS ECR에는 application server(django+DRF)의 docker image를, AWS ECS에는 task definition을 업로드하고 ECS service로부터 task definition을 사용해서 서버를 기동시키는 방법으로, 배포를 해왔습니다.에러가 발생한 부분은, github action의 aws-actions/amazon-ecs-deploy-task-definition@v1 스탭이었습니다. 30분이 지나자 time error가 발생했습니다.
    여태까지 문제없이 배포가 되었는데, github action에서 배포 중, time error가 발생했습니다. 평소에는 배포하는데 테스트를 포함해서 5-6분이면 배포가 완료되었는데 30분이 지나도 배포완료되지 않았습니다.
  • 문제파악
    migration의 대상이었던 테이블을 확인해보니까 사이즈가 상당했습니다. 배포 전 버전인 테스트용 dummy data의, table을 로컬에서 migration했더니 로컬에서도 완료될 때까지 40분이상 걸렸습니다.그렇다면, migration이 길어져서 배포가 실패했다, 정확히는 github action의 aws-actions/amazon-ecs-deploy-task-definition@v1 스탭은 배포하는데 30분이상 시간이 걸리면, 배포를 할 수 없다, 라고 가정했습니다.
    1. migration이 느린 이유를 해결하기
    2. ecs-deploy-task-definition 스탭에서 배포시간을 늘릴 수 있는 설정이 있는지 찾아보고 해결하기
    현재 파악한 문제를 팀원들에게 공유하고 프로덕트 오너에게 보고했습니다.
    이를 해결하기 위해서는 2개의 방법이 있다고 생각했습니다.
    배포를 한 팀원에게 로컬에서 테스트를 할 때 migration이 어느정도 걸렸는지 물었고 비슷한 대답을 들었습니다.(수행한 작업은 단지 하나의 model에 field를 2개 추가한 것 뿐이었습니다.)
    ecs task의 로그를 확인하니까 migration 중인 로그가 마지막 로그였습니다. 그렇다면 서버를 run할 때 사용되는 image는 제대로 build가 되었고 ecs service는 그 이미지를 run하는 것 까지는 성공했지만 migration이 제대로 되지 않았다고 추측했습니다.