2022.01.21 CodeDeploy 배포 오류 해결
갑자기 코드디플로이 배포 실패가 나기 시작했다.
배포 설정을 변경한 사람도, 서버에 직접 접속해 작업한 사람도 없다. 어느 순간부터 배포가 안되면서 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... 고맙습니다... 다음부터는 콘솔부터 확인할게요...
2. CodeDeploy 로그 확인
Ubuntu 기준 로그 위치는 : /var/log/aws/codedeploy-agent
용량으로 인한 배포 실패 방지를 위해서 아래 작업을 진행
- 어디서 용량이 차는 지 확인
- CodeDeploy 로그도 고작 5.5MB
- 배포에 필요한 파일들을 모두 합해도 250MB가 되지 않음
- 현재 용량 6.3 GB
- 주기적으로 클렌징 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 에 코드디플로이 배포본수 변경하는 가이드 작성함
'업무일지' 카테고리의 다른 글
2022.05.16 쿼리 최적화를 통한 API 속도 개선 (0) | 2022.05.21 |
---|---|
2022.04.20 AWS 인프라 구성하기 사내 세미나 (0) | 2022.05.09 |
2021.10.06 첫 사내 세미나 (Master/Slave DB) (0) | 2021.12.24 |
2021.09.23 DB 장애로 배운 Master/Slave DB 아키텍처 개선 방향 (0) | 2021.12.09 |
2021.09.02 로그인 세션을 Redis로 이관 (무상태 웹 아키텍쳐, CAP 이론) (1) | 2021.10.16 |
댓글
이 글 공유하기
다른 글
-
2022.05.16 쿼리 최적화를 통한 API 속도 개선
2022.05.16 쿼리 최적화를 통한 API 속도 개선
2022.05.21 -
2022.04.20 AWS 인프라 구성하기 사내 세미나
2022.04.20 AWS 인프라 구성하기 사내 세미나
2022.05.09 -
2021.10.06 첫 사내 세미나 (Master/Slave DB)
2021.10.06 첫 사내 세미나 (Master/Slave DB)
2021.12.24 -
2021.09.23 DB 장애로 배운 Master/Slave DB 아키텍처 개선 방향
2021.09.23 DB 장애로 배운 Master/Slave DB 아키텍처 개선 방향
2021.12.09