[AWS] 서버 용량 부족으로 인한 CodeDeploy 배포실패 해결하기😵‍💫

리리·2024년 9월 19일
0
post-thumbnail

문제 발견

'프리비' 서비스를 개발하는 과정에서 얼마전부터 계속 CodeDeploy를 이용한 배포가 실패하는 문제가 발생했다. 꽤 오래전부터 배포 실패가 계속되고 있었는데, 프론트엔드와 백엔드의 개발 속도가 다르다보니 로컬 테스트 위주로만 진행하고 배포환경에서 테스트를 소홀히해 문제 상황을 뒤늦게 인식하게 되었다. 😓


문제 분석

AWS CodeDeploy에 접속해 분석을 원하는 배포 ID를 클릭하면 해당 배포시도에 대한 세부 정보를 확인할 수 있고, 하단의 view events 버튼을 누르면 배포실패 원인에 대한 로그를 확인할 수 있다.


확인 결과 우리 서비스의 실패로그는 아래와 같았다. 배포를 시도했지만 ubuntu 서버 용량이 부족해 배포가 불가능했던 것이다.


No space left on device @ fptr_finalize_flush - /opt/codedeploy-agent/deployment-root/ongoing-deployment/d-YH9263EJ7


서버 용량 확인

실패 로그에서 서버 용량 부족이 문제임을 알려주고 있으므로, 이를 실제로 확인해 볼 필요가 있었다. /dev/root 파일을 보면 할당된 7.6GB의 서버 용량을 전부 사용해 Use 100%인 것을 확인할 수 있었는데, 실제로 용량 부족이 원인이 되어 배포에 실패했음을 추측할 수 있다🫠


문제가 되고 있는 /dev/root는 기본적으로 시스템 핵심 파일과 디렉토리들이 저장되는 공간으로, 실제 디렉토리는 아니고 루트 파티션을 참조하는 파일이다. 이 파일 시스템에는 다음과 같은 디렉토리들이 포함된다.

  • /home: 사용자 데이터, 홈 디렉토리
  • /var: 로그 파일, 캐시 파일 등
  • /tmp: 임시 파일
  • /opt: 추가 애플리케이션
  • /usr: 시스템 프로그램, 라이브러리
  • /etc: 시스템 설정 파일

즉, ubuntu 운영체제와 더불어 배포를 시도할때 설치되는 패키지, 로그, 배포파일 등 거의 모든 것이 저장되는 공간이다. 이 루트 파티션 전체의 용량이 부족한 것이기 때문에 용량 확보를 위해 불필요한 파일/디렉토리를 정리해주거나 아니면 서버 용량 자체를 늘려주는 방법을 생각할 수 있다.


서버 용량 확보

우선 불필요한 디렉토리나 파일을 삭제해 서버 용량을 확보하고자 했다. 용량이 큰 디렉토리 순서로 정렬해보았다.

용량이 큰 디렉토리 순서로 탐색하면서 불필요한 파일을 삭제하고자 했지만, 지우면 안될 파일과 지워도 되는 파일을 구분하기가 힘들었고 무엇보다 많은 파일을 삭제했음에도 확보한 용량이 0.1GB에 불과했다 🤣

sudo apt-get autoremove 명령어를 통해 불필요한 의존성 패키지를 제거해보기도 했지만 여전히 용량에 변동은 없었다..!


이렇게 하다가는 용량 확보하기가 너무 힘들 것 같아 아예 ec2 서버 용량을 늘리기로 했다. 현재는 기본 8GB 용량으로 설정되어 있는데, 우선 10GB로 조금만 늘려보기로 했다. 30GB까지가 프리티어로 지원되는데 현재 백엔드 서버 1개, 프론트엔드 서버 2개 각각에 8기가짜리 볼륨 3개가 이미 돌아가고 있기때문에 백엔드 서버 스토리지만 30으로 늘려버릴 수는 없었다.

  1. AWS EC2 -> 좌측 탭의 볼륨 -> 늘리려는 볼륨 선택 -> 볼륨수정

  2. 볼륨 크기 수정

  3. (2)단계에서 볼륨 크기를 수정하고 확인버튼을 누르면 아래와 같은 알림창이 뜬다. 여기서 볼륨 크기를 늘리는 경우 파일 시스템을 볼륨의 새 크기로 확장해야 합니다 이 문장이 중요하다! 단순히 볼륨 크기를 늘리면 물리적인 디스크 공간은 늘어나지만, 아직 파일시스템은 이 늘어난 공간을 인식하지 못하기 때문에 이를 인식할 수 있도록 별도로 설정해주는 작업이 필요하다.

  4. 파티션 확인
    lsblk 명령어를 사용해 확장된 디바이스를 확인한다. 내 경우에는 nvme0n1 디스크의 nvme0n1p1 용량을 증가시켜야 한다.

  5. 파티션 크기 조정 & 파일시스템 확장
    파일시스템 확장 전에 /dev/root 파일시스템은 7.6GB 사이즈를 갖고있음을 확인할 수 있다.

    
    sudo growpart /dev/nvme0n1 1
    sudo resize2fs /dev/root
    
    

    위 명령어를 연속으로 입력해 파티션 크기를 조정하고 파일시스템 확장을 수행할 수 있다.

  6. 확장된 파일시스템 확인
    10GB로 디스크 용량이 증가되었고 사용 가능한 공간 2.1GB가 확보되었다!


예방책

이 외에도 예방책으로 서버에 과거 배포본을 저장해두는 최대 개수를 조정해두었다. Code deploy 에이전트는 디폴트로 최대 다섯 개의 배포본을 저장해두는데 프로젝트가 커질수록 이 배포본 하나 하나의 크기가 커지면서 서버 용량 부족 문제로 이어지는 경우가 많은 것 같았다.
이 설정을 수정하려면 /etc/codedeploy-agent/conf 경로의 codedeployagent.yml 파일의 max_revisions를 조정하면 되는데, 나는 5 -> 2로 수정해 최대 두 개의 배포본만 저장되게끔 했다.

설정을 변경할때 단순히 vi codedeployagent.yml로 편집기를 열어서 저장하려고 하면 쓰기 권한이 없어서 반영이 안되므로 sudo 키워드를 붙여야 한다! 그리고 이 설정을 반영하기 위해서는 아래 명령을 통해 codedeploy agent를 재실행해줘야 한다.


sudo service codedeploy-agent restart


배포 성공!

은 아직 못했다 ㅜㅜ .. 용량을 늘리고 재배포를 시도했지만 또 새로운 오류가 발생했다🥲 다음 문제도 손보고 나면 진짜 배포 되겠지..



문제 해결에 참고한 글

0개의 댓글