AWS EC2를 이용해 배포해보자 (1) - 인스턴스 생성 및 연결하기

Suntory·2022년 4월 10일
15

AWS로 배포하기

목록 보기
1/6

그룹 프로젝트를 위해 배포가 필수적인 과정이 되어버렸다.
금요일에 배포할 예정이었지만 기능 개발에 우선순위가 밀려버렸다.
할 때마다 낯선 배포라 나는 주로 이동욱님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스를 맨날 참고하곤 하는데, 책이 나온지 좀 돼서 다른 것들도 있고 배포하면서 바뀌는 것들이 있어 나중에 참고할 목적으로 블로그를 작성해보기로 했다.

1. AWS EC2 만들기

EC2를 만드는 과정은 꽤나 간단하다. AWS의 UI가 워낙 잘돼있어, EC2에 들어가서 시작만 하면 된다.
AWS에서 EC2로 검색하면 다음과 같은 화면이 나온다.

여기서 인스턴스 시작을 누른다. 여기서 인스턴스란, 우리가 사용할 서버 컴퓨터를 뜻한다.

시작을 누르면 위와 같이 단계별로 설정하는 창이 나온다. 먼저 서버 컴퓨터의 운영체제를 정할 수 있는데, 보통은 프리티어 사용자일 것이다. 프리티어에서 사용 가능한 운영체제 중 가장 익숙한 우분투를 선택한다. 이 글은 이동욱님의 책을 따라서 Amazon Linux를 골랐다가 안되는 것이 많아... 귀찮아서 다시 우분투로 바꾸는 과정에서 쓰는 글이다.

다음으로는 컴퓨터의 사양을 결정하는 단계이다. 프리티어 유저에겐 선택권이 없다.

다음으로는 인스턴스 세부 정보이다. 특별하게 필요한 설정이 없다면 그대로 넘어간다.

다음은 컴퓨터의 저장공간이다. 기본적으로 8기가가 세팅되어있고 프리티어의 경우에는 30기가 까지 설정이 가능하다. 우리의 프로젝트는 작고 소중하므로 8기가로도 충분할 것 같다.

다음은 태그이다. 말 그대로 태그이다. 서버실에 있는 무수한 컴퓨터들에 라벨을 붙이는 거랑 비슷하다고 한다. 편의를 위해 그냥 우리 프로젝트를 구별할 수 있는 적당한 태그를 하나 붙여준다.

다음은 보안 그룹이다. 서버로 들어오는 네트워크 요청을 필터링할 수 있다. 먼저 서버에 접속하기 위해서는 SSH 연결을 해야 하는데, 22번 포트를 사용한다. 기본적으로 보안그룹에 추가되어있을텐데, 모든 IP(0.0.0.0)에 대해서 열어두기 보다는 현재 작업하고 있는 컴퓨터의 아이피를 설정해준다. 아이피 옆의 사용자 지정을 내 IP로 바꾸면 자동으로 입력해준다.

추가로 우리 서버는 웹 서버로 사용될 것이므로 HTTP/HTTPS 등의 포트를 열어주어야 한다.

마지막으로 검토 및 시작에 가면 요약 정보가 나오고 시작하기를 누르면 아래와 같은 창이 뜬다.

서버에 접속하기 위한 보안 키를 생성하는 과정이다. 만일 ec2를 처음 써보았다면 기존 키 페어가 없을 것이다. 새로운 키 페어를 생성하고, 로컬에 잘 보관해준다. 나중에 서버에 연결할 때 이 키가 꼭 필요하다.

2. AWS EC2에 연결하기

AWS에 연결하는 과정은 글쓴이가 Mac OS 환경이므로 Mac 기준으로 작성하였다. 먼저 터미널을 켜준다.
그리고 아까 다운로드 받았던 키 페어(pem 키 파일) 경로를 찾아둔다.

우리가 서버에 접속하기 위해서는 terminal을 통해 다음과 같은 명령어로 접속한다.

ssh -i {pem키 위치} {EC2의 퍼블릭 IP 주소}

여기서 -i 옵션은 identify_file을 설정하는 옵션이다. 그런데 위와 같은 명령어로 매번 서버에 접속하는 것은 매우 불편하다.
두 가지 이유가 있는데, 첫 번째는 pem키 위치를 기억하고 있어야 한다. terminal 등으로 자주 쓰는 명령어가 기억된다면 상관없을 수도 없지만 불편한 것은 사실이다. 두 번째는 EC2의 IP 주소가 인스턴스를 중지하고 재시작하면 매번 바뀐다는 점이다. 이는 터미널 명령어 기억으로도 해결이 안되고 매번 aws에 접속하여 아이피 주소를 복사하여야 한다.

이를 개선하기 위해서 먼저 서버에 고정 IP를 부여해보자.

Elastic IP 발급

AWS에서는 Elastic IP라는 이름으로 서버에 고정 IP를 부여해주는 기능을 제공한다.
마찬가지로 Elastic IP로 검색하면 기능에 Elastic IP 또는 탄력적 IP가 검색된다.
들어가보면 다음과 같은 화면이 나온다.

여기서 탄력적 IP 주소 할당을 누른다. 그리고 설정을 건드리지 않고 바로 할당을 누른다.

그리고 대시보드에서 작업 - 탄력적 IP 주소 연결을 눌러준다.

위와 같은 화면이 나오고, 우리가 만든 인스턴스에 주소를 연결해준다.

여기서 유의할 점은 탄력 IP 주소는 할당받은 IP를 ec2 인스턴스에 연결하지 않으면 과금이 된다는 점이다. 반드시 만들었으면 인스턴스에 할당해야 하고, 사용하지 않을 때는 IP 주소를 릴리스해주어야 한다.

자, 그럼 아이피도 고정이 되었으니 매번 ssh 명령어를 치기보다는 configuration을 통해 편리하게 접속해보자.
우리가 저장해뒀던 pem키를 아래 명령어를 통해 ./.ssh/ 경로로 옮긴다.

$ mv {pem키 경로} ~/.ssh/

그 다음 ~/.ssh/에 있는 pem키의 권한을 바꿔준다.
현재 사용자에서 읽기만 가능하도록 바꾸는 것이다.

$ chmod 400 {pem키 경로}

마지막으로, config 파일을 작성한다.

$ vi ~/.ssh/config

config 파일에 아래와 같이 설정을 적는다.

Host에 적는 이름이 서비스의 이름이 될 것이다. ssh {서비스명}을 통해 접속할 것이므로 서비스를 구별할 수 있는 적절한 단어를 적는다.

HostName에는 우리 인스턴스의 탄력 IP를, User에는 ubuntu를 적어준다. 이 User이름은 아무것이나 적는 것이 아니라 EC2 인스턴스에 정해진 이름만을 적어야 한다. 처음에 모르고 아무거나 적었다가 계속 Permission Denied가 떴었다.

이 이름을 확인하는 방법은 [EC2 인스턴스 정보 창] - [연결] - [SSH 클라이언트] 에 가면 ssh를 통해서 접속하는 명령어 예시가 나와있는데, 예: 밑에 적혀있는 ssh 명령어의 ubuntu@ip 주소 여기 적혀있는 @앞의 단어가 user이름이다. Amazon linux의 경우 ec2-user이고, ubuntu의 경우는 ubuntu인 듯 하다.

config 파일을 다 작성했으면 저장한다.

그리고 ssh {서비스명}을 해본다. 처음엔 unknown host라서 확인 창이 뜨는데, yes를 입력해주면 서버로 접속이 된다.(서버 Timezone이 UTC인 것이 매우 거슬린다.)

이후부터 Timezone 세팅이나 호스트명 세팅 등을 진행하고 MySQL과 우리가 만든 SpringBoot 프로젝트를 업로드해보겠다.

배포 시 참고용으로 작성된 글입니다. 잘못된 내용이나 보완이 필요한 내용은 언제든지 댓글 부탁드립니다 :)

profile
천천히, 하지만 꾸준히 그리고 열심히

1개의 댓글

comment-user-thumbnail
2023년 1월 11일

포스팅 감사합니다!

답글 달기