지난 포스팅에 이어, 이번에는 Codedeploy 설정을 진행한다.
1. CodeBuild 설정
2. Codedeploy 설정: 이번 포스팅
3. EC2 Ubuntu 설정
Codedeploy에서 deploy에 사용할 애플리케이션(Jane-codedeploy)을 생성한다.
플랫폼은 EC2/온프레미스를 설정하면 끝난다.
애플리케이션 생성 후엔 '배포 그룹'에서 실제로 이 code deploy가 어떤 인스턴스에 배포될지 설정한다.
나는 EC2에 배포를 할 것이고, EC2 중에서도 어떤 인스턴스에 배포할지는 인스턴스에 설정된 '태그'를 통해 코드가 배포된다.
(난 Service:Test 태그를 설정했다.)
그리고, codedeploy-agent를 ec2에 설치하면 된다.
나는 ubuntu용 ec2이므로 아래 링크를 참고했고, 들어가보면 윈도우 등 다양한 옵션이 있다.
* Codedeploy agent 설치
1. ruby 설치: Codedeploy agent는 ruby로 작성되었으므로 이를 설치한다.
$ sudo apt-get install ruby // (ubuntu 16.04)
2. wget 설치 (agent 설치파일을 들고오기 위해 쓰인다)
$ sudo apt-get install wget
3. Codedeploy Agent 설치
# 나는 jane계정을 사용하므로 /home/jane이며, ubuntu 계정을 사용한다면 /home/ubuntu로 가면 된다.
$ cd /home/jane
# 설치파일 다운로드 (Seoul region)
$ wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
# 실행권한 추가 및 설치
$ chmod +x ./install
$ sudo ./install auto
하다가 막힌다면 아래 aws docs를 참고한다.
* Codedeploy agent 서비스 확인
$ sudo service codedeploy-agent status
* ubuntu 계정이 아닌, jane과 같이 별도의 root권한이 아닌 계정을 사용한다면 추가 설정이 필요하다.
그렇지 않으면, codedeploy-agent가 root로 돌기 때문에(위 캡쳐본에 /etc/init.d/codedeploy/agent에서 돌고 있다),
코드가 배포되는 디렉토리가 root가 되어 추후 다른 문제들을 야기시킨다. 이는 별도로 포스팅 했으니 여기 참고!
https://countrymouse.tistory.com/entry/awscodedeployerr
그리고, codedeploy 설정을 끝냈으니 codepipeline으로 돌아와서, '배포'부분에 codedeploy에서 만든 deploy를 추가해준다.
입력 아티팩트는 codebuild의 output이었던 BuildArifact이고, 애플리케이션은 codedeploy에서 만들었던 Jane-codedeploy,
배포 그룹은, jane-codedeploy에서 만들어줬던 jane-codedeploy이다.
그리고, codedeploy에는 appspec.yml이 필요한데, 이는 아래와 같이 작성했다.
appspec.yml
files: source, destination, runas
files은 source: / 내 파일들을 ec2의 destination( /home/jane/build/)로 옮긴다.
즉, build에서 산출된 artifacts의 모든 것들을 ec2의 /home/jane/build/로 옮긴다. (/home/jane/build/ 디렉토리는 생성시켜두자)
그리고, 그 동작은 'jane'이 run 한다.
permissions:
복사한 파일들의 객체들은 모두(pattern: "**") owner/grp을 'jane'으로 준다.
근데, 이미 위에서 말한 "jane과 같이 별도의 root권한이 아닌 계정을 사용한다면 추가 설정이 필요하다. " 를 했으므로,
이 permission은 생략해도 된다.
hooks:
deploy는 아래 각 절차(hooks)마다 하나 이상의 스크립트를 통해 변수선언, 환경설정 등을 할 수 있는데
나는 간단한 코드를 올렸으므로 applicationStart에만 code를 실행시키는 간단한 event를 만들었다.
start.sh
pm2로 nodejs 코드를 띄우는 sh이다. (pm2 reload ecosystem.json이 메인)
6번째 줄까지는 안 해도 된다. 나는 각 절차가 궁금해서 찍어봤다.
ecosystem.json
/home/jane/build 디렉토리에 있는 index.js를 실행한다.
코드가 변경되는지 watch==true를 통해 확인하며, error_file, out_file이 쌓이는 위치를 지정해주었다.
이 모든 파일은(appspec,yml, scosystem.json, start.sh 등) 코드와 같이 git에 올리면 된다 :)
'직장생활 > AWS, GCP' 카테고리의 다른 글
[AWS] root 이외 계정에서 codedeploy 실행, codedeploy 'run as user failed with exit code 1', EC2 '[stderr]su: must be run from a terminal' error (0) | 2022.07.06 |
---|---|
[AWS] EC2 Ubuntu CI/CD pipeline 구축 (Codebuild 설정) - 1 (0) | 2022.07.06 |
AWS lambda에서 git 쓰기/사용 (0) | 2022.07.06 |
[GCP] Cloud Scheduler: Cloud function 주기적으로 호출하기 (0) | 2022.06.27 |
[GCP] Cloud function에서 nodejs 코드 띄우기 (0) | 2022.06.27 |