AWS 배포 자동화

🐶·2021년 8월 23일
1

개념 정리

목록 보기
39/41

AWS 프리티어 계정으로 실습 시간에 정적 웹 페이지를 자동 배포 및 호스팅하는 파이프라인을 구축해보았다. 실습 후 오피스 아워시간에 추가로 다루었던 내용을 아래와 같이 정리해보았다.

배포 자동화가 왜 필요할까?

  • 무중단 서비스를 위하여.
  • downtime을 최소화(--> 데브옵스가 하는일)
  • 그리고 무엇보다... 너무 간편함! git commit, push만 해주었는데 바로 클라이언트 파이프라인에서 자동배포된다!

CodeBuild를 클라이언트에서만 사용하는 이유?


  • 서버는 별도의 빌드가 필요없으므로, JS파일을 node.js 런타임으로 실행(npm run start)하기만 해도 충분하다.
  • 기존에 여러 JSX파일로 구성--> 하나의 정적 파일로 만들어주는 빌드과정이 필요하다(npm run build로 실행)

CodeDeploy를 클라이언트에서 사용하지 않는 이유?

  • 클라이언트 결과물은, 호스팅만 해도 충분한 정적 파일이기 때문

CodeDeploy를 서버에서만 사용하는 이유?


  • 서버는 애플리케이션이 항상 실행되는 상태로 유지해야 하기 때문.
  • 이 때 CodeDeploy는 다음 작업을 실행함.
    • EC2인스턴스에 대한 배포(코드 다운로드)
    • AppSpec을 이용해 각각의 수명주기(lifecycle)에 필요한 명령 설정
    • 특히, 애플리케이션 중단 및 실행과 관련한 코드가 반드시 필요

아래는 appspec.yml 파일(appspec.yml은 배포 자동화를 도와주는 CodeDeploy-Agent가 인식하는 파일) 내 코드이다

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ubuntu/im-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 각각 3개의 파일은 appspec.yml 파일이 구성하고 있는 배포 수명 주기에 따라서 실행된다.

scripts/initialize.sh

#!/bin/bash
cd /home/ubuntu/im-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

scripts/start.sh

#!/bin/bash
cd /home/ubuntu/im-sprint-practice-deploy/server
authbind --deep pm2 start app.js

scripts/stop.sh

#!/bin/bash
cd /home/ubuntu/im-sprint-practice-deploy/server
pm2 stop app.js 2> /dev/null || true
pm2 delete app.js 2> /dev/null || true

만일 서버를 TypeScript로 작성하였다면...?

  • 파이프라인에 빌드 stage가 필요하다. node.js런타임으로 TypeScript언어로 서버를 실행하기 어렵기 때문이다.

문제 해결에 필요한 모니터링


더 공부해볼만한 IAM

profile
우당탕탕 개발일기📝🤖

0개의 댓글