반응형

갑자기 코드디플로이 배포 실패가 나기 시작했다.
배포 설정을 변경한 사람도, 서버에 직접 접속해 작업한 사람도 없다. 어느 순간부터 배포가 안되면서 AWS CodeDeploy 콘솔에서 아래와 같은 오류가 발생했다.

The overall deployment failed because too many individual instances failed deployment, too few healthy instances are available for deployment, or some instances in your deployment group are experiencing problems.


현상

이게 또 오류 원인과 현상이 기가 막히게 달라서 혼란스러웠다.
AWS 오류 메시지로 원인 파악이 어려워서 EC2 서버에 직접 접속해 CodeDeploy 로그와 파일을 살펴봤다.

1. 파일이 root 권한으로 생성됨 (이미 존재하는 파일로 인한 오류)

원래는 배포 관련 모든 파일이 ubuntu 사용자로 생성되야 하는데, 갑자기 일부 파일이 root 권한으로 생성되었음.
이후 배포 시도 시 권한 문제로 root 소유자의 파일을 지울 수 없어서 이미 존재하는 파일이라는 에러가 났음.

The deployment failed because a specified file already exists at this location: /home/ubuntu/appspec.yml

원래대로라면 모든 파일은 ubuntu 소유자로 생성되고, 삭제될 수 있어야함.
왜 갑자기 일부 파일이 root 소유자로 생성되었을까? (참고로 appspec.yml 파일을 수동으로 삭제해주면 정상 배포됨)

2. 어? 용량이 부족하다고?

코드디플로이 로그를 살펴보던 중 다른 에러 로그도 발견함! 이게 머선129

2022-01-21 06:37:20 INFO  [codedeploy-agent(1002)]: [Aws::CodeDeployCommand::Client 200 0.040801 0 retries] put_host_command_complete(command_status:"Failed",diagnostics:{format:"JSON",payload:"{\"error_code\":5,\"script_name\":\"\",\"message\":\"No space left on device @ fptr_finalize_flush - /opt/codedeploy-agent/deployment-root/deployment-instructions/f7ea94ad-5e9e-4960-909c-a90aa50353b5-cleanup\",\"log\":\"\"}"},host_command_identifier:"eyJiYXRjaElkIjoiZmIxMDRhYzg2OWZjMzI3ODMwYzMzM2UzYjIzNWRjZjAvcHVibGljMDA2IiwiZGVwbG95bWVudElkIjoiQ29kZURlcGxveS9hcC1ub3J0aGVhc3QtMi9wcm9kL29ycGhldXM6cHVibGljMDA1LzYzOTM3NDg5MzE3OTpkLUtIRk1CMzRNRSIsImhvc3RJZCI6ImFybjphd3M6ZWMyOmFwLW5vcnRoZWFzdC0yOjYzOTM3NDg5MzE3OTppbnN0YW5jZS9pLTAyNzFlNDk4YWJjMTk5NWY1IiwiY29tbWFuZElkIjoiQXBvbGxvRGVwbG95Q29udHJvbFNlcnZpY2V8YXJuOmF3czplYzI6YXAtbm9ydGhlYXN0LTI6NjM5Mzc0ODkzMTc5Omluc3RhbmNlL2ktMDI3MWU0OThhYmMxOTk1ZjV8NHwwIiwiY29tbWFuZE5hbWUiOiJJbnN0YWxsIiwiY29tbWFuZEluZGV4Ijo0LCJhdHRlbXB0SW5kZXgiOjF9")

2022-01-21 06:37:20 ERROR [codedeploy-agent(1002)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Error during perform: Errno::ENOSPC - No space left on device @ fptr_finalize_flush - /opt/codedeploy-agent/deployment-root/deployment-instructions/f7ea94ad-5e9e-4960-909c-a90aa50353b5-cleanup - /opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/installer.rb:47:in `close'

해결

정말 용량이 부족해서 그런걸까? df -h 명령어로 용량 확인해봤다.
사실 나는 난독증이 있는 지 용량이 31% 여유롭다고 봤었는데, 동료분이 용량이 부족하다는 것을 확인해주셨다.
내가 조회했을 때에는 -h 옵션을 주지 않아서 5xxxx 정도의 여유가 있다고 봤었는데, 사실 그게 KB면 흡... 여튼 아래와 같이 용량이 꽉 차 있었다.

 /dev/xvda1      7.7G  7.7G     0 100% /
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            473M     0  473M   0% /dev
tmpfs            98M  796K   97M   1% /run
/dev/xvda1      7.7G  7.7G     0 100% /
tmpfs           488M     0  488M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           488M     0  488M   0% /sys/fs/cgroup
/dev/loop0       56M   56M     0 100% /snap/core18/2284
/dev/loop1       44M   44M     0 100% /snap/snapd/14295
/dev/loop2       43M   43M     0 100% /snap/snapd/14066
/dev/loop3       34M   34M     0 100% /snap/amazon-ssm-agent/3552
/dev/loop4       25M   25M     0 100% /snap/amazon-ssm-agent/4046
/dev/loop5       56M   56M     0 100% /snap/core18/2253
tmpfs            98M     0   98M   0% /run/user/1000

일단 어디서 용량이 찼는 지는 모르겠으나 확인을 위해 잠시 EC2 용량을 늘려서 코드디플로이를 재배포했고 정상적으로 배포되었다.


다음에는 이렇게 확인하자

1. AWS CodeDeploy 콘솔 내 이벤트 로그 확인

이걸 왜 이제 봤을까...? 이미... 용량이 없다고 알려주고 있었구나^^...
역시 갓AWS... 고맙습니다... 다음부터는 콘솔부터 확인할게요...

CodeDeploy 배포 이력 상세 이벤트로그에 정확하게 오류 원인을 안내해주고 있음

2. CodeDeploy 로그 확인

Ubuntu 기준 로그 위치는 : /var/log/aws/codedeploy-agent


용량으로 인한 배포 실패 방지를 위해서 아래 작업을 진행

  1. 어디서 용량이 차는 지 확인
    • CodeDeploy 로그도 고작 5.5MB
    • 배포에 필요한 파일들을 모두 합해도 250MB가 되지 않음
    • 현재 용량 6.3 GB
  2. 주기적으로 클렌징 or 불필요한 파일이라면 아예 남지 않도록 설정(약 2.2G 줄임)
    • sudo apt-get autoremove 명령어 이용하여 오래된 aws header 삭제(/usr/src 폴더 내에 aws 관련 파일이 버저닝되어있음) → 0.6G 줄었음
    • /opt/codedeploy-agent/deployment-root 위치에 코드디플로이를 통해 최근 배포된 5개 이력의 파일들이 관리되고 있는대 최근 2개만 관리되도록 변경 → 1.6G 줄었음 
      • /etc/codedeploy-agent/conf/codedeployagent.yml 에서 :max_revisions 를 5(default) 에서 2로 변경함
      • sudo service codedeploy-agent restart 변경된 코드디플로이 환경설정 적용을 위해 재시작
      • https://prohannah.tistory.com/202 에 코드디플로이 배포본수 변경하는 가이드 작성함​
 

CodeDeploy에서 저장하는 배포본의 수 변경하기 (용량 줄이기)

AWS CodeDeploy를 이용해서 EC2 에 Srpingboot 어플리케이션을 배포하고 있다. 그런데 EC2에 코드 디플로이를 통해 배포된 최근 5개의 이력과 파일이 관리되기 때문에 jar 파일이 뚱뚱해질 수록 EC2의 용량

prohannah.tistory.com

 

반응형