Ubuntu 20.04 CodeDeploy-Agent 설치 에러

크리링·2023년 11월 18일
0

오늘의 문제

목록 보기
9/9
post-thumbnail

특정 서버에 자동 배포 업무를 맡게 되면서 Jenkins와 AWS의 CodeDeploy, S3를 사용하였는데
설치 과정에서 만난 오류 과정을 공유하려 한다.
(특히 Ubuntu 20.04 버전에서 codeDeploy-agent 설치)






CI 과정 순서도

  • 코드를 작성하고 Github에 PR을 웹훅에 연결된 브랜치에 남기고 MERGE 하면
    Jenkins로 웹훅이 작동한다.
  • Jenkins에서 자동으로 빌드와 테스트가 이뤄지며 빌드의 결과물은 AWS S3에 보내주고,
    AWS CodeDeploy에 배포 요청을 한다.
  • AWS CodeDeploy는 연결된 EC2에 zip 파일을 풀고 배포 스크립트를 실행해 JAR 파일을 실행한다.

위 순서의 자동 배포 과정을 구현하는데 EC2에 codeDeploy-Agent를 설치하는데 많은 시간을 소모해서 정리해봤다.

상세하게 기록하고 싶었지만 맞이한 이슈와 해결과정만 기록한 점 양해 부탁드립니다.

제목에서 언급했듯이 서버 환경은 Ubuntu 20.04 버전입니다.







Jenkins 설치를 완료하고 AWS CodeDeployS3 버킷과도 연결을 했고, Github 웹훅도 제대로 동작을 확인했을때 다음과 같은 오류를 맞이했다.



오류와 해결 과정

CodeDeploy 오류 내용과 codeDeploy-Agent 설치 시작

Jenkins에서는 SUCESS BUILD 라고 나왔고, CodeDeploy를 확인해본 결과 다음과 같은 오류 내용이 있었다.

이때만해도 '다행히 연동은 잘 됐나보다'라고 긍정할 수 있었다.
그리고 View Details에서 상세 오류 내용을 확인하면

EC2codeDeploy-agent가 실행되고 잘 연결되어야 codeDeploy가 동작하는데 이전에 설치한 codeDeploy-agent가 잘 실행되지 않았는지 확인해보았다.

확인 결과 활성화 상태가 failed이다.






과정1. 공식 홈페이지 VER

Amazon Linux 또는 RHEL용 CodeDeploy 에이전트 설치 - AWS CodeDeploy
위 글을 기반으로한 다양한 블로그 글을 따라해보았다.
(이때까지만해도 공식 홈페이지 글은 재미없고 그림이 별로 없어 기피했다.)

cd ~
wget https://aws-codedeploy-us-east-1.s3.us-east-1.amazonaws.com/releases/codedeploy-agent_1.3.2-1902_all.deb

바로 error가 발생했다.
error 내용은 명령어가 잘못됐다는 내용이었다.

공식 홈페이지의 region-identifier을 면밀히 확인한 결과 ap-northeast2ap-northeast-2로 바꾸니 해결되는 문제였다.

설치에 성공했고

chmod +x ./install

sudo ./install auto

에서 에러가 발생했다.

도저히 해결할 수 없어서 방법을 바꿨다.






과정2. codeDeploy-agent Github Issue

검색 끝에 나와 비슷한 이슈를 가진 codeDeploy 설치 Issue 글에서 찾아 따라서 해보았다.

sudo wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install

- mkdir codedeploy-agent_1.3.2-1902_ubuntu20

- dpkg-deb -R codedeploy-agent_1.3.2-1902_all.deb codedeploy-agent_1.3.2-1902_ubuntu20

- sed 's/Depends:.*/Depends:ruby3.0/' -i ./codedeploy-agent_1.3.2-1902_ubuntu20/DEBIAN/control

- dpkg-deb -b codedeploy-agent_1.3.2-1902_ubuntu20/

- sudo dpkg -i codedeploy-agent_1.3.2-1902_ubuntu20.deb

잘 되다가 마지막 패키지를 설치할 때 설치가 잘 안되는 문제가 발생했다.
ruby 버전이 3.x 대가 아니어서 나는 문제 같아 ruby를 설치하려고 노력했다.

(날로 먹으려 했지만 되지 않았다.)
ruby 3.0 설치는 간단한 명령어로 되지 않아 다른 방법으로 ruby 3 버전 대를 설치하려했다.






과정3. Ruby 3.0 설치

Ubuntu 20.04에서 Ruby 다른 방법으로 설치
검색 끝에 다른 방법으로 ruby 3버전을 설치하는 글이 있어 따라해 보았다.

- sudo apt install ruby-full

- ruby --version 

- sudo apt update

- sudo apt install curl g++ gcc autoconf automake bison libc6-dev libffi-dev libgdbm-dev libncurses5-dev libsqlite3-dev libtool libyaml-dev make pkg-config sqlite3 zlib1g-dev libgmp-dev libreadline-dev libssl-dev

- gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB 

- curl -sSL https://get.rvm.io | bash -s stable

- source ~/.rvm/scripts/rvm

- rvm install 3.0.0

또 잘 되다가 마지막 install 부분에서 오류가 다음과 같은 발생했다.

해결을 하기위해 검색과 시도를 한 끝에 rvm 3 버전 설치 글을 발견해 과정을 따라갔다.

- rvm pkg install openssl

- rvm install ruby -3.0.0 --with-openssl-dir=/usr/share/rvm/usr

그러다 또 install 부분에서 비슷한 에러가 발생했다.

무슨 에러인지 정확한 원인을 모르겠지만 3.0.0 버전의 설치가 안되는 것 같다.
그래서 최근 버전인 3.0.6 버전으로 설치하니 잘 동작했다.

- rvm install 3.0.6 --default

위 명령어로 버전을 바꾸니 설치할 수 있었다.

그리고 위의 글(rvm 3 버전 설치)의 절차를 다시 따라가는데

- rvm group add rvm $USER

- rvm fix-permissions

자 이제 rvm을 통해 설치를 마쳤으니 우분투 20.04 Ruby 3버전 설치을 따라 rvm 버전을 적용하러 갔다.

- rvm use 3.0.6 --default

다행히도 재접속 후 명령어를 입력하니 해결되었다.

자 이제 다시 돌아가 CodeDeploy-Agent를 설치하는데
이전의 오류는 변하지 않았다. 무심코 욕이 나와버렸다.






과정4. AWS 공식 CodeDeploy-Agent 설치 (Ubuntu 20.04)

이제 뭘 더 해야될지 감이 안 잡히다가 다시 처음으로 돌아가봤다.
AWS 공식 CodeDeploy-Agent 설치 글을 보고있는데 중간에 잘 안되니까 못 내려가서 못 봤었는데 예외 부분에 Ubuntu 20.04가 있는 것이었다. 아뿔싸!
공식 문서를 제대로 안 읽어본 나한테 열이 받으면서도 한편으로는 아직 희망이 있어 좋았다.
이제는 진짜 AWS만 믿고 가보자!!!

- sudo apt update

- sudo apt install ruby-full

- sudo apt install wget

- cd /home/ubuntu

- sudo wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install

일단 wget 명령어까지는 성공적

- sudo chmod +x ./install
- sudo ./install auto > /tmp/logfile

설명을 보니 install 할 때 ubuntu 20.04 문제는 logfile 지정에서 나는 오류인가보다. 그래서 ubuntu 20.04에만 별도로 install 시에 로그 파일 위치를 따로 지정해준다. 다행히 여기까지 성공적이다.

aws s3 ls s3://aws-codedeploy-ap-northeast-2/releases/ | grep '\.deb$'

위 명령어를 통해 설치 가능한 버전을 확인한다.

AWS 말에 따르면 codeDeploy-agent 작동 최소 버전은 1.5 부터니까 가장 최근 1.6으로 깔아본다.

- sudo ./install auto -v releases/codedeploy-agent-1.6.0-57_all.deb > /tmp/logfile

위 명령어를 쳤을때 따로 install이 일어나지 않는다. (긴장된다. 이제 다른 방법이 떠오르지 않는다.) 찾아보다가 한 github issue 글에서 auto -> deb으로 바뀌면 해결된다는 글을 보고 명령어를 바꿨다.

- sudo ./install deb

다행히 설치를 시작했고
설치 종료 후 상태 명령어를 쳐봤다.

- sudo service codedeploy-agent status

결과는????

업로드중..

드디어 ACTIVE 라는 선물을 얻을 수 있었다. 굉장히 뿌듯했다. 활성화 상태를 확인하고 또 다른 시련이 오기까지 뭐든지 할 수 있다는 자신감을 얻을 수 있었다.






Github Merge 후 재배포

배포 관련해서도 몇가지 문제가 있었다.

  • IAM 권한이 없던 문제 -> CodeDeployInstanceRole IAM 부여로 해결
  • overwrite가 안되고 마지막 실패 케이스와 같은 이슈만 생기는 문제
    -> 관련 배포 결과물 모두 삭제로 해결
  • 배포 스크립트가 일부 실행 안되는 문제
    -> hooks 공식 문서를 참고하여 후크 목록을 언급돼있는 것만 사용해서 해결

업로드중..

성공만 해버리는 자동 배포가 되도록 만들 수 있었다.






회고

어렸을 때부터 글이 많고, 그림이 없는 글은 기피하는 경향이 있었는데 요즘까지도 그러고있는 내 모습을 보니 개탄스러웠다. (하지만 아직도 AWS 글이 가독성이 떨어진다는 생각은 변함이 없다.)
앞으로의 문제는 가장 공신력있는 글에서 시작하고, 잘 기록하는 습관을 만들어야겠다고 생각된다.

그리고 확실히 인프라와 관련한 부분은 생각보다 어렵다. 환경설정부터 설치 부분에서 생각보다 초반에 어려움을 많이 겪어 예상보다 시간을 많이 잡아먹었다. 앞으로의 기한을 설정할때 초기 세팅을 고려해야겠다.



0개의 댓글