교육 (Today I Learned)/Hanaro

[Hanaro] 86일차 / AWS (EC2 인스턴스 생성, 접속, 설정, 스프링부트 프로젝트 배포)

Bay Im 2024. 5. 24. 17:34

EC2

  • EC2란? (Elastic Compute Cloud)
    • 성능, 용량 등을 유동적으로 사용할 수 있는 서버

 

 

EC2 인스턴스 생성

  • EC2 대시보드로 이동
    • 이름 및 태그
      • 이름 작성
    • 애플리케이션 및 OS 이미지
      • Amazon Linux 클릭
      • Amazon Machine Image(AMI)
        • Amazon Linux 2 AMI (HVM) - Kernel 5, 10, SSD Volume Type 클릭
      • 아키텍쳐
        • 64비트(x86)
    • 인스턴스 유형
      • t2.micro 클릭
    • 키 페어(로그인)
      • 키 페어 이름 작성
      • 키 페어 유형
        • RSA
      • 프라이빗 키 파일 형식
        • .pem
        • pem 파일은 잘 저장해두기!


    • 네트워크 설정 - 편집
      • 보안 그룹 이름 변경
        • ex) ~firewall
      • 설명
        • ex) ~created 2024-05-23
      • 인바운드 보안 그룹 규칙 (2개 추가하기)
        • 보안 그룹 규칙 추가 1
          • 포트 범위
            • 8080
          • 소스 유형
            • 위치 무관
        • 보안 그룹 규칙 추가 2
          • 유형
            • HTTPS
          • 소스 유형
            • 위치 무관


      • 스토리지 구성
        • 30 GiB로 변경


      • 인스턴스 시작 클릭
       
  • 네트워크 및 보안으로 이동
    • 탄력적 IP
      • 탄력적 IP 주소 할당 클릭
      • 수정없이 할당 클릭


    • 작업 토글 버튼의 탄력적 IP 주소 연결 클릭
      • 자신의 인스턴스 클릭 후 연결 버튼 클릭
          •  

 

 

 

EC2 서버 접속 (Putty)

  • Putty 설치  
  • puttygen.exe 실행
    • 상단의 Conversions - import key 클릭
      • 위에서 다운받은 pem 파일 선택
      • Save private key 클릭 (오류 메시지떠도 OK 클릭)
    • ppk 파일 다운 완료
  • putty.exe 실행
    • Connection- SSH- Auth- Credentials 클릭
      • Private Key file for authentication:
        • 위에서 다운받은 ppk 파일 선택



    • Session 클릭
      • Host Name (or IP address)
        • ec2-user@탄력적IP주소 or 자동할당된IP주소
      • Connection Type
        • SSH
      • Open 클릭


     
  • 접속 완료 (콘솔창 생성)

 

 

 

EC2 서버 설정

  • 위에서 생성된 콘솔창에서 설정
  • Java 17 설치
    • 콘솔창에 아래 명령어 입력
    • wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
      sudo rpm -ivh jdk-17_linux-x64_bin.rpm
      sudo alternatives --config java
      java -version
  • 타임존 변경
    • 콘솔창에 아래 명령어 입력
    • sudo rm /etc/localtime
      sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
  • Host Name 변경
    • 콘솔창에 아래 명령어 입력
    • sudo hostnamectl set-hostname 변경할이름
      sudo reboot
    • 콘솔창 닫았다가 다시 재접속하면 변경한 이름으로 바뀌어서 나온다.
  • Hosts에 HostName 등록
    • 콘솔창에 아래 명령어 입력
    • sudo vim /etc/hosts
      단축키 i(삽입모드 전환)
      127.0.0.1   호스트이름
      입력후
      단축키 ESC(삽입모드 종료)
      단축키 :wq(저장후 종료)


    • 포트 접근해보기
      • 콘솔창에 아래 명령어 입력
        • curl 호스트이름
      • 아래와 같은 에러가 뜨는건 잘 실행이 된다는 의미이다. (아직 80포트에서 실행된 서비스 프로그램이 없기 때문에 접근할 수 없다는 에러)
  • 기본 단축키
    • 붙여넣기
      • SHIFT+INSERT
    • 잘라내기
      • SHIFT+DELETE
    • 화면 지우기
      • clear

 

 

EC2 서버에 스프링부트 배포

  • 배포할 프로젝트 코드 준비
    • build.gradle에 코드 추가
    • bootJar{
      	archivesBaseName = '프로젝트명'
      	archiveFileName = '프로젝트명.jar'
      	archiveVersion = "0.1.0"
      }
  • github 레포지토리 생성
    • 프로젝트 코드 업로드
      • Upload files에서 코드 드래그하여 업로드 가능


      • 커밋
       
  • EC2 Putty 콘솔창 접속
    • git 설치
      • 콘솔창에 sudo yum install git 입력
      • git —version 입력하여 버전 확인
    • 프로젝트 디렉토리 생성 및 이동
      • 콘솔창에 mkdir ~/app && mkdir ~/app/step1 입력
      • cd ~/app/step1 입력
    • 프로젝트 clone
      • 위에서 생성한 깃 레포지토리 주소 복사
      • 콘솔창에 git clone 레포지토리주소 입력
      • 콘솔창에 cd 프로젝트명 입력하여 이동
      • 콘솔창에 ll 입력하여 프로젝트 확인
    • 단위 테스트
      • 콘솔창에 chmod +x ./gradlew 입력하여 실행 권한 추가
      • 콘솔창에 ./gradlew test 입력하여 단위 테스트 수행

 

 

 

배포 스크립트 만들기

  • deploy.sh 생성
    • 콘솔창에 vim ~/app/step1/deploy.sh 입력
  • deploy.sh 작성
    • 예시
    • #!/bin/bash
      
      REPOSITORY=/home/ec2-user/app/step1
      PROJECT_NAME=ec2-loginjoindb(프로젝트명)
      
      cd $REPOSITORY/$PROJECT_NAME/
      
      # master 브랜치의 최신 내용 받기 
      echo "> Git Pull"
      
      git pull
      
      # gradlew로 build 수행 
      echo "> 프로젝트 Build 시작"
      
      ./gradlew build
      
      echo "> step1 디렉토리 이동"
      
      cd $REPOSITORY
      
      echo "> Build 파일 복사"
      
      cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/
      
      echo "> 현재 구동중인 애플리케이션 pid 확인"
      
      #CURRENT_PID=$(pgrep -f ${PROJECT_NAME}*.jar)
      CURRENT_PID=$(pgrep -f ec2-loginjoindb.jar)
      
      echo "현재 구동 중인 애플리케이션 pid: $CURRENT_PID"
      
      if [ -z "$CURRENT_PID" ]; then
         echo "> 현재 구동 중인 애플리케이션이 없으므로 종료하지 않습니다."
      else
         echo "> kill -15 $CURRENT_PID"
         kill -15 $CURRENT_PID
         sleep 5
      fi
      
      echo "> 새 애플리케이션 배포"
      
      # 실행하 jar 파일명 찾기 
      #JAR_NAME=$(ls -tr $REPOSITORY/ | grep *.jar | tail -n 1)
      JAR_NAME=$(ls -tr $REPOSITORY/ | grep ec2- | tail -n 1)
      
      echo "> JAR Name: $JAR_NAME"
      
      nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &
  • 실행 권한 추가
    • 콘솔창에 chmod +x ./deploy.sh 입력
  • deploy.sh 실행
    • 콘솔창에 ./deploy.sh > err.log 입력
  • 그 외
    • 에러로그 확인 방법
      • vi err.log
      • vi nohup.out (java -jar 실행 에러)
    • 현재 실행 중인 프로세스(앱) 보기
      • ps -ef
    • 웹 브라우저 실행
      • curl localhost:8080

 

728x90