AWS CodeDeploy 배포 실패

NCOOKIE·2023년 11월 9일
0
post-custom-banner

문제

AWS EC2에 올려뒀던 서버 프로그램이 갑자기 죽어버렸다. EC2 자체에 접근하는건 문제가 없었다. ssh로 접속해서 수동으로 서버를 시작했는데 조금 실행되다가 프로세스가 kill 당했다. 스프링 프로그램에서 에러를 뿜는게 아니라 시스템에서 프로세스를 죽인 것이기 때문에 RAM이나 하드웨어의 용량 문제일 것이라 추측했다.

원인

CodeDeploy

얼마 전 배포에 문제가 터졌을 때에도 CodeDeploy 측에 문제가 있었기 떄문에 CodeDeploy를 먼저 확인해보았다. (github Actions 동작에는 문제가 없었다.)

역시나 배포 실패 메시지가 떠있었다. 우선 서버의 로그 메세지를 확인해보았다. (CodeDeploy의 로그는 /var/log/aws/codedeploy-agent에서 확인할 수 있다.)

2023-11-09 21:31:16 INFO  [codedeploy-agent(2650)]: master 2650: Received CHLD - cleaning dead child process

로그를 확인해봤지만, 오늘 날짜의 것은 위와 같은 로그만 있었다. 저걸 검색해보니까 원래는 저 뒤로 더 많은 메시지가 있지만 모종의 이유로 더 이상 기록되지 않은 것 같았다.

위 사진은 배포 ID 조회했을 때 스크롤을 아래로 내려서 [배포 수명 주기 이벤트]의 View evnents 버튼을 누르면 확인할 수 있다. 이 에러 같은 경우에는 2가지를 체크하면 된다고 한다.

  1. CodeDeploy 역할이 인스턴스에 부여되어 있는지 확인
  2. CodeDeploy 의 Agent가 띄워져 있는지 확인

CodeDeploy 역할은 IAM에서 참고할 수 있다. 확인결과 문제 없었다. 다음은 EC2 서버에 CodeDeploy Agent가 실행되고 있는지 확인하는 것인데, 아래와 같은 명령어를 사용하면 된다.

sudo service codedeploy-agent restart
sudo service codedeploy-agent status

이를 실행하면 The AWS CodeDeploy agent is running as PID ~가 떠야되는데 나는 그렇지 않았다. 그래서 codedeploy 재설치를 진행하려고 했는데, 설치가 진행이 되지 않았다.

디바이스 용량부족

디렉터리의 용량을 확인해보았다.

[ec2-user@ncookie ~]$ df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  474M     0  474M   0% /dev
tmpfs          tmpfs     483M     0  483M   0% /dev/shm
tmpfs          tmpfs     483M  476K  483M   1% /run
tmpfs          tmpfs     483M     0  483M   0% /sys/fs/cgroup
/dev/xvda1     xfs         8G    8G   20K 100% /
tmpfs          tmpfs      97M     0   97M   0% /run/user/1000

EC2 서버 만들 때 할당해주었던 8GB를 전부 사용하고 있었다. 주범을 찾기로 했다.

[ec2-user@ncookie ~]$ sudo du -h --max-depth=1 apps | sort -hr
3.5G    apps
2.8G    apps/imad-logs
677M    apps/imad-server
40M     apps/spring-practice

참고로 리눅스의 du 명령어는 아래와 같은 옵션을 가지고 있는데, 저 명령어를 사용하면 첫 단계의 하위 디렉터리를 포함해서 디렉터리 용량을 기준으로 큰 순서로 표시된다.

어쨌든간에 범인을 찾았다. 예전에 만들어두고 신경을 덜 쓰고 있었는데 어느새 로그 메세지가 쌓이고 쌓여서 꽤 많은 용량을 차지하고 있는 것이었다. 나중에 서비스 규모가 더 커지고 시간이 지나면 더 많은 용량을 사용할테니 대안이 필요할 것이다. 다만 이는 나중에 생각하고 당장 용량을 늘려줘서 서버 프로그램을 가동하기로 했다.

EBS 용량 확인 및 수정

AWS의 EC2 콘솔의 [Elastic Block Store] - [볼륨]에서 할당한 용량을 확인할 수 있다. 수정 버튼을 눌러 용량을 늘려준다.

[ec2-user@ncookie ~]$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  16G  0 disk
└─xvda1 202:1    0  8G  0 part /

파티션 크기 늘리기

lsblk 명령어를 사용하여 적용이 잘 됐는지 확인해준다. 볼륨의 크기는 커졌지만 파티션인 xdva1은 그대로이다. 다음과 같이 늘려준다.

sudo growpart /dev/xdva1

XFS 리사이징

위에서 확인했던 것처럼 /dev/xdva1 파티션은 파일 시스템이 xfs이다. 최신 버전의 리눅스에서 사용되는 xfs는 아래와 같은 명령어를 사용하여 리사이징 해줄 수 있다.

[ec2-user@ncookie apps]$ sudo xfs_growfs /dev/xvda1
meta-data=/dev/xvda1             isize=512    agcount=4, agsize=524159 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1 spinodes=0
data     =                       bsize=4096   blocks=2096635, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 2096635 to 4193787

[ec2-user@ncookie apps]$ df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  474M     0  474M   0% /dev
tmpfs          tmpfs     483M     0  483M   0% /dev/shm
tmpfs          tmpfs     483M  440K  483M   1% /run
tmpfs          tmpfs     483M     0  483M   0% /sys/fs/cgroup
/dev/xvda1     xfs        16G  6.1G   10G  38% /
tmpfs          tmpfs      97M     0   97M   0% /run/user/1000

16GB로 늘린 용량이 잘 적용되었음을 확인할 수 있다. 이제 CodeDeploy Agent를 재설치하고 실행해보자.

[ec2-user@ncookie apps]$ sudo yum install -y ruby
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                                     
...(생략)
Saving to: ‘install’

100%[===================================================================================================================================================================================================>] 17,892      --.-K/s   in 0s

2023-11-09 22:23:38 (138 MB/s) - ‘install’ saved [17892/17892]

[ec2-user@ncookie apps]$ chmod +x ./install
[ec2-user@ncookie apps]$ sudo ./install auto
I, [2023-11-09T22:23:58.247061 #13580]  INFO -- : Starting Ruby version check.
I, [2023-11-09T22:23:58.247306 #13580]  INFO -- : Starting update check.
I, [2023-11-09T22:23:58.247421 #13580]  INFO -- : Attempting to automatically detect supported package manager type for system...
I, [2023-11-09T22:23:58.258867 #13580]  INFO -- : Checking AWS_REGION environment variable for region information...
I, [2023-11-09T22:23:58.258927 #13580]  INFO -- : Checking EC2 metadata service for region information...
I, [2023-11-09T22:23:58.279446 #13580]  INFO -- : Checking AWS_DOMAIN environment variable for domain information...
I, [2023-11-09T22:23:58.279522 #13580]  INFO -- : Checking EC2 metadata service for domain information...
I, [2023-11-09T22:23:58.285696 #13580]  INFO -- : Downloading version file from bucket aws-codedeploy-ap-northeast-2 and key latest/LATEST_VERSION...
I, [2023-11-09T22:23:58.286127 #13580]  INFO -- : Endpoint: https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/LATEST_VERSION
I, [2023-11-09T22:23:58.361775 #13580]  INFO -- : Downloading package from bucket aws-codedeploy-ap-northeast-2 and key releases/codedeploy-agent-1.6.0-49.noarch.rpm...
I, [2023-11-09T22:23:58.362004 #13580]  INFO -- : Endpoint: https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/releases/codedeploy-agent-1.6.0-49.noarch.rpm
I, [2023-11-09T22:23:58.461111 #13580]  INFO -- : Executing `/usr/bin/yum -y localinstall /tmp/codedeploy-agent-1.6.0-49.noarch.tmp-20231109-13580-8godg8.rpm`...
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Examining /tmp/codedeploy-agent-1.6.0-49.noarch.tmp-20231109-13580-8godg8.rpm: codedeploy-agent-1.6.0-49.noarch
Marking /tmp/codedeploy-agent-1.6.0-49.noarch.tmp-20231109-13580-8godg8.rpm as an update to codedeploy-agent-1.4.1-2244.noarch
Resolving Dependencies
--> Running transaction check
---> Package codedeploy-agent.noarch 0:1.4.1-2244 will be updated
---> Package codedeploy-agent.noarch 0:1.6.0-49 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================================================================================================================================================================================
 Package                                            Arch                                     Version                                     Repository                                                                                     Size
=============================================================================================================================================================================================================================================
Updating:
 codedeploy-agent                                   noarch                                   1.6.0-49                                    /codedeploy-agent-1.6.0-49.noarch.tmp-20231109-13580-8godg8                                    13 M

Transaction Summary
=============================================================================================================================================================================================================================================
Upgrade  1 Package

Total size: 13 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction

pre hook : 2
Stop the running codedeploy-agent in the pre hook.
  Updating   : codedeploy-agent-1.6.0-49.noarch                                                                                                                                                                                          1/2

post hook : 2
Check if there is a codedeployagent config file.
preun hook : 1
  Cleanup    : codedeploy-agent-1.4.1-2244.noarch                                                                                                                                                                                        2/2

postun hook : 1
Start codedeploy-agent in postun hook if this is an update or an install that is not a first install.
  Verifying  : codedeploy-agent-1.6.0-49.noarch                                                                                                                                                                                          1/2
  Verifying  : codedeploy-agent-1.4.1-2244.noarch                                                                                                                                                                                        2/2

Updated:
  codedeploy-agent.noarch 0:1.6.0-49

Complete!
I, [2023-11-09T22:24:02.079748 #13580]  INFO -- : Update check complete.
I, [2023-11-09T22:24:02.079835 #13580]  INFO -- : Stopping updater.
[ec2-user@ncookie apps]$ rm -rf install
[ec2-user@ncookie apps]$ sudo service codedeploy-agent status

The AWS CodeDeploy agent is running as PID 13714

sudo service codedeploy-agent status 실행 결과 PID가 잘 뜬다. 이제 CodeDeploy의 배포를 다시 실행해보자.

잘 된다!!

결론

현재 개발 중인 프로젝트가 마무리 되면 AWS 쪽에도 많은 신경을 써야할 것 같다. 위에서 언급했던 로그 관리 외에도, 서버의 성능 모니터링, 대규모 트래픽 발생 시 대처법 등 다양한 부분에 대해 생각해두어야 한다.

참고

profile
일단 해보자
post-custom-banner

0개의 댓글