클라우드/AWS

[Mac OS]AWS 배포 자동화 -3 Server (CodePipeline, CodeBuild, CodeDeploy, pipline 오류 확인)

chanstory 2023. 1. 15. 00:19
반응형

* 인스턴스 태그 및 역할 부여

- 인스턴스 생성 후 태그 관리 설정 

  => 인스턴스는 우분투 20버전 사용함

 

- 태그 추가 

 

- 인스턴스 -> 작업 -> 보안 -> IAM 역할 수정 -> 역할만들기 -> AWS서비스, EC2 선택 ->

  => IAM 역할 수정을 통해 인스턴스 역할을 부여함

  => EC2 인스턴스에 역할을 부여함으로써 다른 AWS 서비스를 호출할 수 있는 권한을 가짐

 

- 역할 선택 

 

- 생성된 역할 클릭 -> 신뢰 관계 편집 -> 

  => 신뢰 관계 란 해당 역할을 취할 수 있는 서비스나 사용자를 명시하는 부분

  => Access를 통해 역할을 생성했지만 서비스를 신뢰 관계에서 명시함으로써 역할이 확실히 완성됨

 

- EC2 수정 페이지 (IAM수정페이지) 에서 IAM역할 부여

 

- 인스턴스 내 보안그룹 선택 -> 인바운드 규칙 편집 -> HTTP, HTTPS 추가 (위치 무관)

 

- EC2(우분투) 내 환경 구성 가능 (이후 자동화 해도됨)

  *nvm 설치 (순서대로 작성)

  => 마지막 npm 설치는 npm 명령어가 정상적으로 입력되지 않는 상황을 방지하기 위해 실행

sudo apt update

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

. ~/.nvm/nvm.sh

nvm install 16

sudo apt install npm

 

 

 

 

 

* EC2를 활용한 파이프라인 구축

- 레포지토리 최상위에 appspec.yml 파일 생성

  => appspec.yml 은 배포 자동화를 도와주는 CodeDeploy-Aagent 가 인식하는 파일

  => sh 파일을 순차적으로 실행할 예정

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 폴더 내 sh 파일 생성

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

 

- commit 후 브랜치로 push

 

- CodeDeploy -> 배포 -> 어플리케이션 -> 생성

 

- 어플리케이션 생성 -> 배포그룹 생성 -> 서비스 역할 선택 (IAM Role) -> 환경구성 -> Tag 선택 -> 로드밸런싱 비활성화

 

- 파이프라인 생성 (서버배포 자동화) -> 소스공급자 (GitHub 버전2)

 

- github 연결 (기존에 만들어놨으면 기존 설정 선택) 

- 레포짓토리 선택 및 출력 아티팩트 선택

 

- 빌드스테이지 건너뛰기

  => 현재 이용하려는 서버코드는 컴파일 및 빌드과정이 필요없고 테스트 코드도 없으므로 건너뛰기

  => 

 

- 배포 스테이지 작성 ( CodeDeploy -> 리전 선택 -> 어플리케이션 이름 -> 배포그룹 선택 (생성해둔것) )

 

- 파이프 라인 생성 내용 확인 후 파이프라인 생성

 

- 혹시 오류가 뜬다면 로그 확인 후 오류 해결 

- 세부정보 -> 하단부 이벤트 보기 로그 확인 (오류 해결중 제일 유용했음)

 

 

 

 

 

 

 

** 오류확인

- EC2 터미널에 cd /opt/codedeploy-agent/deployment-root/deployment-logs 명령어를 통한 로그파일 확인 

- stderr 확인

- tail, head 등을 이용해 일부 확인 가능

 

 

*** Agent 에러 => Agent가 띄워져 있는지 확인, 설치

CodeDeploy agent was not able to receive the lifecycle event. Check the CodeDeploy agent logs on your host and make sure the agent is running and can connect to the CodeDeploy server.

 

$ sudo service codedeploy-agent-status    // Agent 상태 확인

Redirecting to /bin/systemctl status codedeploy-agent.service Unit codedeploy-agent.service could not be found.

위와 같은 에러 출력 시 루비 설치

$ sudo apt-get install -y ruby

$ wget https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install 

$ chmod +x ./install

$ sudo ./install auto

$ rm -rf install

$ sudo service codedeploy-agent start

 

설치 완료 후 상태 확인 혹은 Agent 실행

$ sudo service codedeploy-agent status

$ sudo service codedeploy-agent start

또는

$ sudo service codedeploy-agent restart

 

 

 

 

 

 

반응형