AWS DevOps 4장 정리

minyeob·2023년 4월 16일
0

aws

목록 보기
15/18

AWS DevOps

4장 정리

서버종료 및 프로그램 설치

서버 PID 찾아서 종료 시키기

  • var.sh (PROJECT_PID, JAR_PATH 환경변수 설정)

기존 서버 종료 및 프로그램 설치 두번째

  • deploy.sh
  1. var.sh 환경변수 적용가능하도록 설정
  2. crontab 지우기
  3. 서버 체킹
    1. 서버 종료시키기
    2. apt update (/dev/null 은 쓰레기통에 버리는 것)
    3. jdk install 하기
    4. timezone 세팅

프로젝트 다운로드 및 빌드

기존 프로젝트를 삭제하고 다시 다운받는 로직을 짜보도록 하자

  1. 기존 프로젝트 폴더 삭제
  2. git clone 해오기

git clone 에 sleep 3s 을 적용하는 이유: git clone이 비동기식으로 작동할 경우 다운로드를 완료하지 않고 다음 순서인 빌드로 넘어가 질 수 있기 때문이다.


서버 실행하기

만들어진 jar 파일을 스크립트로 실행해보자! ( yml 설정때문에 prod로 설정), (log.out,err.out은 프로젝트 파일 삭제할때 사라지면 안되니까 home에 만들기)


cron 등록

deploy.sh에 추가

  • check-and-restart.sh

참고)파일 생성 후에 chmod u+x check-and-restart.sh 꼭 해주기!

test 없이 jar 빌드하고싶을때

  • ./gradlew build -x test

배포 파일 압축하기

tar 압축

  • -c tar로 압축을 할때
  • -v 압축을 하거나 풀때 출력을 화면에 보여줄지 말지
  • -f 파일 이름을 지정할 수 있음
  • -x tar로 압축을 풀때
  1. 파일 압축하기
    • tar -cvf deploy.tar check-and-restart.sh deploy.sh var.sh(deploy.tar 라는 이름으로 3개의 파일 압축)

압축한 파일 옮기기

SFTP 모드로 접속

드래그 해서 옮기기


배포 스크립트 작성

  1. 새로운 aws 인스턴스 생성
  2. SFTP 세션을 통해 deploy 압축파일 전달
  3. 압축 해제
    1. tar -xvf deploy.tar

5장 정리

엘라스틱 빈스톡 샘플코드 실행해보기

엘라스틱 빈스톡

  • OS 설치가 필요 없음(이미 설치가 되어있음)
  • JDK 설치가 필요 없음(이미 설치가 되어있음)
  • 오토 스케일링, 각종 소프트웨어 구성,로드밸런서, 모니터링, 업데이트 버전 관리

Elastic Beanstalk 만들기

이렇게 설정하고 만들어 주면

몇분 뒤에..

Elastic beanstalk이 만들어졌고 자동으로 인스턴스도 생성 되었다.


엘라스틱 빈스톡 내부 구성 이해하기

  1. 생성
    1. EC2 (JDK 설치, NGinX 서버(프록시 서버 80 포트))
    2. 샘플코드가 동작(5000 포트)
    3. 로드밸런서
      • 80포트 응답(생략 가능)

  • ec2 인스턴스에 적힌 IP 주소
        
  • Elastic beanstalk 도메인 주소로 요청했을 때의 IP 주소(로드밸런서)

IP 주소가 서로 다르다!! 왜그럴 까?

다음 순서와 같이 동작하기 때문이다

1. 클라이언트가 로드밸런서 80포트로 요청을 보냄
2. 로드밸런서가 EC2의 80포트로 요청
3. NGinX(프록시) 서버가 응답
4. 프록시 서버가 내부적으로 5000번 포트를 호출
5. 샘플코드가 동작
  1. NGinX 서버

→외부 IP 요청을 거부 (클라이언트가 다이렉트로 서버에 요청 시 거부한다)

그럼 어떻게 요청해야 되는데?

→ 같은 보안 그룹으로 묶인 친구의 요청만 받는다.

  • 생성된 로드밸런서의 보안 그룹

  • 생성된 인스턴스 인바운드 규칙 보안 그룹

같은 것을 확인 할 수 있다.. 따라서 NGinx 서버에는 로드 밸런서만 접근 가능하다!


엘라스틱 빈스톡 프로젝트 배포해보기

  1. cmd 창이나 Terminal(Git bash) 에서 파일을 build 해준다.

→ jar 파일이 생성된 것을 확인 할 수 있다.

  1. aws Elastic Beanstalk 에 jar 파일을 업로드 한다.

이렇게 배포를 하게 되면 5000포트로 연결되는 Java 서버를 배포하는 것이다.

근데 이게 나와버리네 띠용..

근데 이유가 있었다. 프로젝트에 기본 도메인 주소/ ← 요기 슬래쉬 주소가 없어서 그렇다고 한다.


엘라스틱 빈스톡 오류 없이 배포하기

참고) build 시에 기존에 남아있는게 있다면 ./gradlew clean build 해주면 된다.

test 코드 및 / 주소를 만들어준 뒤에 다시 build 후에 배포를 진행했더니 배포가 성공하였다!

엘라스틱 빈스톡을 만들었는데 자꾸만 인스턴스가 프리티어 t2.micro 가 아닌 t3.micro 로 만들어졌다. 인스턴스를 중지하고 유형을 바꾸려 해봤지만 새로운 t3.micro 인스턴스가 만들어지고 중지시켰던 인스턴스가 종료되었다…. 돈 나가는건 어떻게든 막아야한다ㅋㅋ..

알고보니 엘라스틱 빈스톡의 Auto scailing 이 설정되어있었는데 여기에 인스턴스 유형이 t3.micro로 설정 되어있었기 때문이고. EC2를 중지 시켜놓으면 현재 실행중인 EC2 가 없기때문에 오토스케일링으로 인해 t3.micro 가 자동으로 생성되었던 것이다!!! 아무튼 AutoScailing 설정을 t2.micro 프리티어로 바꾸고 해결 완료!


엘라스틱 빈스톡 SSH 접속해보기

  1. 구성 → 보안 → EC2 키 페어 넣어주기

  2. 환경 적용 된 후에 Mobaxterm 연결 ( 주의! Specify username = ec2.user 이다)

  1. 연결 완료!

  • /etc/nginx/nginx.conf 파일


nginx 서버는 80 포트로 돈다.

  • /etc/nginx/conf.d/elasticbeanstalk/00_application.conf 파일

    nginx 한테 요청하면 5000포트로 요청 한다.
이제 RDS랑 CI/CD만 마무리 하면 된다 파이팅!
profile
백엔드 개발자를 꿈꾸며 공부한 내용을 기록하고 있습니다.

0개의 댓글