[2] AWS

2024. 11. 26. 10:40AWS

EC2에 인스턴스 , 접속하는것, 포트열어서 외부에서 확인 

nginx를 이용해서 했다.

 

- 실제 프로젝트를 할 때는 부트를 띄워야 한다. 

- EC2에 부트 프로젝트를 띄우려고 한다. 

- 1GB로 띄워주나? 리눅스는 가볍기에 가능하다.

 

- 인스턴스 종료 : 15분 후에 사라짐

 

 

=================================================1번주자====================================

1. region 확인

2. 인스턴스 생성

> Boot1Server

> t2.micro

> keypair MyKey선택

> 인스턴스 시작

- JDK, 인스턴스를 깔아놓은 상태에서 템플릿으로 사용할 수 있다.

 

3. 인스턴스 연결

- IntelliJ, PuTTY, 바로연결, cla를 이용한 연결등이 있다.

 

4. git과 jdk설치할거다

sudo yum install git -y

 

- JDK를 설치해야한다.

sudo yum install java-17-amazon-corretto-devel -y

- devel이 없는건 java 명령어는 먹긴한다. 

-y : 설치하실거예요?를 생략하는것 

> 버전 체크 :  java -version

> javac : 컴파일 동작하는지 확인

 

인스턴스 생성

 

1. 깃 프로젝트 가져온다. 

- 이 플젝은 컨트롤러가 두개있다. 

> 두개를 만든 이유 : 

HealthController -> 핑날리는것으로 생각하면된다.  체크하는것

HelloController -> 경로를 잘 봐야한다. /api/sample/hello

https://github.com/zk2840174/serverEx1.git

 

GitHub - zk2840174/serverEx1

Contribute to zk2840174/serverEx1 development by creating an account on GitHub.

github.com

 

2. git을 사용하기 위해 

git config --global user.name "KimBoris"

git config --global user.email “zlas2345@gmail.com"

 

3. git clone https://github.com/zk2840174/serverEx1.git

 

GitHub - zk2840174/serverEx1

Contribute to zk2840174/serverEx1 development by creating an account on GitHub.

github.com

 

4. cd serverEx1

> ls -a

> ./gradlew build하면 안먹음

> chmod +x gradlew (권한추가)

> 그다음 ./gradlew build하면됨  > 그래들 다운로드

>> 우리프로젝트 중에 boot해서 build하던것이 실행된다. 

빌드하면 시간이 꽤걸림

 

5. ./gradlew bootJar

cd build/libs

ls

들어가면 jar파일이 두개들어가있다. 

- 자바명령어를 통해 실행이 가능하다

- 파일이름 복사해놓고

java -jar (jar파일)

- 스프링 부트가 뜨는것을 확인할 수 있음

- 22번포트만 열려있어서 브라우저에서 볼 수 없다. 

> EC2인스턴스 가서 보안 > 보안그룹 > 인바운드 규칙 편집 > 8080포트 추가  Anywhere

> 인스턴스 > 퍼블릭 IP주소 복사해서 브라우저에서 확인가능

> Helloworld가 보여야 한다. 

{host}/api/sample/hello도 확인이 되어야 한다. 

 

 

===========================================2번주자==========================================

 

지금까지 했던거 다하면 되는데 똑같이 하는데 git, JDK설치

- 경로 확인

> git clone받을건데 git clone받을때 serverEx2를 받아라

>> HealthController는 똑같다. >sample2라는 단어가 추가로 붙는다.

>> HelloController -> api2/sample 이다.

---------------------------------------------------------------------------------------------------------------------------------------------------------------

로드발란스한테는 리스너라는것이 있다.

> 어떤 포트를 받아서 어떻게 처리할건지를 정의해주는것 = 리스너 (규칙이 있다)

>> 규칙을 만든다. 여러종류의 규칙이 있따. > API로 들어오면 1번, API2로 들어오면 2번으로 보내

>>> 리스너가 붙는 대상이 있다. > 대상그룹 (타겟 그룹)

>>>> 로드발란서 설정을 하기위해선 2가지 방법이 있다.

>>>>> L4라는 것이 있다.

>>>>>> ELB에 IP가 붙는다. 그럼 여기로 붙는다 그 후 1번과 2번 EC로 간다.

 

1. 대상그룹을 1개만 만들거다.

2. 대상그룹을 2개를 만들거다.

------------------------------------------------------------------------1번 주자---------------------------------------------------------------------

서버1개로 실습

 

1. 서버가 떠 있는지 확인 (2개 서버)

2. EC2 > 로드 밸런서 > 생성 > 유형 Application LoadBalancer > 생성

3. 이름 : TestLB, 네트워크 매핑 : VPC 가 있어야 한다. VPC = 가상네트워크 , 이 안에서 하위로 내려가는 네트워크가 또 있다.  > 가용영역에 있는것 3,4개있는거 다 체크 > 보안그룹 : 그대로 둬 (나중에 8080포트에 대해 조치해야함)

> 리스너 및 라우팅 > HTTP : 80 => 80으로 들어오면 내가 받아먹는다.  > 옆에보면 대상그룹이 있음 >

- 대상그룹 생성 (새탭) -> 그룹의 세부 정보지정 > 기본구성 인스턴스 > 그룹이름 : TestGroup1 > 프로토콜 : 8080포트로 수정 > 상태검사 ->헬스 컨트롤러를 위한 경로 -<< 상태 검사 경로(/) 라고 되어있다. > 그래서 "" 경로로 만들어놨음 이게 있어야 돌아가기 때문에 > 다음 > 대상 서버가 되는 인스턴스를 잡아줘야 한다.  > 인스턴스가 지금 2개인데 부트 1예제만 할거다 > boot1Server > 아래에 보류중인 것으로 포함 누르면 > 밑으로 내려간다. (대상보기)   > 대상그룹 생성

> 대상합계, 사용되지않음 1개 > 대상그룹은 만들어졌지만 사용된적은 없어 > 리스터 및 라우팅 설정 > 대상그룹쪽 새로고침 > TestGroup1 선택 > 생성 > 설정을 바꿔주는중

- 로드발란서 메뉴 들어가보면 : 프로비저닝 설정이 있다.(세팅을 변경하고있고 바꾸고있다)

> 리소스 맵 - 신규 : 어떻게 연결되는건지를 비쥬얼하게보여준다. 

>> DNS정보 = 연결하는 서버의 주소가 된다. 

>>> 보안그룹 -> 인바운드 규칙이 자동으로 만들어져 있다. 

>>>> DNS서버:8080포트

>>>>> host/api/sample/hello 해보면 데이터 나옴

HelloWorld

>>>>>> 보안 확인 > 보안그룹 > 80, 8080둘다 추가

IPv4, HTTP, TCP, 80

Ipv4, 사용자 지정 TCP, 8080 

- 보안 anywhere로 빠져야 돌아간다.

----------------------------------------------------------------------------여기까지 서버를 1개 띄우는것 -------------------------------------------

[2] 서버를 2개 띄우는법

- 시작전에 몇가지 지우고 간다. 

대상그룹안에 인스턴스를 2개 8080포트

1. 로드 발란서에 리스너 및 규칙 > 80포트 삭제

2. 대상 그룹 > 생성 > TestGroup2 > 포트번호 = 8080 나머지 다 그대로 다음 > 대상그룹 > 인스턴스가 2개인것을 확인할 수 있다. > 둘다 체크 > 둘다 내려 (포함) > 대상그룹생성 > 대상합계가 2개가 된것을 확인 > 로드밸런싱/로드밸런서 > 

리스너 및 규칙 > 대상그룹 선택 >  TestGroup2로 설정 > 추가 > 80포트로 테스트그룹2가 되어있다.

> 리소스 맵 신규 - 서버가 2개로 나눠진것을 알 수 있다. 대상그룹은 매핑그룹이라고 생각하면 좋다.

> 지금 현재 두개의 인스턴스 경로 / - 하지만 내용이 다르다. 

>> DNS주소를 새로고침하면 왔다갔다한다 , 컨트롤 누르고 하는것과 아닌것은 차이가 난다.

>>> 로드발란서 - 리스너 : HTTP 80 규칙 들어가면 -> 기본값밖에 없다.> 규칙추가 > 이름 : API1 > 조건 추가  > 조건을 선택하세요 > 경로 -> /api/* > 확인 > 다음 > 대상그룹 > TestGroup1 선택 > 다음 > API1 우선 순위 : 1  > 생성 > 로드발란서가 이규칙을 적용하기 까지 시간이 조금 걸린다. > 로드발란서 리소스 맵 확인

>>>> 규칙 하나 더 추가

>>>>> 조건 : 경로 : /api2/* > 확인 > 대상그룹 추가 > TestGroupAPI2 > 80포트 내린다. > 그다음 리스너 가서 새로고침 > TestGroupAPI2 선택 > 우선순위 1

- 정리 

api/ 로 호출 하면 1번

api2/로 호출하면 2번

- chatgpt에 물어봐야 할 것

> EC2에서 세션이 종료되고 프로그램이 계속 실행되게하는방법

>> nohup을 사용하면 세션이 살아 있다.

nohub java -jar your-spring-boot-app.jar & 

 

'AWS' 카테고리의 다른 글

[5] AWS  (0) 2024.11.29
[4] AWS  (1) 2024.11.28
[3] AWS  (1) 2024.11.27
[1] AWS  (0) 2024.11.25