지난 해커톤에서 구축했던 서버 환경을 다시 한번 세팅보는 것을 목표로 한다.
최종적인 소프트웨어 아키텍처는 다음과 같다.
EC2는 AWS에서 제공하는 클라우드 컴퓨팅 서비스로, 아마존이 사용자들에게 독립된 컴퓨터를 임대해주는 서비스이다.
- EC2를 사용해 가상 서버를 구축하고, 보안 및 네트워킹을 구성해서 빠르게 애플리케이션을 배포할 수 있다.
- 인스턴스 유형, OS, 소프트웨어 패키지 등을 선택할 수 있고, memory/cpu/storage/booting partition size 등을 선택할 수 있는 유연한 클라우드 호스팅 서비스이다.
AWS 홈페이지에 접속해 로그인한다.
콘솔창 우상단 reion을 서울로 설정한다.
region에 따라 인스턴스 위치가 결정되어 외국으로 하면 속도가 낮을 수 있다.
상단 검색창에 'ec2'를 입력해서 이동한다. 즐겨찾기를 해두면 사진과 같이 메인 대쉬보드 상단에 고정되어 있어서 이동이 편하다.
ec2 메뉴로 접속하면 대쉬보드가 출력된다. 현재는 생성된 인스턴스가 없기 떄문에 실행중인 인스턴스가 0개임을 확인할 수 있다.
좌측 메뉴에 인스턴스를 클릭해 새로운 인스턴스를 생성할 수 있다.
인스턴스 시작 버튼을 클릭한다.
이름은 비워놓아도 상관없다.
AMI (Amazon Machine Image)는 인스턴스를 시작하는데 필요한 정보를 제공하는 이미지로, 서버 구성을 무엇으로 할지 선택하는 것이라 생각하면 된다. 한 AMI로 여러 인스턴스를 생성할 수 있다.
필자는 프리티어를 사용할 것이기 때문에 Ubuntu LTS
버전을 선택했다.
인스턴스 유형도 프리 티어이기 때문에 t2.micro
를 선택했다.
키 페어는 EC2 서버에 ssh 접속을 하기 위해 생성해야 한다.
새 키 페어 생성
을 클릭해 원하는 이름을 입력해 생성한다.
생성하면 자동으로 my-tamla-key.pem
파일이 다운로드 되고, ssh 환경에 접속하기 위해서는 해당 키 파일이 존재하는 위치로 가서 ssh
명령어를 실행하면 된다.
한번 다운로드 받은 후에는 재다운받을 수 없기 때문에 안전한 곳에 저장해둔다.
네트워크 설정은 EC2에 접속을 허용하는 ACL을 생각하면 된다. 생성 이후에 보안 그룹
을 별도로 설정할 것이기 때문에 내 IP에서만 ssh 트래픽 접속이 가능하도록 설정해준다.
프리티어는 최대 30까지만 지원하기 때문에 스토리지 부분도 변경해준다. 볼륨 유형은 범용 SSD로 선택해야 한다.
만약 Provisioned IOPS SSD(프로비저닝된 IOPS SSD)를 선택한다면 사용하지 않아도 활성화한 기간만큼 비용이 발생하게 된다.
다른 세부 설정은 기본 값으로 두고 이상이 없다면 인스턴스 시작을 클릭한다.
인스턴스가 성공적으로 생성된 것을 확인할 수 있다.
이제 탄력적 IP를 설정하고 보안 그룹을 추가해보자.
EC2 인스턴스를 생성할 때는 항상 새로운 IP를 할당한다. 인스턴스를 중지하고 재시작하는 경우에도 새로운 IP가
탄력적 IP
란 외부에서 인스턴스에 접근 가능한 고정 IP이다. 고정적인 IP를 가질 수 있도록 탄력적 IP 주소를 할당해주어야 한다.
탄력적 IP를 만들고 EC2에 연결하지 않으면 과금이 되기 때문에 주의해야 한다. 필요한 만큼만 생성하는 것이 중요하다.
좌측 메뉴 스크롤을 내리다보면 네트워크 및 보안 > 탄력적 IP를 찾을 수 있다.
아무것도 할당받은게 없기 때문에 새로운 IP 주소를 추가해보자.
변경사항은 딱히 없으니 바로 할당 버튼을 클릭한다.
방금 생성한 탄력적 IP를 선택한 후 작업 > 탄력적 IP 주소 연결을 누른다.
현재 내 인스턴스 목록을 선택할 수 있고 연결된 프라이빗 IP까지 선택 가능하다.
연결 버튼을 클릭한 후, 인스턴스 정보를 확인하면 퍼블릭 IPv4 주소
와 탄력적 IP 주소
의 값이 동일하다는 것을 확인할 수 있다.
ssh 접속 방법은 친절하게 안내되어 있다. 순서대로 시도해보자.
터미널을 실행해 다운받은 키 페어 파일 위치로 이동한다.
$ chmod 400 키페어이름.pem
키 파일의 권한을 변경한다.
퍼블릭 DNS 또는 퍼블릭 IP를 사용해서 인스턴스에 접속할 수 있다.
ssh -i "키페어이름.pem" ubuntu@<퍼블릭DNS>
or
ssh -i "키페어이름.pem" ubuntu@<퍼블릭IP>
$ cp 키페어이름.pem ~/.ssh/
$ cd ~/.ssh
$ chmod 600 키페어이름.pem
$ vi ~/.ssh/config
이미 파일이 존재한다면 맨 아래에 입력하면 된다.
User는 ubuntu를 선택했다면 ubuntu
이고 그 외는 ec2-user
이다.
Host {원하는 호스트 이름}
User {유저 이름}
HostName {탄력적 IP}
IdentityFile {키 페어 파일 위치}
설정한 host 이름으로 간단하게 접속할 수 있다.
ssh mytamla
보안 그룹은 AWS에서 제공하는 방화벽 기능이다. RDS 처럼 외부에서 함부로 접근하면 안되는 인스턴스는 허용된 IP에서만 접근하도록 설정이 필요하다.
- 인바운드 : 외부에서 EC2 인스턴스 내부로의 접근을 허용
- 아웃바운드 : EC2 인스턴스 내부에서 외부로의 접근을 허용
인스턴스 요약 하단에 보안 탭에서 확인 가능하다.
현재의 보안 그룹은 인스턴스 생성 시 자동으로 할당되는default 보안그룹이다.
22번 포트의 내 IP에 대해서 TCP 연결을 허용하도록 설정되어 있다. 새로운 보안 그룹을 만들어보자.
좌측 메뉴 중 탄력적 IP 상단에 보안 그룹 메뉴가 있다.
default로 생성된 보안 그룹은 launch-wizard-1
이다. 보안 그룹은 인스턴스와 별개로 존재하기 때문에 한번 만들어두면 새로운 인스턴스에도 적용할 수 있다.
보안 그룹 생성 버튼으로 새로운 보안 그룹을 만들어보자.
보안 그룹의 이름과 설명을 추가한다.
인바운드 규칙은 외부에서 EC2로 요청할 때 허용할 IP 대역을 설정하는 것이다.
로컬 PC에서 서버에 접속할 수 있게 SSH를 추가하고 소스를 내 IP로 추가한다. 소스를 선택하면 자동으로 IP가 추가되고, 특정 IP를 넣으려면 사용자 지정으로 추가할 수 있다.
여러 사람이 함께 작업하는 프로젝트라면 각각의 로컬 PC IP를 전부 추가해주어야 한다.
ssh, http, https와 같은 기본 프로토콜들과 스프링 부트 프로젝트까지 사용자 지정으로 추가해준다.
아웃바운드 규칙은 따로 설정할 필요가 없어서 그대로 둔다.
이후 보안 그룹 생성 버튼을 눌러주어 작업을 완료한다.
인스턴스 요약 창으로 돌아와 우측 상단 작업 > 보안 그룹 변경 버튼을 눌러준다.
보안 그룹은 여러 개를 동시에 설정할 수 있다. 기존에 설정되었던 launch-wizard-1
을 제거한 후 새로 생성한 보안 그룹을 추가한다.
보안 그룹이 적용된 것을 확인할 수 있다.
참고
https://bcp0109.tistory.com/356
https://velog.io/@kyj311/AWS-EC2-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0