시작 전에 점검
토픽 점검
main Server 카프카 정상 할당 점검
traffic Server 카프카 정상 할당 점검
웹 서비스 정상 동작 확인
카프카 서버 정상 동작 확인
메인 및 트래픽 서버 각각 2대로 증가시켜서 동작
1. 각 토픽에 대한 파티션을 2개씩 설정 및 확인
2. 각 서버 파티션 할당 확인
•
Main Server
•
Traffic Server
3. AWS의 메인서버, 트래픽서버 & 로컬 서버의 메인서버, 트래픽 서버를 통해 2To2 방식 정상 작동 테스트
정상 동작 확인했습니다.
CI/CD 한번에 배포
현재는 group Id를 설정하기에 각각의 웹 어플리케이션이 약간 다른 상황입니다.
이를 어떻게 하면 CI/CD를 통해 간편하게 적용시킬 수 있을까?
환경변수를 사용하면 되지 않을까?
인텔리제이에서 환경변수를 사용하며 빌드하는 것이 성공하는 걸 확인 한 이후 github action에 적용해 보겠습니다.
인텔리제이
위의 결과처럼 정상적으로 환경변수가 반영되어 나오는 것을 확인 할 수 있습니다.
그럼 이를 Github Action에 적용하기 전에 CI/CD를 위한 AWS 작업을 먼저 하겠습니다.
AWS
인스턴스를 하나 더 만든 후 배포를 위해 codedeploy 역시 설치 완료 하였습니다.
•
배포 워크 파일
name: Java CI with Gradle
on:
push:
branches: [ "deployTest"]
# 본인이 설정한 값을 여기서 채워넣습니다.
# 리전, 버킷 이름, CodeDeploy 앱 이름, CodeDeploy 배포 그룹 이름
env:
AWS_REGION: ap-northeast-2
S3_BUCKET_NAME: team258-bucket
permissions:
contents: read
jobs:
deploy1:
name: Deploy to Server 1
runs-on: ubuntu-latest
environment: production
env:
CODE_DEPLOY_APPLICATION_NAME: team258-codedeploy-app
CODE_DEPLOY_DEPLOYMENT_GROUP_NAME: team258-codedeploy-deployment-group
GROUP_ID: 1
steps:
# (0) 환경 변수 Group id를 위해 파일 생성
# - name: Create env file
# run: echo "GROUP_ID=${{ env.GROUP_ID }}" > env.sh
# (1) 기본 체크아웃
- name: Checkout
uses: actions/checkout@v3
- name: Check current working directory
run: pwd
- name: List directory contents
run: ls -al
# (2) JDK 17 세팅
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
# (3.5) properties 파일 수정
- name: Update properties file
run: |
sed -i "s/spring.datasource.password=.*/spring.datasource.password=${{ secrets.DB_PASSWORD }}/" src/main/resources/application.properties
# (3) Gradle build (Test 제외)
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
uses: gradle/gradle-build-action@v2.6.0
with:
arguments: build
# (4) AWS 인증 (IAM 사용자 Access Key, Secret Key 활용)
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
#
# (5) 빌드 결과물을 S3 버킷에 업로드
- name: Upload to AWS S3
run: |
aws deploy push \\
--application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }} \\
--ignore-hidden-files \\
--s3-location s3://$S3_BUCKET_NAME/$GITHUB_SHA.zip \\
--source .
# (6) S3 버킷에 있는 파일을 대상으로 CodeDeploy 실행
- name: Deploy to AWS EC2 from S3
run: |
aws deploy create-deployment \\
--application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }} \\
--deployment-config-name CodeDeployDefault.AllAtOnce \\
--deployment-group-name ${{ env.CODE_DEPLOY_DEPLOYMENT_GROUP_NAME }} \\
--s3-location bucket=$S3_BUCKET_NAME,key=$GITHUB_SHA.zip,bundleType=zip
deploy2:
name: Deploy to Server 2
runs-on: ubuntu-latest
environment: production
env:
CODE_DEPLOY_APPLICATION_NAME: team258-codedeploy-app2
CODE_DEPLOY_DEPLOYMENT_GROUP_NAME: team258-codedeploy-deployment-group2
GROUP_ID: 2
steps:
# (0) 환경 변수 Group id를 위해 파일 생성
- name: Checkout
uses: actions/checkout@v3
- name: Check current working directory
run: pwd
- name: List directory contents
run: ls -al
# (2) JDK 17 세팅
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
# (3.5) properties 파일 수정
- name: Update properties file
run: |
sed -i "s/spring.datasource.password=.*/spring.datasource.password=${{ secrets.DB_PASSWORD }}/" src/main/resources/application.properties
# (3) Gradle build (Test 제외)
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
uses: gradle/gradle-build-action@v2.6.0
with:
arguments: build
# (4) AWS 인증 (IAM 사용자 Access Key, Secret Key 활용)
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
#
# (5) 빌드 결과물을 S3 버킷에 업로드
- name: Upload to AWS S3
run: |
aws deploy push \\
--application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }} \\
--ignore-hidden-files \\
--s3-location s3://$S3_BUCKET_NAME/$GITHUB_SHA.zip \\
--source .
# (6) S3 버킷에 있는 파일을 대상으로 CodeDeploy 실행
- name: Deploy to AWS EC2 from S3
run: |
aws deploy create-deployment \\
--application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }} \\
--deployment-config-name CodeDeployDefault.AllAtOnce \\
--deployment-group-name ${{ env.CODE_DEPLOY_DEPLOYMENT_GROUP_NAME }} \\
--s3-location bucket=$S3_BUCKET_NAME,key=$GITHUB_SHA.zip,bundleType=zip
Plain Text
복사
그럼 이제 각각의 서버에 환경 변수를 다르게 해서 한번에 배포하겠다.
•
배포 결과
위처럼 정상적으로 배포 된 것을 확인 할 수 있습니다.
현재 메인 서버2를 로드밸런서에 추가하지 않아서 현재는 ip로 조회하였다.
그럼 이제 로드 밸런서에 추가하는 작업을 진행 하겠습니다.
로드 밸런서 대상그룹에 등록 하였고 정상적으로 들어 갔음을 확인할 수 있습니다.