코드스테이츠의 사실상 마지막 TIL 글이다. HA 전날이라 다음에 쓸까 싶다가도 마지막까지 멋지게 장식하고 싶어서 자판을 잡는다. 각자 학습 전략을 잘 짜야된다는 이야기를 들었다. 나의 학습 전략은 블로깅이다. 블로그를 쓰면서 그 날 배웠던 내용(사실)과 느낀 점(감정)을 결합한다. 그 과정에서 기억에 강렬하게 남는다.
감상은 여기까지 하고, 클라우드 환경에서 중요한 CI/CD 부분이다. 어제 배웠던 docker-compose보다 훨씬 더 다양한 기능으로 무장했다. Git에 올리면 자동으로 감지해서 클라우드 환경에 적용해준다. 미쳤다는 말 밖에 안나온다. 너~~~무 좋다. 서버가 한 대면 괜찮지만 100대일 경우는 어떻게 할 것인가? 그에 대한 해답이다. Tag 단위로 서버군을 나누고 갱신하는 부분이 신선했다. 개발 서버나 일부 서버만 적용하고 싶다면 그에 맞게 Tag 조정을 거치면 된다.
파이프라인이 2개일 경우 과금이 발생하는건 아쉽다. 그냥 동작이 보고 싶을 뿐인데.. 그래도 이정도가 어디야.
클라이언트 배포의 특징은 Git에서 받아온 후 CodeBuild
서비스를 통해 빌드를 거친 후 S3 버킷에 들어가는 부분이다. 그 과정에서 docker-compose
처럼 명세서를 써주면 그걸 기준으로 빌드를 진행한다. 그래서 먼저 로컬에 명세서대로 진행이 되는지 확인해야된다.
배포 중 빌드 과정이 추가됐다. 빌드를 하면 사용자에게 전달하는 파일 용량이 줄어들기 때문에 React 같은 무거운 라이브러리 또는 Typescript 같은 빌드가 필요한 언어는 하는게 좋다.
# buildspec.yml
version: 0.2
phases:
pre_build:
commands:
- cd client
- npm install
build:
commands:
- npm run build
artifacts:
files:
- '**/*'
base-directory: client/build
S3처럼 곧바로 올라가는게 아니라 EC2 인스턴스에 소스코드를 입력해야 된다. 그 과정에서 권한 과정이 추가됐다. IAM
권한 설정이 복잡했다. 같은 아마존 내에서도 권한을 어떻게 주느냐에 따라 접근 가능 여부가 달라진다. 여기서 조금 햇갈렸다. 그리고 지역에 따라서 서비스가 나뉜다. 나의 경우 us-east-2
로 되어있어서 이 부분을 수정했다.
# 신뢰 관계 설정
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"codedeploy.us-east-2.amazonaws.com",
"ec2.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
서버는 deploy 과정이 추가된다. 그러면서 어떻게 앱을 실행하고 중지하고 초기화 할 것인지 기록해야 된다. appspec.yml
파일은 그 역할을 수행할 수 있게 만든다.
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
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo apt-get install nodejs
node -v
scripts/initialize.sh
스크립트에서 npm install
명령어를 사용할 때 sudo
가 빠져있다. 추가하고 실행하자 정상 동작했다.