순서
1. Security group 생성
2. Security group inbound 설정
3. RDS 생성(외부접속을 위해 public access yes 설정, 보안 그룹 설정, 타임존 설정을 위한 파라미터 그룹 생성)
4. 엘라스틱빈스톡 생성
5. Github actions
6. ec2 -> load balancer -> nlb
사용자, 정책, 그룹, 역할 이해 필요함
환경변수
- application 에 전달되는 값
"두 버전을 모두 올리고, 유저의 요청을 라우터단에서 중계하여, 서서히 새 버전으로 요청을 이동시킨다"
현재 blue group 안에 두 대의 서버로 요청을 나눠서 처리하고 있다고 가정한다. 즉, blue group v1.0.1 버전을 서비스 하다가 아래의 greep group v1.0.2 코드로 배포를 하려고 한다.
그래서 먼저 Blue Group에 존재하는 인스턴스 수와 동일하게 Green Group에 만드는 과정이 일어난다. 그리고 Green 그룹에 v1.0.2 버전을 배포한다. 이렇게 블루/그린 배포
는 두 개의 그룹을 가지고 진행된다.
그리고 Blue/Green 모두 로드밸런서에 연결해서 잠시 동안 두개의 그룹 모두 트래픽을 처리하도록 연결해놓는다.
그리고 Blue Group에 존재하는 모든 인스턴스를 종료한 후에 로드밸런서에 Blue Group을 제외하고 Green Group에서 모든 요청을 처리하도록 한다.
name: your-news
# main branch 에 push 되면 해당 스크립트가 동작한다.
on:
push:
branches: [ "main" ]
permissions:
contents: read
jobs:
build:
# 우분투 설치
runs-on: ubuntu-latest
steps: # actions -> 라이브러리 형태로 스크립트를 제공해줌
- uses: actions/checkout@v3 # checkout: 코드 다운로드
- name: Set up JDK 17 # name 은 생략 가능
uses: actions/setup-java@v3 # JDK 설치
with:
java-version: '17'
distribution: 'temurin'
- name: Grant execute permission for gradlew
run: chmod +x ./gradlew # gradle에 실행 권한을 준다. bash로 실행함
shell: bash
- name: Build with Gradle
run: ./gradlew clean build -x test # test 제외 build 를 하는데 bash로 실행함
shell: bash
# 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}}"
shell: bash
# EB에 CD 하기 위해 추가 작성
- name: Generate deployment package
run: |
mkdir -p 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@v20
with:
aws_access_key: ${{ secrets.AWS_ACCESS_KEY }} # your-news/service-repo 에 등록한 시크릿값을 이용함 (administratorAccess-AWSElasticBeanstalk 정책 권한을 가지는 IAM 유저)
aws_secret_key: ${{ secrets.AWS_SECRET_KEY }}
application_name: your-news-beanstalk # 엘라스틱빈스톡 이름
environment_name: Yournewsbeanstalk-env # 엘라스틱빈스톡 환경 이름
version_label: your-news-${{steps.current-time.outputs.formattedTime}}
region: ap-northeast-2
deployment_package: deploy/deploy.zip # s3 deploy 폴더에 있는 deploy.zip 파일을 elastic beanstalk 에 전달함