## [AWS 회원가입](https://securityspecialist.tistory.com/117) ## AWS EC2 인스턴스 생성 ### 0. [AWS EC2 대시보드 접속](https://ap-northeast-2.console.aws.amazon.com/ec2/home?region=ap-northeast-2#Home:) ![[Pasted image 20231211120226.png]] - **인스턴스 시작** 버튼을 클릭한다. ### 1. 이름 및 태그 설정 ![[Pasted image 20231211120428.png]] - 이름을 입력한다. ### 2. Application OS 설정 ![[Pasted image 20231211120537.png]] - 인스턴스에서 사용할 OS를 설정한다. - 나는 그냥 기본값인 **Amazon Linux**를 선택했다. ### 3. 인스턴스 유형 설정 ![[Pasted image 20231211120801.png]] - 자신의 목적에 맞는 인스턴스 유형을 설정한다. - 스프링 부트 애플리케이션을 사용한다면 최소한 메모리 2GB는 확보하는 것이 좋다. - 나는 **t2.small**을 선택했다. ### 4. 키 페어 생성(Optional) ![[Pasted image 20231211122249.png]] - AWS 인스턴스를 원격으로 조종할 때 필요한 키 페어를 생성한다. - **새 키 페어 생성 버튼**을 클릭한다. ![[Pasted image 20231211122502.png]] - PuTTY 같은 SSH 프로그램을 쓰는 경우, SSH 키 페어를 생성해야 한다. 본인이 알아볼 수 있도록 **키 페어 이름**을 입력한다. - 키 파일 형식을 선택한다. - 윈도우의 경우 PuTTY를 많이 쓰기 때문에 `.ppk` 을 고르면 된다. 나는 현재 윈도우를 사용 중이기 때문에 `.ppk`를 골랐다. - 리눅스나 맥의 경우 OpenSSH를 많이 쓰기 때문에 `.pem`을 고르면 된다. ![[Pasted image 20231211122910.png]] - 키 페어 생성 버튼을 누르면 자동으로 파일이 다운로드된다. ### 5. 네트워크 설정 ![[Pasted image 20231211123528.png]] - 인스턴스의 네트워크 설정을 한다. 특별한 이유가 없다면 방화벽 설정 이외의 다른 설정은 기본 설정을 사용한다. - 방화벽 설정의 의미와 설정 방법은 다음과 같다. - **Allow SSH traffic from** SSH는 HTTP와 같은 TCP 기반 프로토콜로 인스턴스에 원격으로 접속하기 위해 쓰인다. 기본 값인 위치 무관 설정은 키 페어만 있으면 어떤 IP든 인스턴스에 접속할 수 있도록 하는 설정으로, 특정 IP에서만 접속을 할 수 있게 하고 싶으면 설정하면 된다. 나는 기본 값으로 설정하였다. - **인터넷에서 HTTPS 트래픽 허용** / **인터넷에서 HTTP 트래픽 허용** HTTPS 와 HTTP 엑세스 허용 여부에 대한 설정이다. 다른 마이크로서비스와 HTTP로 통신하기 위해서는 둘 중 하나는 허용해야 한다. 나는 SSL/TLS 인증서가 없고 ChatGPT 프록시 서버는 일반 사용자 용이 아니라서 HTTP만 허용했다. ### 6. 볼륨(저장소) 설정 ![[Pasted image 20231211144253.png]] - 인스턴스의 볼륨 설정을 한다. 특별한 이유가 없다면 볼륨의 크기만 설정한다. - 볼륨의 크기는 OS, 데이터 저장소, 애플리케이션의 크기 등을 고려해서 결정한다. 나는 24GB로 설정했다. ### 7. 인스턴스 생성 및 확인 ![[Pasted image 20231211145339.png]] - **인스턴스 시작** 버튼을 누른다. ![[Pasted image 20231211145439.png]] ![[Pasted image 20231211145649.png]] - 좌측 네비게이션에서 **인스턴스** > **인스턴스** 를 클릭하면 위와 같은 테이블이 나온다. 인스턴스 상태는 처음에는 '대기 중'이다가 시간이 지나면 아래와 같이 '실행 중'으로 바뀐다. '실행 중'이라고 나오면 정상적으로 인스턴스가 생성된 것이다. ## AWS 인스턴스 환경설정 ### 0. 인바운드 규칙 설정 ![[Pasted image 20231211145905.png]] - 생성된 인스턴스를 클릭한 다음 아래에 있는 보안 탭을 클릭한다. ![[Pasted image 20231211150152.png]] - **보안 세부 정보 > 보안 그룹 > 하이퍼링크**를 클릭한다. ![[Pasted image 20231211150234.png]] - 화면 오른쪽 아래에 있는 **인바운드 규칙 편집**을 클릭한다. - **인바운드 규칙**은 네트워크로 들어오는 트래픽을 허용/차단하는 규칙이다. ![[Pasted image 20231211150716.png]] - **규칙 추가 > 사용자 지정 TCP > 포트 번호(서버 포트 번호) > 설명** 순으로 지정한다. - 나는 스프링 부트 서버용 포트와 MySQL DB 서버용 포트를 설정하였다. - 끝났으면 밑에 있는 노란색 **규칙 저장** 버튼을 클릭한다. ### 1. EC2 인스턴스 연결 이제 인스턴스를 SSH로 원격으로 연결할 것이다. AWS는 웹 상에서 바로 SSH 연결을 할 수 있기 때문에 PuTTY 같은 프로그램을 추가 설치할 필요가 없다. ![[Pasted image 20240722131910.png]] - 생성된 인스턴스를 선택한 다음 위에 있는 Connect 버튼을 클릭한다. ![[Pasted image 20240722132037.png]] - 별 다른 설정 없이 바로 Connect를 클릭하면 된다. ![[Pasted image 20231211153637.png]] - 위와 같은 텍스트가 나오면 정상적으로 접속된 것이다. ![[Pasted image 20231211160639.png]] - 인스턴스 시간 기준을 한국 기준으로 바꿔보자. 아래의 명령을 순서대로 입력하면 된다. `tiemdatectl`의 마지막 `l`은 숫자 `1`이 아니라 소문자 `l` 이다. ``` sudo timedatectl set-timezone Asia/Seoul date ``` ### (Optional) PuTTY를 이용한 연결 ![[Pasted image 20231211151446.png]] - [여기](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html)에서 설치 파일(`.msi`)을 다운로드 받는다. ![[Pasted image 20231211152431.png]] - AWS 대시보드에서 **인스턴스** > **인스턴스**를 클릭한 다음 우리가 생성한 인스턴스의 **퍼블릭 IPv4**를 확인한다. ![[Pasted image 20231211152610.png]] - 설치한 PuTTY를 실행한 다음 **Host Name (or IP address)** 칸에 방금 확인한 **퍼블릭 IPv4**를 입력한다. - 연결 타입은 SSH로 설정한다. ![[Pasted image 20231211152803.png]] - 좌측 카테고리에서 Connection > SSH > Auth 를 클릭한다. - **Private key file for authentication**에서 **Browse** 버튼을 누르고 [[1. AWS EC2 인스턴스 생성과 환경설정#4. 키 페어 생성|여기]]서 발급 받은 `.ppk` 파일을 연결한다. ![[Pasted image 20231211153031.png]] - 다시 세션으로 돌아와 세션 이름을 설정하고 저장한다. 그 후 Open 버튼을 누른다. ![[Pasted image 20231211153254.png]] - 그러면 이런 보안 경고창이 뜬다. **Accept**를 누른다. ![[Pasted image 20231211153451.png]] ![[Pasted image 20231211153637.png]] - 그럼 유저 이름을 묻는 터미널이 나오는데 아마존 리눅스의 기본 값인 `ec2-user`를 입력한다. 아래의 텍스트가 나오면 정상적으로 접속된 것이다. ![[Pasted image 20231211160639.png]] - 인스턴스 시간 기준을 한국 기준으로 바꿔보자. 아래의 명령을 순서대로 입력하면 된다. `tiemdatectl`의 마지막 `l`은 숫자 `1`이 아니라 소문자 `l` 이다. ``` sudo timedatectl set-timezone Asia/Seoul date ```