1.인스턴스에 태그와 역할(Role)을 부여 (태그 = 식별, 역할 = 권한)

 - 인스턴스를 선택한 후 [ 작업 ] → [ 인스턴스 설정 ] → [ 태그 관리 ] 순서로 클릭해 이동
 - [ 태그 추가 ] 버튼을 클릭
 - 태그명 지정 및 저장
 - 인스턴스를 선택 후, [ 작업 ] → [ 보안 ] → [ IAM 역할 수정 ] 순서대로 클릭해 이동
 - [ 새 IAM 역할 생성 ] 을 클릭
 - [ 역할 만들기 ] 버튼을 클릭합니다.
 - AWS 서비스, EC2를 선택한 후 [ 다음: 권한 ] 버튼을 클릭
 - AmazonS3FullAccess를 선택
 - AmazonSSMFullAccess를 선택
 - AWSCodeDeployRole를 선택 [ 다음: 태그 ] 버튼을 클릭
 - 태그추가에서는 아무런 작업 없이 바로 [ 다음: 검토 ] 버튼을 클릭
 - 역할에 임의의 이름을 입력한 후, [ 역할 만들기 ] 버튼을 클릭
 - 역할 생성됨
 
 - 메인 화면으로 돌아온 후, 방금 전 생성한 EC2Role을 클릭
 - 신뢰 관계를 편집
 - "Service"의 값을 배열로 바꾼 후, "codedeploy.ap-northeast-2.amazonaws.com" 값을 추가
 - EC2 인스턴스에 생성한 역할을 적용
 
 - EC2 대시 보드에서 보안 그룹으로 이동
 - 보안 탭을 클릭
 - 보안 그룹을 클릭해 이동
 - 보안 그룹의 인바운드 규칙에 80과 443 포트가 포함되어 있는지 확인
 - HTTP와 HTTPS 유형을 위치 무관으로 추가한 뒤 [ 규칙 저장 ] 버튼을 클릭
 - 저장해서 나온 화면에서 22, 80, 443 포트가 포함되어 있는지 확인


 
2.EC2 인스턴스를 활용해 파이프라인을 구축

- 리포지토리 최상위에 appspec.yml 파일을 추가
 version: 0.0
os: linux
files:
  - source: /
# 아래 destination은 여러분이 해당 리포지토리를 클론한 위치로 설정해주세요.
    destination: ~/fe-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개를 생성
 
 #!/bin/bash
# 아래 위치는 여러분이 해당 리포지토리를 클론한 위치로 설정해주세요.
cd ~/fe-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

#!/bin/bash
# 아래 위치는 여러분이 해당 리포지토리를 클론한 위치로 설정해주세요.
cd ~/fe-sprint-practice-deploy/server
authbind --deep pm2 start app.js

#!/bin/bash
# 아래 위치는 여러분이 해당 리포지토리를 클론한 위치로 설정해주세요.
cd ~/fe-sprint-practice-deploy/server
pm2 stop app.js 2> /dev/null || true
pm2 delete app.js 2> /dev/null || true
 - AWS CodeDeploy 대시보드로 이동해 애플리케이션으로 이동
 - [ 애플리케이션 생성 ] 버튼을 클릭
 - 생성한 애플리케이션의 배포 그룹 탭을 클릭하여 [ 배포 그룹 생성 ] 버튼을 클릭
 - 배포 그룹의 이름을 임의로 입력하고, 서비스 역할 영역을 클릭한 후 전에 생성했던 'EC2Role'을 선택
 - 환경 구성 중 'Amazon EC2 인스턴스'를 선택하고, 태그 그룹에 EC2 인스턴스에 설정해놓았던 태그 키와 값을 선택
 - 로드 밸런싱 활성화 체크 해제 후, [ 배포 그룹 생성 ] 버튼을 클릭
 - CodePipeline 대시보드로 이동 후, [ 파이프라인 생성 ] 버튼을 클릭
 - 파이프라인 이름을 임의로 입력 후, [ 다음 ] 버튼을 클릭
 - 소스 코드로 사용할 리포지토리가 GitHub에 저장되어 있고 소스 스테이지에서 GitHub를 사용할 수 있으므로, GitHub(버전 2)를 소스 공급자로 선택한 후 [ 다음 ] 버튼을 클릭
 - [ GitHub에 연결 ] 버튼을 클릭
 - 연결 이름을 임의로 입력
 - [ 새 앱 설치 ] 버튼을 클릭
 - 자신의 GitHub 계정을 클릭
 - 로그인 된 후 나타나는 GitHub 화면에서 'Only select repositories'를 선택한 후, 소스 코드로 이용할 리포지토리를 선택하고 [ Save ] 버튼을 클릭
 - [ 연결 ] 버튼을 클릭
 - 리포지토리 이름을 조금 전 연결한 리포지토리 명과 같이 지정
   브랜치 이름은 master로 지정
   출력 아티팩트 형식은 'CodePipeline 기본값'으로 지정한 후, [ 다음 ] 버튼을 클릭
 - 테스트 코드도 없으므로, [ 빌드 스테이지 건너뛰기 ] 버튼을 눌러 빌드 단계를 생략
 - 배포 공급자는 'AWS CodeDeploy'를 선택
   리전은 '아시아 태평양(서울)'을 선택
   애플리케이션 이름은 생성해 둔 애플리케이션의 이름을 선택
   배포 그룹은 생성해 둔 배포 그룹으로 선택
 - 오른쪽 하단의 [ 파이프라인 생성 ] 버튼을 클릭
 - 파이프라인 생성과 동시에 소스 코드의 배포가 자동으로 실행


3.CodeDeploy-Agent는 파이프라인 실행 때마다 로그를 해당 EC2 instance에 저장하므로 터미널에 'cd /opt/codedeploy-agent/deployment-root/deployment-logs' 명령어를 입력하여 로그 파일이 저장된 경로로 이동해 ls를 작성하면 파일을 볼 수 있다.

 

복잡하고 시간도 오래 걸리지만 막상 잘 따라하면 문제는 별로 없었다.

다만 중간에 체크 하지 말라는 부분을 네모로 강조표시해둬서 체크하라는 줄 알고 체크해서 그 부분을 찾는게 오래걸렸다..

'회고' 카테고리의 다른 글

코딩 테스트 준비-2  (0) 2022.08.11
코딩 테스트 준비  (0) 2022.08.10
CI/CD  (0) 2022.08.08
학습(알고리즘)  (0) 2022.08.07
학습(알고리즘)  (0) 2022.08.06

+ Recent posts