티스토리 뷰
마지막으로 CodeDeploy를 사용하여 s3에 있는 zip 파일을 ec2인스턴스에 이관하고 쉘 스크립트 파일을 생성하고
배포 자동화를 하는 법에 대해서 포스팅을 해보도록하자 -> 이전포스팅
1. start.sh 스크립트 파일 추가
프로젝트의 루트 경로에 scrpits 파일을 생성하고 start.sh 쉘 스크립트 파일을 생성하여 아래의 코드를 추가한다
#!/usr/bin/env bash
REPOSITORY=/home/ec2-user/app/deploy
PROJECT_NAME=AZ-Server
echo "> Build 파일 복사"
cp $REPOSITORY/*.jar $REPOSITORY/zip
echo "> 구동중인 애플리케이션 pid가 있다면 죽입니다"
fuser -k -n tcp 8080
echo "> 새 애플리케이션 배포"
JAR_NAME=$(ls -tr $REPOSITORY/zip/*.jar | tail -n 1)
echo "> JAR Name: $JAR_NAME"
echo "> $JAR_NAME 에 실행권한 추가"
chmod +x $JAR_NAME
echo "> $JAR_NAME 실행"
nohup java -jar -Dspring.config.location=/home/ec2-user/app/application-real-db.properties $JAR_NAME > $REPOSITORY/zip/nohup.out 2>&1 &
간단하게 설명을 하자면 8080포트로 구동 중인 프로젝트가 있다면 죽이고 새로 받은 jar 파일을 실행하라는 내용이다
2. CodeDeploy 설정
AWS에 들어가서 CodeDeploy 페이지로 들어가 애플리케이션과 배포 그룹을 생성하여준다
애플리케이션을 생성할 때 연동해 줄 EC2를 선택하는 것을 잊지말자
3. 역할 만들기
EC2에서 CodeDeploy를 사용하기 위해서는 역할이라는 것이 필요하다. S3를 사용할 때 사용자를 생성하였듯 역할이라는 것을 생성하는데 사용자는 AWS 외부의 접근을 허가하기 위함이라면 역할은 EC2와 CodeDeploy 같이 AWS 내에서의 접근을 허가하기 위하여 필요한 것이다.
그럼 먼저 EC2에게 필요한 역할을 생성하고 설정을 하여주자
ec2-deploy라는 역할을 생성하고 AmazonEc2RoleforAWSCodeDeploy권한을 부여하였다
그럼 이제 생성한 역할을 EC2 인스턴스에 연결하여주자
인스턴스 설정 -> IAM 역할 연결/바꾸기 -> 생성한 권한 선택을 하고 재부팅 하여준다
두번째로 CodeDeploy에게도 권한을 추가하여준다
마찬가지로 앞서 역할을 생성했던 방식과 동일한 방식으로 역할을 설정하여준다 CodeDeploy 사용을 위한 권한은 한가지 뿐이므로 선택하면된다 그리고 CodeDeploy 편집에 들어가 생성한 권한을 연결하여준다
4. EC2에 CodeDeploy Agent 설치하기
터미널에 접속하여 다음 명령어를 입력하여 CodeDeploy Agent를 설치하여준다
aws s3 cp s3://aws-codedeploy-ap-northeast-2/latest/install . --region ap-northeast-2
chmod +x ./install
sudo ./install auto
sudo service codedeploy-agent status
The AWS CodeDeploy agent is running as PID **** 이러한 메세지가 출력된다면 정상적으로 설치가 완료된 것이다
5. appspec.yml 파일 생성하기
다시 프로젝트로 가서 루트경로에 appspec.yml 파일을 생성한다 이 파일을 CodeDeploy가 읽어서 zip파일을 ec2에 이관 그리고 start.sh 파일을 실행해준다
version: 0.0
os: linux
files:
- source: /
destination: /home/ec2-user/app/deploy
permissions:
- object: /
pattern: "**"
owner: ec2-user
group: ec2-user
hooks:
AfterInstall:
- location: start.sh
timeout: 60
runas: ec2-user
destination에 적혀있는 경로에 파일을 이관하고 그 후 start.sh 파일을 실행하라는 내용이다
6. deploy.yml 파일 수정
추가된 내용을 바탕으로 workflow를 수정한다
- name: Copy appspec
run: cp appspec.yml code-deploy-youtugo-application
- name: Copy shell
run: cp ./scripts/* code-deploy-youtugo-application
- name: Make zip file
run: zip -r -j code-deploy-youtugo-application.zip code-deploy-youtugo-application/*
- name: Deliver to AWS S3
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
run: |
aws s3 cp \
--region ap-northeast-2 \
--acl private \
code-deploy-youtugo-application.zip s3://az-deploy/
- name: Deploy
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
run: |
aws deploy create-deployment \
--application-name az-deploy \
--deployment-group-name az-deploy-group \
--file-exists-behavior OVERWRITE \
--s3-location bucket=az-deploy,bundleType=zip,key=code-deploy-youtugo-application.zip \
--region ap-northeast-2
appspec.yml , start.sh 파일을 포함하여 zip 파일로 만든후 s3에 이관 그리고 codedeploy 애플리케이션의 배포 그룹에 이관하여 배포하는 것 까지 작성하였다
여기까지 완료하였다면 코딩후 push를 하면 자동으로 배포가 실행되어 브라우저에 실행되는 것을 확인 할 수 있다!!
'Infra > AWS' 카테고리의 다른 글
[AWS] - github action과 aws codedeploy를 이용하여 자동 배포하기(2) (0) | 2020.07.23 |
---|---|
[AWS] - github action과 aws codedeploy를 이용하여 자동 배포하기(1) (0) | 2020.07.23 |
[AWS]-RDS 인스턴스 생성하기 (0) | 2020.07.23 |
[AWS] - Docker Mysql 컨테이너 AWS에 배포하기 (0) | 2020.05.27 |