Full_Stack developer

AWS CodeDeploy๋กœ EC2์— ๋ฐฐํฌ ์ž๋™ํ™”ํ•˜๊ธฐ ๋ณธ๋ฌธ

Devops/AWS

AWS CodeDeploy๋กœ EC2์— ๋ฐฐํฌ ์ž๋™ํ™”ํ•˜๊ธฐ

develkbh 2025. 4. 8. 14:07


๐Ÿš€ AWS CodeDeploy๋กœ EC2์— ๋ฐฐํฌ ์ž๋™ํ™”ํ•˜๊ธฐ

์ด์ „ ๊ธ€์—์„œ๋Š” CodeBuild๋กœ ์ž๋™ ๋นŒ๋“œํ•˜๋Š” ๋ฒ•์„ ์•Œ์•„๋ดค์ฃ .
์ด๋ฒˆ์—๋Š” ๊ทธ ๋นŒ๋“œ๋œ ๊ฒฐ๊ณผ๋ฌผ์„ EC2์— ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•˜๋Š”
์‹ค์ œ DevOps ์›Œํฌํ”Œ๋กœ์šฐ์˜ ํ•ต์‹ฌ ์ค‘ ํ•˜๋‚˜์ธ
AWS CodeDeploy๋ฅผ ๋‹ค๋ค„๋ณผ๊ฒŒ์š”!


๐Ÿ’ก CodeDeploy๋ž€?

AWS CodeDeploy๋Š”
EC2, Lambda, ๋˜๋Š” ์˜จํ”„๋ ˆ๋ฏธ์Šค ์„œ๋ฒ„์—
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์„œ๋น„์Šค์˜ˆ์š”.

"๋งค๋ฒˆ ์„œ๋ฒ„์— ์ ‘์†ํ•ด์„œ git pull ํ•˜๊ณ , ์„œ๋น„์Šค ์žฌ์‹œ์ž‘ํ•˜๊ณ ..."
์ด ์ˆ˜์ž‘์—…์„ ๋ชจ๋‘ ์ž๋™ํ™”ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ CodeDeploy!


๐ŸŽฏ CodeDeploy๋Š” ์ด๋Ÿฐ ์ž‘์—…์„ ์ž๋™์œผ๋กœ ํ•ด์ค˜์š”

  • EC2์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒŒ์ผ ์—…๋กœ๋“œ
  • ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ (npm install, systemctl restart ๋“ฑ)
  • ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ, ๋กค๋ฐฑ ์ง€์›
  • ๋ฐฐํฌ ์ƒํƒœ ์ถ”์  ๋ฐ ์‹คํŒจ ์‹œ ์ž๋™ ๋ณต๊ตฌ

๐Ÿงฉ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„๋‹จ ์š”์•ฝ

  • CodePipeline: ์ „์ฒด ํ๋ฆ„ ์ปจํŠธ๋กค๋Ÿฌ
  • CodeBuild: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ
  • CodeDeploy: EC2์— ๋ฐฐํฌ
  • EC2 ์ธ์Šคํ„ด์Šค: ์‹ค์ œ ์„œ๋น„์Šค๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ์„œ๋ฒ„

๐Ÿ› ๏ธ ์‹ค์Šต: React ์•ฑ์„ EC2์— ์ž๋™ ๋ฐฐํฌํ•˜๊ธฐ

์ „์ œ ์กฐ๊ฑด

  • EC2 ์ธ์Šคํ„ด์Šค 1๋Œ€ (Amazon Linux 2)
  • CodeDeploy Agent ์„ค์น˜๋จ
  • IAM ์—ญํ•  ๋ฐ ๊ถŒํ•œ ์„ค์ • ์™„๋ฃŒ

1. EC2์— CodeDeploy Agent ์„ค์น˜


[bash]

 

sudo yum update -y
sudo yum install ruby wget -y
cd /home/ec2-user
wget https://aws-codedeploy-us-east-1.s3.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
sudo service codedeploy-agent start


์„ค์น˜ ํ›„์—๋Š” ์ƒํƒœ ์ฒดํฌ!


[bash]

 

sudo service codedeploy-agent status


2. EC2์— IAM Role ์—ฐ๊ฒฐ

  • AmazonEC2RoleforAWSCodeDeploy ๊ถŒํ•œ ํฌํ•จ
  • EC2 ์ธ์Šคํ„ด์Šค์— ์ด ์—ญํ• ์„ ์—ฐ๊ฒฐํ•ด์ค˜์•ผ CodeDeploy๊ฐ€ ์ ‘๊ทผ ๊ฐ€๋Šฅ

3. appspec.yml ํŒŒ์ผ ์ž‘์„ฑ


version: 0.0
os: linux
files:
  - source: /
    destination: /home/ec2-user/my-app

hooks:
  AfterInstall:
    - location: scripts/install.sh
      timeout: 300
      runas: ec2-user
  ApplicationStart:
    - location: scripts/start.sh
      timeout: 300
      runas: ec2-user


๐Ÿ’ก appspec.yml์€ CodeDeploy๊ฐ€ ์–ด๋–ค ์ž‘์—…์„ ์–ด๋–ค ์ˆœ์„œ๋กœ ์‹คํ–‰ํ• ์ง€ ์ •์˜ํ•˜๋Š” ํ•ต์‹ฌ ํŒŒ์ผ!


4. ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ ์˜ˆ์‹œ

/scripts/install.sh


[bash]

 

#!/bin/bash
cd /home/ec2-user/my-app
npm install


 

/scripts/start.sh


[bash]

 

#!/bin/bash
pm2 restart app || pm2 start app.js



5. CodeDeploy ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ

  1. AWS ์ฝ˜์†” → CodeDeploy → ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ
  2. ์ปดํ“จํŒ… ํ”Œ๋žซํผ: EC2/์˜จํ”„๋ ˆ๋ฏธ์Šค
  3. ๋ฐฐํฌ ๊ทธ๋ฃน ์ƒ์„ฑ:
    • ๋Œ€์ƒ ์ธ์Šคํ„ด์Šค: ํƒœ๊ทธ๋กœ ์ง€์ • (ex: Name = MyServer)
    • ์„œ๋น„์Šค ์—ญํ• : CodeDeployRole (AWS์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ถŒํ•œ ์‚ฌ์šฉ)

6. CodePipeline์— ๋ฐฐํฌ ๋‹จ๊ณ„ ์ถ”๊ฐ€

  • Source → Build → Deploy (CodeDeploy๋กœ EC2 ๋ฐฐํฌ)
  • appspec.yml ๋ฐ ์Šคํฌ๋ฆฝํŠธ ํฌํ•จํ•œ zip ํŒŒ์ผ์„ ์•„ํ‹ฐํŒฉํŠธ๋กœ ์ „๋‹ฌ

โœ… ๊ฒฐ๊ณผ

์ด์ œ๋ถ€ํ„ฐ๋Š” GitHub์— ํ‘ธ์‹œํ•˜๋ฉด:

  1. CodePipeline์ด ๊ฐ์ง€
  2. CodeBuild๊ฐ€ ๋นŒ๋“œ
  3. CodeDeploy๊ฐ€ EC2์— ์ž๋™ ๋ฐฐํฌ
  4. EC2์—์„œ ์•ฑ์ด ์‹คํ–‰๋˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ์„œ๋น„์Šค ์ œ๊ณต!

๐Ÿง  ๋งˆ๋ฌด๋ฆฌ ํŒ

  • ๋ฐฐํฌ ๋กœ๊ทธ๋Š” CodeDeploy ์ฝ˜์†”์—์„œ ํ™•์ธ ๊ฐ€๋Šฅ (์‹คํŒจ ์›์ธ ์ถ”์ ์— ์œ ์šฉ)
  • ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ ์„ค์ •ํ•˜๋ฉด ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ๊ฐ€๋Šฅ
  • pm2, systemctl, docker ๋“ฑ์œผ๋กœ ์„œ๋น„์Šค ์‹คํ–‰ ์ž๋™ํ™” ๊ฐ€๋Šฅ
  • AfterInstall, ApplicationStart ์™ธ์—๋„ ๋‹ค์–‘ํ•œ hook ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๋งˆ๋ฌด๋ฆฌ ๐ŸŽฏ

AWS CodeDeploy๋Š”
๋ณต์žกํ•˜๊ณ  ๋ฐ˜๋ณต์ ์ธ ์„œ๋ฒ„ ๋ฐฐํฌ ์ž‘์—…์„ ์ž๋™ํ™”ํ•ด์„œ
๊ฐœ๋ฐœ์ž/์šด์˜์ž ๋ชจ๋‘์˜ ์‚ถ์˜ ์งˆ์„ ๋†’์—ฌ์ฃผ๋Š” ๋„๊ตฌ์˜ˆ์š”.

ํŠนํžˆ EC2 ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์šด์˜ํ•˜๋Š” ํŒ€์ด๋ผ๋ฉด
๊ผญ ์ตํ˜€์•ผ ํ•  ํ•ต์‹ฌ DevOps ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.