2022.08.09(Tues)
[TIL] Day73
[SEB FE] Day74
CodePipeline
์ ์ด์ฉํด์ ๊ฐ ๋จ๊ณ๋ฅผ ์ฐ๊ฒฐํ๋ ํ์ดํ๋ผ์ธ ๊ตฌ์ถํ๊ธฐSource
๋จ๊ณ์์ ์์ค ์ฝ๋๊ฐ ์ ์ฅ๋ GitHub ๋ฆฌํฌ์งํ ๋ฆฌ ์ฐ๊ฒฐํ๊ธฐDeploy
๋จ๊ณ์์ CodeDeploy
์๋น์ค๋ฅผ ์ด์ฉํ์ฌ EC2 ์ธ์คํด์ค์ ๋ณ๊ฒฝ ์ฌํญ์ ์ค์๊ฐ์ผ๋ก ๋ฐ์ํ๊ธฐ์ ๋ฒ์ ํด๋ดค๋ session manager
๋ก EC2 ์ฐ๊ฒฐํ๊ธฐ
# ํฐ๋ฏธ๋์ bash๋ก ๋ณ๊ฒฝ
$ bash
# ์ต์์ ๋๋ ํ ๋ฆฌ๋ก ์ด๋
$ cd ~
# ํจํค์ง ์ ๋ณด๋ฅผ ์ต์ ์ํ๋ก ์
๋ฐ์ดํธ
$ sudo apt update
# nvm ์ค์น
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
$ source ~/.nvm/nvm.sh
# nvm ์ ์ค์น๋์๋์ง ๋ฒ์ ํ์ธํด๋ณด๊ธฐ
$ nvm โversion
# node.js ์ค์น
$ nvm install node
# npm ์ค์น
$ sudo apt install npm
EC2 ์ธ์คํด์ค ์ ํ โ ์์ โ ์ธ์คํด์ค ์ค์ โ ํ๊ทธ ๊ด๋ฆฌ
์ธ์คํด์ค ์ ํ โ ์์ โ ๋ณด์ โ IAM ์ญํ ์์ โ ์ IAM ์ญํ ์์ฑ
์ญํ (Role)
: AWS์ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ์๋น์ค์ ์ ๊ทผํ๊ฒ ํ ์ ์๋๋ก ํด์ฃผ๋ ๋ฐฉ๋ฒIAM ์ญํ
โ ์ญํ ๋ง๋ค๊ธฐ
AmazonS3FullAccess
, AmazonSSMFullAccess
, AWSCodeDeployRole
์ ํ์์ฑํ IAM ์ญํ ์ ํ โ ์ ๋ขฐ ๊ด๊ณ ํธ์ง
Service
๊ฐ - ["[ec2.amazonaws.com](http://ec2.amazonaws.com/)", "[codedeploy.ap-northeast-2.amazonaws.com](http://codedeploy.ap-northeast-2.amazonaws.com/)"]
๊ฐ ๋ณ๊ฒฝEC2 - ์ธ์คํด์ค ์ ํ - IAM ์ญํ ์์ - ์์์ ์์ฑํ ์ญํ ์ ์ฉ
S3
, CodeDeploy
, SSM
์๋น์ค์ ์ ๊ทผ ๊ฐ๋ฅEC2 - ์ธ์คํด์ค ์ ํ - ๋ณด์ - ๋ณด์ ๊ทธ๋ฃน - ์ธ๋ฐ์ด๋ ๊ท์น ํธ์ง
CodeDeploy-Agent
์ ์ ์์ ์ธ ์๋์ ์ํด ํ์git clone ๋ฐ์ repository ์ต์์์ appspec.yml
ํ์ผ ์ถ๊ฐ
appspec.yml
: ๋ฐฐํฌ ์๋ํ๋ฅผ ๋์์ฃผ๋ CodeDeploy-Agent
๊ฐ ์ธ์ํ๋ ํ์ผ// appspec.yml
version: 0.0
os: linux
files:
- source: /
destination: /Users/bean/Dev/codestates/Section_4/fe-sprint-practice-deploy
hooks:
# ์ฑ์ด ๋ฉ์ถ๊ณ ์คํ๋๋ ์คํฌ๋ฆฝํธ
ApplicationStop:
- location: scripts/stop.sh
runas: root
# ์ฑ์ด ์ค์น๊ฐ ๋๋๊ณ ์คํ๋๋ ์คํฌ๋ฆฝํธ
AfterInstall:
- location: scripts/initialize.sh
runas: root
# ์ฑ์ด ๋ค์ ์์ํ๊ณ ์คํ๋๋ ์คํฌ๋ฆฝํธ
ApplicationStart:
- location: scripts/start.sh
runas: root
scripts
ํด๋ ์์ฑ ํ, initialize.sh
, start.sh
, stop.sh
ํ์ผ ์์ฑ
initialize.sh
#!/bin/bash
cd /Users/bean/Dev/codestates/Section_4/fe-sprint-practice-deploy/server
npm install
npm install pm2@latest -g
sudo apt-get update
sudo apt-get install authbind
sudo touch /etc/authbind/byport/80
sudo chown ubuntu /etc/authbind/byport/80
sudo chmod 755 /etc/authbind/byport/80
start.sh
#!/bin/bash
cd /Users/bean/Dev/codestates/Section_4/fe-sprint-practice-deploy/server
export DATABASE_USER=$(aws ssm get-parameters --region ap-northeast-2 --names DATABASE_USER --query Parameters[0].Value | sed 's/"//g')
export DATABASE_PASSWORD=$(aws ssm get-parameters --region ap-northeast-2 --names DATABASE_PASSWORD --query Parameters[0].Value | sed 's/"//g')
export DATABASE_PORT=$(aws ssm get-parameters --region ap-northeast-2 --names DATABASE_PORT --query Parameters[0].Value | sed 's/"//g')
export DATABASE_HOST=$(aws ssm get-parameters --region ap-northeast-2 --names DATABASE_HOST --query Parameters[0].Value | sed 's/"//g')
authbind --deep pm2 start app.js
stop.sh
#!/bin/bash
cd /Users/bean/Dev/codestates/Section_4/fe-sprint-practice-deploy/server
pm2 stop app.js 2> /dev/null || true
pm2 delete app.js 2> /dev/null || true
CodeDeploy
โ ์ ํ๋ฆฌ์ผ์ด์
โ ์ ํ๋ฆฌ์ผ์ด์
์์ฑ
CodeDeploy
โ ์์ฑํ ์ ํ๋ฆฌ์ผ์ด์
โ ๋ฐฐํฌ ๊ทธ๋ฃน ์์ฑ
CodePipeline
์์ฑ
GitHub(version 2)
์ ํโCodePipeline ๊ธฐ๋ณธ๊ฐโ
์ผ๋ก ์ง์ AWS CodeDeploy
์ ํEC2 instance ํฐ๋ฏธ๋์์ Log ํ์ธ
๐กย Postman์ผ๋ก ์์ฑํ EC2 ์ธ์คํด์ค IP์ฃผ์ ์ด์ฉํ์ฌ ํ
์คํธํด๋ณด๊ธฐ! โ โHello Worldโ
์ ๋์ด!
[ISSUE] ์ ๊ณผ์ 12๋ฒ์์ ์๋์ ๊ฐ์ ์ด์๋๋ฌธ์ ๋ฐฐํฌ ๋ชปํ๋ค๊ฐ ์๋ก์ด AWS ๊ณ์ ๋ค์ ๋ถ์ฌ๋ฐ์ ํ์ ๋ฐฐํฌ๊น์ง ์๋ฃ โจ