Step
Step 1. 개념 : https://radpro.tistory.com/338
Step 2. AWS Pipeline : 현재글
Step 3. 서버 환경 변수 설정 : https://radpro.tistory.com/342
Step 4. Github Actions : https://radpro.tistory.com/340
과정 요약 (Pipeline)
파이프라인 생성 및 확인 - CodePipeline
Code - GitHub Repository / AWS Code commit
Build - CodeBuild <= buildspec.yml 가 디폴트값 :
Deploy - CodeDeploy <= appspec.yml 가 디폴트값 :
사전 작업
EC2 인스턴스 실행 및 디렉터리 초기화
1. EC2인스턴스 세션 연결
2. 루트 경로로 이동 후 비우기
// 루트 경로로
cd ~
// 작업 파일들 비우기 ( 불필요한 파일만 있을 경우에만 진행 ): 강제 파일 삭제
rm -rf 지울_파일명 또는 지울_디렉터리명
AWS CLI 설치
// AWS CLI zip 파일 다운로드
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
// zip 파일 인스톨
$ sudo apt install unzip
// zip 해제
$ unzip awscliv2.zip
// aws파일 인스톨
$ sudo ./aws/install
CodeDeploy Agent 설치
1. 아래의 코드를 순차적으로 입력합니다
$ sudo apt update
$ sudo apt install ruby-full
$ sudo apt install wget
$ cd /home/ubuntu
$ sudo wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
$ sudo chmod +x ./install
$ sudo ./install auto > /tmp/logfile
* install ruby-full 중, 아래와 같은 문구가 생기면 Y 선택
2. 설치 후 아래 명령어를 통해 active(running)을 확인 할 수 있으면 정상 설치 후 실행중인 것
$ sudo service codedeploy-agent status
EC2 인스턴스 역할부여
1. 태그 설정
EC2 => 인스턴스 => 인스턴스(실행중) => 해당 인스턴스 검색 및 선택 => 태그 => 태그관리
* 아래는 공용으로 할당된 태그, 개인 소유 리소스 식별용 태그
* 태그는 key-Value 로 구성 : 파이프라인 구축 단계에서 인스턴스 식별을 위해 사용
2. 보안 설정을 통한 IAM 설정
: 서비스끼리의 역할을 부여
인스턴스 선택 => 보안 => IAM 역할 => 권한 추가 => 정책 연결 => 필요한 정책을 검색해서 선택 => 정책 연결
=> 신뢰 관계 => 신뢰 정책 편집 => service항목에 배열로 변경 후 codedeploy.apnortheast-2.amazonaws.com 추가
* 적용한 정책 리스트
1) AmazonS3FullAccess
2) AmazonEC2RoleforAWSCodeDeploy
3) AWSCodeDeployRole
4) AmazonSSMFullAccess
* IAM (AWS Identity and Access Management) : AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스
: 리소스를 사용하도록 인증(로그인) 및 권한 부여(권한 있음)된 대상을 제어
EC2 사용 파이프라인 구축
로컬환경 세팅
1. appspec.yml 파일 생성
: 로컬환경의 프로젝트 내 DeployServer 디렉토리에 아래의 내용으로 파일 생성
: 빌드 경로 설정, hooks을 이용한 install전/후, application start/stop에 관한 sh파일 연동
: Codebuild-Agent가 인식하는 파일
nano appspec.yml
version: 0.0
os: linux
files:
- source: /
destination: /home/ubuntu/build
hooks:
BeforeInstall:
- location: server_clear.sh
timeout: 3000
runas: root
AfterInstall:
- location: initialize.sh
timeout: 3000
runas: root
ApplicationStart:
- location: server_start.sh
timeout: 3000
runas: root
ApplicationStop:
- location: server_stop.sh
timeout: 3000
runas: root
2. buildspec.yml 파일 생성
: 배포 자동화에서 빌드를 담당하는 Codebuild-Agent가 인식하는 파일
nano buildspec.yml
version: 0.2
phases:
install:
runtime-versions:
java: corretto11
build:
commands:
- echo Build Starting on `date`
- cd DeployServer
- chmod +x ./gradlew
- ./gradlew build
post_build:
commands:
- echo $(basename ./DeployServer/build/libs/*.jar)
artifacts:
files:
- DeployServer/build/libs/*.jar
- DeployServer/scripts/**
- DeployServer/appspec.yml
discard-paths: yes
3. script 디렉토리 생성
: DeployServer 디렉토리에 script 디렉토리 생성 후, appspect.yml 파일이 구성하고 있는 배포 수명주기 관련 sh파일 생성
1) initialize.sh
#!/usr/bin/env bash
chmod +x /home/ubuntu/build/**
2) sever_clear.sh
#!/usr/bin/env bash
rm -rf /home/ubuntu/build
3) server_start.sh
#!/usr/bin/env bash
cd /home/ubuntu/build
sudo nohup java -jar DeployServer-0.0.1-SNAPSHOT.jar > /dev/null 2> /dev/null < /dev/null &
4) server_stop.sh
#!/usr/bin/env bash
sudo pkill -f 'java -jar'
AWS 세팅
1. 애플리케이션 생성
: AWS 개발자도구 => 배포 => 애플리케이션 => 애플리케이션 생성 => 애플리케이션 이름 설정
=> 컴퓨팅플랫폼 설정(EC2/온프레미스) => 애플리케이션 생성
2. 배포 그룹 생성
: 애플리케이션 => 배포 그룹 => 배포 그룹 생성
=> 배포 그룹 이름 입력(리소스이름-group 으로 작성) => 서비스 역할 입력(선택할 수 있는 IAM-ROLE 중 선택)
=> 환경 구성에서 Amazon EC2 인스턴스 선택 => 키(태그 그룹 EC2 인스턴스 이름) - 값(해당 값 선택)
=> 로드 밸런싱 활성화 체크해제 => 배포 그룹 생성 => 오류코드 무시해도 됨
3. 파이프라인 생성 (Code Pipeline)
: Code Pipeline 탭으로 이동 => 파이프라인 생성 => 파이프라인 이름 설정 => 소스코드 플랫폼 지정(Github2 등)
=> Github에 연결 => 연결이름 임의로 설정 => GitHub에 연결 => 새앱 설치 => 본인 깃허브 계정선택
=> Only select repositories => Install => 연결 => 리포지토리 이름을 직전에 선택한 리포지토리 이름으로 지정
=> 브랜치 이름 지정 (main) => 출력아티팩트 형식은 CodePipeline 기본값 지정
=> 빌드 공급자 (AWS CodeBuild) => 프로젝트 생성 => 프로젝트 이름 작성
=> 운영체제 (Amazon Linux 2) / 런타임 (Standard) / 이미지 (aws/codebuild/amazonlinux2-x86_64-standard:3.0)
=> Buildspec 이름 (DeployServer/buildspec.yml) => CodePipeline으로 계속
=> 배포 공급자(AWS CodeDeploy) / 리전(서울) / 애플리케이션이름(생성해둔 이름) / 배포그룹 (생성해둔 이름)
=> 파이프라인 생성
=> 파이프라인 로그 확인 (에러시)
// 로그 경로 이동
cd /opt/codedeploy-agent/deployment-root/deployment-logs
// 목록 확인
ls
// 로그파일 확인
nano codedeploy-agent-deployments.log
기타 참고사항
개인 파라미터 전달 과정
: application.properties의 값은
DeployServer/src/main/.../DeployServer/config/webConfig에서 받아서 전달
'Codestates [Back-end] > 데일리 로그 [TIL]' 카테고리의 다른 글
22.10.06 Cloud - 배포 자동화 [Step 3. 서버 환경 변수 설정] (0) | 2022.10.07 |
---|---|
22.10.07 Cloud - 배포 자동화 [Step 4. GitHub Actions] [진행중] (0) | 2022.10.06 |
22.10.06 Cloud - 배포 자동화 [Step 1. 개념] (0) | 2022.10.06 |
22.10.05 Docker - 명령어 (0) | 2022.10.05 |
22.10.05 Docker - 개념 (0) | 2022.10.05 |