본문 바로가기
Study/기타

springboot 프로젝트 AWS 프리티어로 배포하기(2) CodeDeploy, EC2 연동하기

by 나아가는 2024. 1. 17.
반응형

CodeDeploy 란?

  • aws의 배포 서비스
  • S3는 Jar 파일을 전달하기 위해서 사용한다.
  • code deploy는 저장기능이 없기 때문에 빌드 결과물을 받아서 code deploy가 가져갈 수 있도록 보관하는 공간이 필요하고 그 역할을 S3 가 한다.
💡 code deploy 에서는 깃허브 코드를 가져오는 기능을 지원하기 때문에, 빌드와 배포를 모두 할 수 있다. 하지만 빌드없이 배포만 필요할 때 대응하기 어렵다.
빌드와 배포를 분리해서 배포만 필요할 경우 빌드된 jar를 재사용하면 되지만, 빌드와 배포를 모두 하게되면 항상 빌드를 하게 되기 때문에 확장성이 떨어진다. 따라서 웬만하면 빌드와 배포를 분리하는 것을 추천한다.

 

IAM생성

ec2에 IAM 역할 추가하기

IAM 에서 사용자와 역할의 차이

  • 역할
    • AWS 서비스에만 할당할 수 있는 권한
    • EC2, CodeDeply, SQS 등
  • 사용자
    • AWS 서비스 외에 사용할 수 있는 권한
    • 로컬 PC, IDC 서버 등

EC2에서 사용할 codedeploy 역할 생성

 

EC2 서비스에 역할 등록 후 재부팅

 

EC2 에 codedeploy 에이전스 설치

https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-ubuntu.html

 

Ubuntu Server용 CodeDeploy 에이전트 설치 - AWS CodeDeploy

출력을 임시 로그 파일에 쓰는 것은 Ubuntu Server 20.04에서 install 스크립트를 사용하여 알려진 버그를 해결하는 동안 사용해야 하는 해결 방법입니다.

docs.aws.amazon.com

wget https://{bucket-name}.s3.{region-identifier}.amazonaws.com/latest/install
# 한국 리전일 경우
wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install

# install 파일 실행 권한 부여
chmod +x ./install
# install 파일로 설치
sudo ./install auto
# 실행 상태 검사
sudo service codedeploy-agent status

codedeploy를 위한 권한 생성

IAM codedeploy 생성

code deploy > 애플리케이션 생성> 배포그룹 생성

S3, codedeploy, EC2 연동하기

EC2 에 파일 저장할 폴더 생성

mkdir ~/app/step2 && mkdir ~/app/step2/zip

appspec.yml 생성

  • CodeDeploy 가 어떤 시나리오로 동작할 지 결정하는 파일
  • 프로젝트 최상단에 appspec.yml 생성
version: 0.0
os: linux
files:
  - source:  / # codedeploy에서 전달해준 파일 중 destination으로 이동시킬 대상 지정(/:모든파일)
    destination: /home/ubuntu/app/step2/zip/ # 지정 파일을 받을 위치
    overwrite: yes

main.yml 에 배포 설정 추가

- 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=$FILE_NAME.zip,bundleType=zip

배포 확인

배포 실패(1)

ec2와 codedeploy 의 태그가 달라서 발생한 오류

Codedeploy 배포 에러 [The deployment failed because no instances were found for your deployment group.]

배포 실패(2)

EC2 에서 에러 로그 확인

cat /var/log/aws/codedeploy-agent/codedeploy-agnet.log

~~ The specified key does not exist 

해결

main.yml 파일 설정 오류: s3 key 수정

배포 실패(3)

에러로그 확인 > appspec.yml 이 없다는 에러

→ The CodeDeploy agent did not find an AppSpec file within the unpacked revision directory at revision-relative path

# /opt/codedeploy-agent/deployment-root/[UUID]/[UUID]/deployment-archive 로 이동하면 
# 빌드관련 파일 존재

→ jar 파일만 압축해서 appspect.yml 파일이 없음.. → 전체 프로젝트 압축으로 변경

배포성공!

scripts/deploy.sh 파일 추가

EC2 자바11 설치

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install openjdk-11-jdk

 

반응형