TIL 65일차 AWS Automated Deployment

들어가며

코드스테이츠의 사실상 마지막 TIL 글이다. HA 전날이라 다음에 쓸까 싶다가도 마지막까지 멋지게 장식하고 싶어서 자판을 잡는다. 각자 학습 전략을 잘 짜야된다는 이야기를 들었다. 나의 학습 전략은 블로깅이다. 블로그를 쓰면서 그 날 배웠던 내용(사실)과 느낀 점(감정)을 결합한다. 그 과정에서 기억에 강렬하게 남는다.

AWS 자동화 배포 실습

감상은 여기까지 하고, 클라우드 환경에서 중요한 CI/CD 부분이다. 어제 배웠던 docker-compose보다 훨씬 더 다양한 기능으로 무장했다. Git에 올리면 자동으로 감지해서 클라우드 환경에 적용해준다. 미쳤다는 말 밖에 안나온다. 너~~~무 좋다. 서버가 한 대면 괜찮지만 100대일 경우는 어떻게 할 것인가? 그에 대한 해답이다. Tag 단위로 서버군을 나누고 갱신하는 부분이 신선했다. 개발 서버나 일부 서버만 적용하고 싶다면 그에 맞게 Tag 조정을 거치면 된다.

파이프라인이 2개일 경우 과금이 발생하는건 아쉽다. 그냥 동작이 보고 싶을 뿐인데.. 그래도 이정도가 어디야.

S3 Client 배포

클라이언트 배포의 특징은 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

EC2 Server 배포

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

EC2 진행 이슈

  • EC2 환경에서 node 버전이 맞지 않아서 에러가 발생했다. 우분투에서 NVM을 통해서 node를 설치해도 NPM에서 반영이 되지 않아 8버전으로 자꾸 작업을 진행하더라.
    아래 작업 절차로 버전을 맞춰주자 정상 동작했다.
    https://suyeoniii.tistory.com/47
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가 빠져있다. 추가하고 실행하자 정상 동작했다.

AWS Automated Deployment

  • 배포 자동화에 정의와 이점에 대해 설명할 수 있다.
  • 배포 파이프라인이 무엇인지 정의할 수 있다.
  • 파이프라인을 구성하는 단계(Stages)와 작업(Actions)에 대해 설명할 수 있다.
  • AWS 개발자 도구를 활용하여 파이프라인을 구축할 수 있다.
  • 배포 자동화 파이프라인 구축 과정에서 문제가 발생할 경우, log 파일과 공식 문서를 통해 해결할 수 있다.
  • AWS에서 제공하는 IAM 서비스를 이해하고 사용할 수 있다.
    • 그룹, 사용자, 정책, 역할의 차이점과 특징에 대해서 이해할 수 있다.
    • IAM 정책에 대해 이해하고 특정 주체에게 권한을 부여할 수 있다.
    • IAM 보안 모범 사례에 대해 찾아보고, 서비스를 이용하며 적용할 수 있다.

좋은 웹페이지 즐겨찾기