메인화면
AWS를 이용한 서버 배포 자동화 (CodePipeline)
: SpringBoot프로젝트 생성 > 로컬 환경 설정 > EC2 환경 설정 > EC2 인스턴스 퍼블릿 IPv4 DNS로 Postman 요청확인
1. 스프링부트 프로젝트 생성 및 깃 레포지토리에 연결
2. 로컬(IntelliJ프로젝트)에 다음 설치
// 자바 설치
$ sudo apt update
$ sudo apt install openjdk-11-jre-headless
// AWS CLI 설치 (순차적으로 입력)
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ sudo apt install unzip
$ unzip awscliv2.zip
$ sudo ./aws/install
// AWS CLI 설치 확인 (아래는 성공시 결과 출력문구)
$ aws --version
aws-cli/2.1.39 Python/3.8.8 Darwin/20.4.0 exe/x86_64 prompt/off
3. EC2 인스턴스에 CodeDeploy Agent 설치
// 순차적으로 입력하여 설치
$ 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
// 서비스 실행중인지 확인
$ sudo service codedeploy-agent status
4. Postman으로 EC2 연결 확인
5. EC2 인스턴스에서 태그 / 보안 확인
: 태그는 Key-Value쌍이며, 공용할당 태그와 개인 소유 리소스 식별 태그가 있음
: 개인 소유 리소스 식별 태그는 인스턴스 이름에 적용됨
: 보안탭에서 IAM 역할 확인
6. IAM 역할 및 신뢰관계 편집
: 권한 추가 > 정책연결 > 아래의 권한 선택 후 정책연결 (그 외 필요한 정책이 있으면 추가하기)
S3 검색 | AmazonS3FullAccess |
EC2Role 검색 | AmazonEC2RoleforAWSCodeDeploy |
CodeDeployRole 검색 | AWSCodeDeployRole |
SSMFull | AmazonSSMFullAccess |
: 신뢰관계 > 신뢰 정책 편집 > 대괄호 로 배열설정 > 리전정보("codedeploy.ap-northeast-2.amazonaws.com") 추가
7. 로컬 프로젝트에 appspec.yml 및 buildspec.yml 파일 생성 (최상위 디렉토리에 생성)
: CodeDeploy-Agent가 인식하는 파일
1) appspec.yml : 쉘스크립트(sh)파일에 정의한 동작을 연동하기 위한 파일
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가 인식하는 파일
* 여기선 최상위 디렉토리가 DeployServer라는 이름 기준. 다른 프로젝트시 변경
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
8. 로컬프로젝트 최상위 디렉토리에 script디렉토리 생성 후 sh파일들 생성 (여기선 appspec.yml에 정의한 4가지 생성)
// 파일명 : scripts/initialize.sh
#!/usr/bin/env bash
chmod +x /home/ubuntu/build/**
// 파일명 : scripts/server_clear.sh
#!/usr/bin/env bash
rm -rf /home/ubuntu/build
// 파일명 : scripts/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 &
// 파일명 : scripts/server_stop.sh
#!/usr/bin/env bash
sudo pkill -f 'java -jar'
9. AWS CodeDeploy에서 애플리케이션 생성 및 배포그룹 연결
: CodeDeploy > 애플리케이션 > 애플리케이션 생성 > 애플리케이션 이름지정 + EC2/온프레미스 > 애플리케이션 생성
> 배포 그룹 > 배포 그룹 생성 > 배포그룹이름(규칙 : 리소스이름-group) + 서비스역할 입력(본인소유EC2에 연결된 IAM)
> 환경구성에서 Amazon EC2 인스턴스 선택 + 태그그룹에 EC2 인스턴스의 태그 키와 값을 선택
> 로드 밸런싱 활성화(로드 밸런싱 사용할 경우에만 체크)
10. AWS CodePipeline에서 서버 배포 자동화 파이프라인 구축
: CodePipeline > 파이프라인 > 파이프라인 생성 > 파이프라인 이름 지정 > 다음 > GitHub(버전 2) > 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) + 리전(서울) + 애플리케이션이름과 배포그룹(생성해둔 애플리케이션과 배포그룹)
> 다음 > 파이프라인 생성
11. Deploy 실패시 로그확인 방법
: CodeDeploy-Agent는 파이프라인 실행 때마다 로그를 해당 EC2 인스턴스에 저장함
: 아래 경로로 들어가 로그파일 확인
$ cd ~
$ cd /opt/codedeploy-agent/deployment-root/deployment-logs
$ nano codedeploy-agent-deployments.log
: 여기서 [stderr]는 standard error, [stdout]은 standard output을 의미 (리눅스 standard stream관련)
: 그 외 명령어로 tail, head, grep 등이 있음
1) tail 파일명 : 파일 내용중 끝부분 몇줄만 보여줌
2) head 파일명 : 파일 내용중 앞부분 몇줄만 보여줌
3) grep 키워드 : 키워드 검색
: 프로세스가 실행중인지 확인은 다음 명령어 사용
$ sudo lsof -i :(실행한 포트번호)
'AWS > 정리' 카테고리의 다른 글
[AWS] 환경 변수 설정 (0) | 2022.10.12 |
---|