본문 바로가기
프로젝트/Recipository

[Dev] 23.03.23. AWS EC2 인스턴스 생성 및 SSH 접속

by 규글 2023. 3. 23.

 개인 공부 용도의 프로젝트인 Recipository의 시작점에는 Spring Boot와 Spring Data JPA를 활용해보겠다는 생각이 우선이었지만, 그에 더하여 AWS를 활용하여 직접 클라우드 서버에 올려보는 것으로 마무리하고자 한 목표도 존재한다. 이력서를 쓰면서, 코딩 테스트를 공부하면서 가장 처음의 계획하기 개발한 것을 살짝 뒤로한 것이 찝찝하다고 생각했다. 그 정체가 바로 AWS를 활용하는 단계까지 뒤로해버렸다는 생각에 도달했다.

 관련 작업들은 이미 수많은 블로그에서 다룬 바 있다. 그들의 블로그를 참조하여 필자도 한 번 그 과정을 정리해보고자 한다. 현 단계는 AWS에 작업한 프로젝트를 build하여 만들어낸 jar file을 활용하는 방법이 있고, 직접 github와 연동하는 방식이 존재하는 것 같다. 그래서 작업할 순서는 다음과 같다.

 

  • 현재까지의 작업을 build하여 jar file을 가지고 AWS에 올린다.
  • 이미지 업로드 관련하여 AWS S3를 활용한 방식으로 프로젝트를 수정한다.
  • 수정한 프로젝트를 push하고, github와 연동하여 AWS에 올린다.

 이번 게시글은 jar file을 build하여 AWS에 올리는 방식으로 진행해보려고 한다. 참고한 블로그를 footnote에 달아두겠다. [각주:1] [각주:2]

 

 

인스턴스 만들기

 AWS management console 페이지[각주:3] 에서 로그인하면 위와 같은 화면을 보게 된다. 필자는 EC2를 검색해본 뒤 캡쳐한 것이라 최근에 방문한 서비스 항목에서 EC2를 볼 수 있었다. 필요한 내용이 있다면 상단의 검색창에 입력하면 된다.

 그리고 우상단의 빨간 박스에 표기된 것은 지역 설정이다. 필자의 경우 처음 시드니라고 되어있었는데, 현재 위치는 서울이기 때문에 변경해주었다.

 

 EC2 서비스를 클릭해서 들어간 첫 화면이다. 좌측의 배너를 보면 인스턴스 항목이 존재한다.

 

 필자는 아직 한 번도 인스턴스를 생성해본 적이 없어서 위와 같은 화면을 보고 있다. 여기에서 '인스턴스 시작'을 눌러준다.

 

 인스턴스 시작 버튼을 눌렀을 때 가장 먼저 볼 수 있는 화면이다. '이름 및 태그' 항목에 원하는 이름을 작성해준다. 이는 앞으로 생성할 인스턴스의 이름을 정해주는 것으로, 비어있어도 된다고 한다.

 

 다음은 '애플리케이션 및 OS 이미지 (Amazon Machine Image)' 항목이다. 현재 필자는 프리 티어 계정으로 과거에도 우분투를 활용해본 적이 있어서 골랐다. 원한다면 다른 것을 골라도 된다.

 

 다음은 '인스턴스 유형'과 '키 페어 (로그인)' 항목이다.

 먼저 인스턴스 유형은 프리 티어 계정일 경우는 선택 사항이 아니라고 한다. 현재 보이는 t2.micro 항목 이외에는 모두 과금 요소라고 하니 보이는 그대로 두고 진행한다.

 다음 키 페어는 우측의 '새 키 페어 생성'을 누른다. 키 페어는 EC2 인스턴스에 원격으로 SSH 접속을 하기 위해 필수로 생성해야 한다.

 

  가장 먼저 키 페어의 이름을 입력해준다. 키 페어의 유형과 프라이빗 키 파일 형식은 현재 상태 그대로 둔 채로 키 페어를 생성하였다. 생성 버튼을 누르면 키 페어의 이름으로 되어 있는 .pem 파일을 다운로드하게 된다. 이때 생성되는 파일은 재다운로드가 불가능하기 때문에 잘 보관해야 한다. SSH 환경에 접속하기 위해서는 해당 key가 존재하는 위치로 가서 ssh 명령어를 실행하면 된다고 한다. 생성한 후에 키 페어를 선택해준다.

 

 다음은 '네트워크 설정' 항목이다. 편집을 누르면 더 다양한 항목을 확인할 수 있다.

 

 대부분의 내용은 그대로 두면 된다고 한다. 만약 편집을 눌렀다면, 중요하게 봐야할 부분은 보안 그룹 규칙이다. 인바운드 보안 그룹 규칙에는 기본적으로 22번 포트가 설정되어 있다. 필자의 프로젝트는 8080 포트를 사용하고, MYSQL의 경우는 3306 포트를 사용하고 있으므로, '사용자 지정 TCP' 유형으로 8080과 'MYSQL/Aurora' 유형으로 3306을 추가해주었다.

 변경이 가능한 항목 중에 소스 유형에는 기본적으로 '위치 무관'이 설정되어 있다. 이미지의 ssh 유형은 EC2 인스턴스를 생성하고, 그 인스턴스에 사용하고 있는 노트북이나 데스크탑으로 접속하기 위해 사용하는 ssh 통신을 말한다. 이 ssh 통신을 할 때의 ip 제한에 대한 것이 바로 소스 유형이다. 만약 고정된 ip로만 접속하는 경우에는 '내 ip'로 설정을 변경해주면 된다.

 네트워크 설정 항목은 나중에 '보안 그룹' 탭에서 변경이 가능하다고 한다. 그래서 일단 필자는 이렇게 설정하고 넘어간다.

 

 마지막 '스토리지 구성' 항목이다. 프리 티어에는 최대 30GB 까지 지원한다고 하니 30GB로 설정해주었따. 그리고 볼륨 유형의 경우는 범용 SSD로 설정해주어야 한다. 만약 '프로비저닝된 blah blah'로 설정한다면 사용하지 않아도 활성화한 기간만큼 추가 비용이 발생하기 때문에, 프리 티어로 사용하는 경우에는 주의한다. 이미지의 gp2는 범용 SSD 이다.

 

 현재까지 설정한 요약 항목이다. 이상한 부분이 없다면 '인스턴스 시작'을 눌러주면 되겠다.

 

 생성을 마치고 인스턴스 탭을 보면 새로 생성된 인스턴스를 확인할 수 있다.

 

 

보안 그룹 생성

 새로운 보안 그룹을 생성하고 싶다면 좌측 '네트워크 및 보안' 탭의 보안 그룹을 눌러 우상단의 '보안 그룹 생성' 버튼을 누르면 된다.

 

 생성한 보안 그룹을 인스턴스의 '작업 > 보안 > 보안 그룹 변경'을 통해 변경해줄 수 있다.

 

 

탄력적 IP 설정

 인스턴스를 생성하고 인스턴스의 정보를 보면 퍼블릭 IP 주소를 확인할 수 있다. 그러나 인스턴스를 중지하고 다시 시작하도록 하면 인스턴스의 ID와 프라이빗 IP 주소는 동일한데, 퍼블릭 IP 주소가 변경되는 것을 확인할 수 있다. 이처럼 퍼블릭 IP 주소는 변경될 가능성이 존재하기 때문에 Client가 사용할 수 있는 변하지 않는 IP가 필요하다.

 인스턴스의 정보에는 '탄력적 IP 주소' 항목 또한 볼 수 있는데, 현재는 비어있는 상태이다. 이 탄력적 IP 주소가 바로 외부에서 인스턴스로 접근할 수 있는 '고정 IP'이다. 하지만 이 친구는 만들어놓고 사용하지 않더라도 과금이 되므로 필요한 만큼 생성하는 것이 좋다고 한다. 따라서 사용하지 않을 것이라면 애초에 발급받지 않으면 되며, 인스턴스를 종료하고 나서도 탄력젹 IP 연결을 해지하고 릴리즈까지 해줘야 과금이 되지 않는다고 한다. 필자는 당장은 이 친구가 필요없다고 판단하고 해당 내용에 대해 작성만 하고 넘어가려고 한다.

 

 

EC2 인스턴스에 SSH 접속하기

 인스턴스 연결을 눌러 'SSH 클라이언트' 탭을 보면 방법이 친절하게 나와있다. 이대로 해보려고 한다.

 

chmod 400 'pem file'

chmod 400 aws-ssh.pem

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

ssh -i "pem file name" ubuntu@'public IP DNS'

ssh -i "aws-ssh.pem" ubuntu@ec2-43-200-172-231.ap-northeast-2.compute.amazonaws.com

 첫 번째 chmod 명령어를 통해 키를 공개적으로 볼 수 없도록 한다. 'chmod'는 'change mode'를 줄인 것으로, mode를 변경한다는 의미다. 명령어 사용법은 footnote[각주:4] [각주:5]를 참조하면 좋겠다. 400은 해당 파일에 대한 읽기만 허용한다는 의미이다.(read only)

 

 우선 다운로드 한 pem file이 있는 곳에서 bash를 열어 명령어를 작성한다. 읽기만 허용하는 경우 따로 특별한 메시지를 보지는 못할 것이다.

 

 ssh 명령어를 사용하고 위와 같은 화면을 확인했다면 올바르게 된 것이다. 중간에  이 key가 다른 이름으로 알려진 적이 없는데, 정말 연결을 계속할 것이냐고 묻는 것에는 yes를 작성해준다. 현재 위치는 /home/ubuntu 이며 아무런 파일이 없는 상태이다.

 

 

Localtime 변경

sudo rm /etc/localtime

sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime

 EC2에 접속하여 'date' 라고 쳐보면 현재 시각과 맞지 않는 것을 알 수 있는데, 위 명령어를 사용하여 기존의 local time 설정을 변경해줄 수 있다.[각주:6]

 

 

Reference

댓글