[AWS] CodePipeline: EC2์ CodeDeploy ์ฐ๋
์ธ๋ถ ๋คํธ์ํฌ ์ ์ ์์ด ํน์ ๋ฆฌ์์ค๋ฅผ ๋ฐ๋ผ๋ณด๋ฉฐ ์ฒ๋ฆฌ๋ฅผ ํ๋ consumer๋ฅผ ๋ง๋ค๊ฒ ๋๋ค.
์ด ์ผ์ด์ค๋ ์ธ์คํด์ค๊ฐ ๋ฌด์กฐ๊ฑด ํ๋๋ง ์์ด์ผ ํ๊ณ , ๋ค์ดํ์์ด ์กฐ๊ธ์ ์์ด๋ ์๊ด์ด ์๋ค.
๊ทธ๋์ ์๋ฒ์ฒ๋ผ ๋ธ๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ๋ ์์ด ๋ ๊ฑฐ์ํ๊ฒ stop and start ๋ฐฐํฌ๋ฅผ ๊ตฌ์ฑํด๋ดค๋ค.
์ธ์ด๋ nodejs๋ฅผ ์ฐ๊ณ , pm2๋ก ๋จ์ผ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๋๋ก ํ ๊ฒ์ด๋ค.
EC2 ์ธํ
๊ธฐ๋ณธ ๋ฐํ์์ ๊น์์ฃผ๊ณ
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
. ~/.nvm/nvm.sh
nvm install 16
npm i -g pm2
pm2๊ฐ ์ ๋๋์ง ๋ณธ๋ค.
pm2 start npm --name "consumer" -- start

Code Deploy agent ์ค์น
EC2์์ code deploy์ ๋์์ ์ธ์งํ๊ณ ์ํธ์์ฉ์ ํ๋ ค๋ฉด, ๊ทธ๋ฐ๊ฑธ ์ฒ๋ฆฌํ๋ ๋ฐ๋ชฌ์ด ๊น๋ ค์์ด์ผ ํ๋ค.
๊ทธ๊ฒ code deploy agent๋ค. ๊น์์ค๋ค.
sudo yum update
sudo yum install ruby
sudo yum install wget
cd /home/ec2-user
wget https://bucket-name.s3.region-identifier.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
sudo service codedeploy-agent status
๊ทธ๋์ ์ด๋ ๊ฒ ์คํ๋๋ฉด ๋๋ค.
EC2์ ์ญํ ๋ถ์ฌ
Code Deploy์์ EC2์ ๊ฝ์ ์ ์๊ฒ ํ๋ ค๋ฉด EC2์๋ ํน์ ํ ๊ถํ์ ๋ฃ์ด์ค์ผ ํ๋ค.
๋ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๊ฑธ ์ผ๋๋ฐ
Code Deploy Role์ด ์์ด์ผ ํ๊ณ
์ ๋ขฐ๊ด๊ณ๋ ์ด๋ ์ฃผ๋ฉด ๋๋ค.
Code Pipeline ์์ฑ
์ด์ CI/CD ๊ตฌ์ฑ ์์์ด๋ค.
์ด๋ฆ ๋จผ์ ์ง๊ณ
์์ค๋ฅผ ์ด๋์ ๋ฐ์์ฌ์ง๋ฅผ ์ ํ๋ค.
Codebuild๋ ๋ง๋ค์ด์ฃผ์
์ด๊ฑด ๋ฐ๋ก ๋ง๋ ๋ค์์ ์ฐ๊ฒฐํด์ค์ผ ํ๋ค.
Code build ์์ฑ
๋ฐฐํฌ ํ๊ฒฝ๋ค์ ๋์ถฉ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์ฑ์ผ๋ก๋ง ์คฌ๊ณ

buildspec๋ง ์ ๋ฌ์์คฌ๋ค.

buildspec์์๋ ํ๊ฒฝ๋ณ์๋ง ๋ค์ด๋ฐ๊ณ ๋ฐ๋ก exportํ๋๋ก ๊ตฌ์ฑํ๋ค.
version: 0.2
phases:
pre_build:
commands:
- echo foo
build:
commands:
- echo Build started on `date`
- echo Building the Docker image...
- aws s3 cp s3://.../prod/.env .env
post_build:
commands:
- echo Build completed on `date`
- echo success
artifacts:
files:
- '**/*'
- '*'Code Deploy ์์ฑ
๋ค์์ ๊ฐ์ฅ ์ค์ํ CodeDeploy๋ค.
์ด๊ฒ๋ CodeDeploy ์ฝ์ ๊ฐ์ ๋ง๋ค์ด์ค ๋ค์์ ์ฐ๊ฒฐํด์ค์ผ ํ๋ค.
์ฑ ๋จผ์ ๋ง๋ค์ด์ฃผ๊ณ

๊ฑฐ๊ธฐ๋ค ๋ฐฐํฌ ๊ทธ๋ฃน์ ์ถ๊ฐํด์ค๋ค.
์ญํ ์ ๋์ถฉ CodeDeploy ๊ถํ ๋ค ๋ฌ์๋์ ์ญํ ๋ง๋ค์ด์ ๋ถ์ฌ์ฃผ๋ฉด ๋๊ณ ,
์ฌ๊ธฐ์๋ ๊ตณ์ด ๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ๊ฐ ํ์ํ์ง๋ ์์ผ๋ ๋ฐฐํฌ ํ์
์ ํ์ฌ ์์น๋ก ํด์ค๋ค.
ํ๊ฒฝ ๊ตฌ์ฑ ํญ์์๋ ์ด๋ค EC2์ ๊ฝ์์ง๋ฅผ ์ ํ๋ค.
์ด๋ฆ์ผ๋ก ํด์ ๋งค์นญ์ํค๋ฉด ๋๋ค.

code deploy agent๋ฅผ ๊น์ง ๋ง์ง๋ฅผ ๋ฌผ์ด๋ณด๋ ๋ถ๋ถ์ด๋ค.
์๊น ์์ ์ปค๋งจ๋๋ก ๊น์๋ค๋ฉด "์ ํจ"์ผ๋ก ํด๋ ๋๋ค.

๋ฐฐํฌ๋ ํ๋ฒ์ ๋ฐฐํฌํ๊ณ
๋ก๋๋ฐธ๋ฐ์๋ ๋๋ค. ํ์์๋ค.
์ด๋ ๊ฒ ํด๋๊ณ ์๋ฃ ๋ฒํผ ๋๋ฅด๋ฉด ๋์ธ๋ฐ...
์ ๊น๋ง ๊ธฐ๋ค๋ ค๋ณด๋ผ.
ํ๋ ๋ ์ธํ
ํด์ผ ํ ๊ฒ ์๋ค.
appspec ์ธํ
buildspec์ด ๋น๋์ ๋ํ ์ค์ ํ์ผ์ด๋ผ๋ฉด, appspec์ ๋ฐฐํฌ์ ๋ํ ์ค์ ํ์ผ์ด๋ค.
์ด๊ฑด ๋ฌด์กฐ๊ฑด ๋ฃจํธ๊ฒฝ๋ก์ ์์ด์ผ ํ๋ค.
์ด๋ฐ์์ผ๋ก ์์ฑํ ์ ์๋ค.
version: 0.0
os: linux
files:
- source: /
destination: /home/ec2-user/app
overwrite: true
hooks:
ApplicationStop:
- location: scripts/stop.sh
runas: ec2-user
- location: scripts/clear.sh
runas: root
Install:
- location: scripts/install.sh
runas: root
ApplicationStart:
- location: scripts/restart.sh
runas: ec2-user
files๋ codebuild์์ ๋ฐ์์จ ํ์ผ๋ค์ ์ด๋ป๊ฒ EC2์ ์ง์ด๋ฃ์์ง์ ๋ํ ๋ถ๋ถ์ด๋ค. ๋ /home/ec2-user/app๋ผ๋ ๊ฒฝ๋ก์ ๋ณต๋ถํ๋๋ก ํ๋ค.
๊ทธ๋ฆฌ๊ณ , hooks๋ ๊ฐ ์ด๋ฒคํธ์ ๋ง์ถฐ์ ์ด๋ค ๋์์ ์คํํ ์ง ์ง์ ํ๋ ๋ถ๋ถ์ด๋ค. ์์ฝ๋๋ฅผ ํ๋ก์ ํธ์ ์์ฑํด๋ ๋ค์์, ๊ทธ ๊ฒฝ๋ก๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ๋ ์ด๊ฒ ์ข ๋ง์ด ๊ท์ฐฎ๊ณ ์ง์ฆ๋ฌ๋ค.
์ธํ ํ๊ธฐ์ ์ ์น ๋ ๋ฆฌ๊ณ , installํด์ pm2 restart๋ฅผ ๋๋ฆฌ๋๋ก ํ๋ค.
์ด๊ฒ node ๊ด๋ จํด์ ํ๊ฒฝ๋ณ์๊ฐ ๊ผฌ์ผ๋๊ฐ ๋ง์์ ์ ๋๊ฒฝ๋ก๋ฅผ ๋ค ๋๋ ค๋ฐ์๋ค.
๋
appspec.yml์ ๋ฃจํธ์๋ค ์ ์ ์ฅํด๋จ๋ค๋ฉด, ์ด์ Code Pipeline์ ๋ง๋ค์ด์ฃผ์.
๊ทธ๋ผ ์ด๋ฐ์์ผ๋ก ๋ง๋ค์ด์ง ๊ฒ์ด๋ค.

๊ทธ๋ผ ์ด๋ฐ์์ผ๋ก ์ด๋ฒคํธ ๋จ์๋ก ๋ฐฐํฌ๊ฐ ๋ ๊ฒ์ด๊ณ
EC2์์๋ ๋ฐ์์ด ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ ๊ฒ์ด๋ค.
์ฐธ์กฐ
https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-linux.html
https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/reference-appspec-file.html#appspec-reference-server
https://yoo11052.tistory.com/113
https://stackoverflow.com/questions/39520571/codedeploy-pm2-command-not-found