아마존 웹 서비스(AWS)에서 제공하는 클라우드 컴퓨팅 서비스
AWS EC2 인스턴스는 서버를 중지하고 다시 실행시키면 퍼블릭 IP가 변경되기 때문에 클라이언트가 사용할 수 있는 변하지 않는 IP가 필요합니다.
위 과정들을 거치고 태그 추가 과정을 진행을 합니다
CodeDeploy를 생성할 때 어떤 인스턴스에서 수행할지 구분하는 값으로 태그를 사용하기 때문에 추가 필요
EC2 인스턴스에서 S3에 올려놓은 파일에 접근할수 있도록 권한을 추가해줘야 합니다
정상 설치 확인
S3 버킷이란 이미지 또는 ZIP 파일을 저장하기 위한 스토리지 서비스입니다.
CodeDeploy를 사용하기 위해선 IAM 에서 역할을 만들어야 합니다
이제 사용할 CodeDeploy 앱을 생성합니다.
어떤 인스턴스에서 동작할지 선택 합니다.
로드밸런싱을 사용하지 않으니 체크만 해제합니다.
ACCESS TOKE만 있으면 되기 때문에 console 엑세스 권한은 없어도 된다고 한다.
생성하고 나서 엑세스키도 만들어줘야 한다
이렇게 지금까지 서버를 띄울 EC2, 배포할 결과물을 저장할 S3, 배포를 도와줄 CodeDeploy 이렇게 총 세가지 AWS서비스를 만들었습니다.
CodeDeploy에서 배포를 위해 참조할 파일을 작성합니다.
가장 상단에 파일을 만든다
stop.sh
어플리케이션이 실행되어 있으면 좋료하는 스크립트
start.sh
어플리케이션 실행 스크립트
스크립트는 작성 했고 deploy.yml을 작성해보자
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle
name: Deploy to Amazon EC2
on:
pull_request:
branches:
- master
# 본인이 설정한 값을 여기서 채워넣습니다.
# 리전, 버킷 이름, CodeDeploy 앱 이름, CodeDeploy 배포 그룹 이름
env:
AWS_REGION: ap-northeast-2
S3_BUCKET_NAME: yoo-github-actions-s3-bucket
CODE_DEPLOY_APPLICATION_NAME: my-codedeploy-app
CODE_DEPLOY_DEPLOYMENT_GROUP_NAME: my-codedeploy-deployment-group
permissions:
contents: read
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
environment: production
steps:
# (1) 기본 체크아웃
- name: Checkout
uses: actions/checkout@v3
# (2) JDK 11 세팅
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '11'
# (3) Gradle build (Test 제외)
- name: Build with Gradle
uses: gradle/gradle-build-action@0d13054264b0bb894ded474f08ebb30921341cee
with:
arguments: clean build -x test
# (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
추후에 트러블 슛팅 관련해서 블로그를 작성할 계획이다.
참고
https://wookim789.tistory.com/34
https://bcp0109.tistory.com/356
https://bcp0109.tistory.com/363