1️⃣ Code Deploy 및 AWS S3 접근에 대한 역할과 정책 설정
[실습] CodeDeploy 셋팅 / IAM 설정
스크린샷이 많은 이유로 박재성 강사님의 노션링크로 대체
강의 내용과 다르게 bucket을 생성할때 instagram-server 를 사용하면 중복된 이름이라며 생성되지 않는 오류가 발생하였다
따라서 bucket name을 instagram-server-bucket-1 과 같이 변경하였더니 생성이 되었다
2️⃣ appspec.yml, 스크립트 파일 작성하기
Code Deploy를 사용하기 위한 필수 코드 작성
appspec.yml
version: 0.0
os: linux
files:
# S3에 저장한 파일들 중 destination(AWS EC2)으로 이동시킬 대상을 지정한다.
# / 이라고 지정하면 S3에 저장한 전체 파일을 뜻한다.
- source: /
# EC2의 어떤 경로에 저장할 지 지정한다.
destination: /home/ubuntu/instagram-server
permissions:
- object: /
owner: ubuntu
group: ubuntu
hooks:
ApplicationStart:
- location: scripts/start-server.sh
timeout: 60
runas: ubuntu
scripts/start-server.sh
#!/bin/bash
echo "--------------- 서버 배포 시작 -----------------"
cd /home/ubuntu/instagram-server
sudo fuser -k -n tcp 8080 || true
nohup java -jar project.jar > ./output.log 2>&1 &
echo "--------------- 서버 배포 끝 -----------------"
3️⃣ Github Actions 코드 작성
.github/workflows/deploy.yml
name: Deploy To EC2
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Github Repository 파일 불러오기
uses: actions/checkout@v4
- name: JDK 17버전 설치
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: application.yml 파일 만들기
run: echo "${{ secrets.APPLICATION_PROPERTIES }}" > ./src/main/resources/application.yml
- name: 테스트 및 빌드하기
run: ./gradlew clean build
- name: 빌드된 파일 이름 변경하기
run: mv ./build/libs/*SNAPSHOT.jar ./project.jar
- name: 압축하기
run: tar -czvf $GITHUB_SHA.tar.gz project.jar appspec.yml scripts
- name: AWS Resource에 접근할 수 있게 AWS credentials 설정
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ap-northeast-2
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- name: S3에 프로젝트 폴더 업로드하기
run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.tar.gz s3://instagram-server-bucket-1/$GITHUB_SHA.tar.gz
- name: Code Deploy를 활용해 EC2에 프로젝트 코드 배포
run: aws deploy create-deployment
--application-name instagram-server
--deployment-config-name CodeDeployDefault.AllAtOnce
--deployment-group-name Production
--s3-location bucket=instagram-server,bundleType=tgz,key=$GITHUB_SHA.tar.gz
코드 설명
빌드 파일 이름 변경까지는 이전에 했던 과정과 동일하므로 생략
✅ 압축하기
tar -czvf
$GITHUB_SHA
✅ AWS Resource에 접근할 수 있게 AWS credentials 설정
aws-region
aws-access-key-id
, aws-secret-access-key
✅ S3에 프로젝트 폴더 업로드하기
GITHUB_SHA.tar.gz
)을 S3 버킷에 업로드aws s3 cp
--region ap-northeast-2
se://instagram-server-bucket-1/$GITHUB_SHA.tar.gz
✅ Code Deploy를 활용해 EC2에 프로젝트 코드 배포
appspec.yml
과 scripts
에 정의된 작업을 수행하여 프로젝트를 배포application-name instagram-server
deployment-config-name CodeDeployDefault.AllAtOnce
deployment-group-name Production
s3-location
bucket=instagram-server-bucket-1
: S3 버킷 이름.bundleType=tgz
: 압축 파일 형식.key=$GITHUB_SHA.tar.gz
: S3에서 다운로드할 파일 이름.EC2를 배운지 얼마 안되었는데, S3와 Code Deploy까지 사용해보니 생각보다 흐름잡기가 어려워서 따로 정리를 해야할 것 같다