Back-end/AWS
Git Action을 이용한 CI/CD 및 배포 설정
개발자 키우기
2023. 5. 31. 17:43
1. 보안 그룹 생성
- 새로운 보안 그룹 만들기
- 인바운드 규칙에서 내 IP에서 DB를 관리 할 수 있도록 설정
- 엘라스틱빈스톡에서 생성되는 보안그룹이 DB를 관리 할 수 있도록 설정 ( 엘라스틱빈스톡 생성 이후 설정 )
2. RDS 생성
- 표준 생성 선택
- 해당 DB 엔진 선택
- 프리 티어 선택
- DB 인스턴스 식별자 / 사용자 이름 / 비밀번호 설정
- 퍼플릭 액세스를 예로 선택 ( 내 컴퓨터에서 db를 관리 할 수 있도록 )
- 기존 VPC 보안 그룹에서 위에서 순서1에서 설정 한 보안 그룹을 선택하고 default는 삭제
- RDS 생성
- 파라미터 그룹에서 파라미터 그룹 생성
- 이름 설정하고 생성
- 생성한 파라미터 눌러서 검색창에 zone을 검색 후 파라미터 편집을 눌러서 time_zone을 Asia/Seoul로 변경 후 변경 사항 저장
- 마찬가지로 검색창에 character_set를 검색 후 모든 값을 utf8mb4로 변경 후 저장
- 생성된 RDS 편집을 누른 뒤 DB 파라미터 그룹을 생선한 파라미터로 변경 후 계속
- 즉시 적용을 누른 뒤 DB 인스턴스 수정
- 수정이 완료 되면 작업을 눌러서 재부팅
3. DB 설정 ( 마리아 DB )
- HeidiSQL 실행 후 호스트명은 RDS 앤드포인트 로 설정
- 사용자와 비밀번호는 RDS 에서 설정 한 값 입력 후 열기
- CREATE DATABASE _____; DATABASE 생성
USE _____; USE 생성
ALTER DATABASE _database명_ CHARACTER SET = 'utf8mb4' COLLATE = 'utf8mb4_general_ci'; DB UTF-8설정
SHOW VARIABLES LIKE 'c%'; 인코딩 설정 확인
SELECT @tIME_ZONE, NOW(); 타임 확인 까지 완료 되면 테이블 및 관계 설정
4. Elastic Beanstalk 생성
- 애플리케이션 생성
- 웹 서버 환경 선택
- 애플리케이션 이름 설정
- 플랫폼과 플랫폼 브랜치 알맞게 선택
- 프리셋에서 사용자 지정 구성을 선택 후 다음
- 새 서비스 또는 기존 서비스 역할 사용
- EC2 키 페어 선택
- EC2 인스턴스 프로파일 선택 (참고 IAM 역할 만들기 - https://twosharkbaby.tistory.com/22 ) 후 다음
- VPC 기존꺼 선택
- 퍼플릭 IP 주소 활성화 및 인스턴스 서브넷 모두 체크 후 다음
- IMDSv1 활성화로 변경
- 보안 그룹은 선택하지 않음
- 오토 스케일링 그룹에서 환경 유형은 밸런싱된 로드로 변경
- 인스턴스는 최소값2 최대값4로 설정
- 로드 밸런서 유형은 애플리케이션 로드 밸런서로 유지 후 다음
- 관리형 업데이트는 비활성화
- 배포 정책은 변경 불가 선택
- 환경 변수 설정 ( RDS_DB_NAME / RDS_HOSTNAME / RDS_PASSWORD / RDS_PORT / RDS_USERNAME 등 )
- 다음 후 생성 ( RDS 보안 그룹 마무리 설정 )
5. 배포
- Visual studio 터미널 열어서 git clone을 통하여 파일 받고 열기
- CD 때 필요한 파일 ( .ebextensions\00-makeFiles.config ) 설정
files:
"/sbin/appstart":
mode: "000755"
owner: webapp
group: webapp
content: |
#!/usr/bin/env bash
JAR_PATH=/var/app/current/application.jar
# run app
java -Dspring.profiles.active=prod -Dfile.encoding=UTF-8 -jar $JAR_PATH
- CI 때 필요한 파일 ( github\workflows\deploy.yml 과 Procfile ) 설정
name: aws-v5
on:
push:
branches:
- main
# actions/setup-java@v2는 사용자 정의 배포를 지원하고 Zulu OpenJDK, Eclipse Temurin 및 Adopt OpenJDK를 기본적으로 지원합니다. v1은 Zulu OpenJDK만 지원합니다.
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: 11
distribution: zulu
- name: Pemission
run: chmod +x ./gradlew
- name: Build with Gradle
run: ./gradlew clean build
# UTC가 기준이기 때문에 한국시간으로 맞추려면 +9시간 해야 한다
- name: Get current time
uses: 1466587594/get-current-time@v2
id: current-time
with:
format: YYYY-MM-DDTHH-mm-ss
utcOffset: "+09:00"
- name: Show Current Time
run: echo "CurrentTime=${{steps.current-time.outputs.formattedTime}}"
# EB에 CD 하기 위해 추가 작성
- name: Generate deployment package
run: |
mkdir deploy
cp build/libs/*.jar deploy/application.jar
cp Procfile deploy/Procfile
cp -r .ebextensions deploy/.ebextensions
cd deploy && zip -r deploy.zip .
- name: Deploy to EB
uses: einaregilsson/beanstalk-deploy@v21
with:
aws_access_key: ${{ secrets.AWS_ACCESS_KEY }}
aws_secret_key: ${{ secrets.AWS_SECRET_KEY }}
application_name: aws-v5-beanstalk # 엘리스틱 빈스톡 애플리케이션 이름!
environment_name: Aws-v5-beanstalk-env # 엘리스틱 빈스톡 환경 이름!
version_label: aws-v5-${{steps.current-time.outputs.formattedTime}}
region: ap-northeast-2
deployment_package: deploy/deploy.zip
springapp: appstart
- 깃허브 사이트의 해당 프로젝트 들어가서 action을 활성화
- IAM AccessKey 만들기( https://twosharkbaby.tistory.com/25 )
- 해당 프로젝트 Settings의 Secrets and variables에서 Secrets를 생성 ( AWS_ACCESS_KEY / AWS_SECRET_KEY )
- 터미널에 git add . => git commit -m "내용" => git push origin main
- PUSH가 되면 깃허브 Actions 에서 배포가 시작 됨
6. NLB ( Network Load Balancer ) 설정
- EC2에서 탄력적 IP 주소 할당 생성
- 로드밸런서에서 로브밸런서 생성
- Network Load Balancer 생성 선택
- Load balancer name 설정
- Network mapping의 Mappings에서 탄력적 IP 선택
- Listeners and routing의 Default action에서 Create target group 선택
- Application Load Balancer 선택하고 Target group name 설정 후 next
- Register Application Load Balancer의 Application Load Balancer에서 로드밸런서 선택 후 생성
- 다시 Listeners and routing의 Default action에서 생성한 타켓 그룹을 선택 후 생성
7. 도메인 주소 만들기
- 가비아
- 출처 메타코딩 최주호