저번 시간에 우리는 갑자기 늘어나는 트래픽을 감당하기 위해 필요한 시간에만 서버를 다른 곳에서 잠깐 빌리고, 필요하지 않게 되면 다시 반납하기 위해 Cloud Computing
을 사용한다고 했다. 그렇다면 컴퓨팅 서버는 어떻게 빌릴 수 있을까?
바로 AWS EC2
로 빌릴 수 있다! AWS EC2
는 IaaS
의 대표격이라고 볼 수 있다. 작은 서버 컴퓨터를 네트워크를 통해 빌린다고 생각하면 된다. 네트워크와 스토리지가 구성된 서버를 OS만 선택하여 우리가 편하게 사용할 수 있다.
AWS EC2
는 여러가지 종류가 있다. 서버를 사용할 땐 특정한 목적이 있다. 어떤 회사는 컴퓨팅 파워가 중요한 것들을 빌릴 수 있고, 어떤 회사는 인메모리 데이터 베이스를 쓰다보니 램이 큰 인스턴스가 필요할 수도 있고, 뭐 어떤 회사는 스토리지가 커야할 수도 있다. 따라서 여러가지 인스턴스 종류가 필요하고, 사용 용도에 맞는 상황에 맞게 써야할 필요가 있다.
Instance Family
는 같은 용도와 비슷한 성능의 밸런스를 가진 인스턴스 유형들을 묶은 것이다. 인스턴스 세대는 높을 수록 최신, 좋은 성능을 가진다. 인스턴스 패밀리 + 인스턴스 세대는 다음과 같다.
인스턴스 패밀리 + 인스턴스 세대 | 설명 | 사용 사례 |
---|---|---|
T3, T2, M5, M5A, M4 | 범용, 밸런스 잡힌 성능 | 웹 사이트, 애플리케이션 |
C3, C4, C5 | 컴퓨팅 최적화, 높은 CPU 성능 | 배치 처리, 웹 서버, 비디오 인코딩 |
G3, P2, P3 | GPU 최적화, 높은 GPU 성능 | 기계 학습, 3D 작업 |
R5, R4, X1e, X1 | 메모리 최적화, 큰 RAM 용량 | In-Memory DB(예: Spark), 데이터 마이닝 |
I3, I3EN, H1 | 스토리지 최적화, 높은 디스크 처리량(I/O가 많을 때) | 데이터 웨어하우징, 분산처리DB |
인스턴스 크기는 말 그대로 같은 인스턴스 세대에서의 상대적인 크기를 나타낸다.
.
인스턴스 시작을 눌러서 인스턴스를 만들어보자.
나는 프리티어인 Ubuntu Server 20.04 LTS
로 인스턴스를 만들 것이다. 안보일 땐 검색창에 ubuntu
를 검색하면 더 빨리 찾을 수 있다.
Ubuntu Server 20.04 LTS
에서 프리티어를 위해서는 t2.micro
를 사용해야 한다. vCPUs
는 가상 CPU 갯수다.t2.micro
선택 뒤 다음:인스턴스 세부 정보 구성을 클릭한다.
다음으로 인스턴스 세부 정보 구성 페이지로 넘어간다. 각각을 살펴보자.
스팟 인스턴스를 요청하고 인스턴스 시간당 지불하고자 하는 최대 가격을 지정할 수 있습니다.
입찰 가격이 현재 스팟 가격보다 높으면 스팟 인스턴스가 시작되고
현재 스팟 가격으로 요금이 부과됩니다.
대체로 스팟 가격은 온디맨드 가격보다 훨씬 낮은 편이므로,
가변적이고 중단이 허용되는 애플리케이션에 대해 스팟 인스턴스를 사용하면
최대 90%까지 인스턴스 비용을 절감할 수 있습니다.
즉, 사용 중이지 않은 인스턴스를 싼값에 쓰기 위해 내가 낼 수 있는 시간 당 최고 가격을 입력해놓고 최고 가격 이하인 경우에만 그 인스턴스를 사용하는 방법이다. 하지만 현재 가격이 최고 가격을 넘어가면 인스턴스가 꺼지기 때문에 주의해야 한다.
vpc
는 Virtual Private Cloud의 약자로, private한 네트워크를 구성하고 싶을 때 많이 사용한다. 보통 회사에서 사용하고 지금 당장 우리가 사용할 일은 없다. vpc
와 관련된 설정으로 vpc
내의 서브넷을 설정할 수 있다.IAM - Identity and Access Management
을 사용한다. 설정에 따라서 인스턴스에 대한 Access 권한을 설정한다.다 됐다면 다음: 스토리지 추가를 눌러준다.
여기선 원하는 만큼 추가 EBS 볼륨 및 인스턴스 스토어 볼륨을 추가할 수 있다. EBS - Elastic Block Store
는 EC2에서 사용하는 외장하드다. EC2 Instance
는 하나의 가상 컴퓨터를 두는 것이므로, EC2 인스턴스 내에는 하드디스크 역할을 무언가가 있다. 위 사진을 보면 볼륨 유형이 루트인 스토리지가 있는데 이것이 바로 그 HDD라고 생각하면 된다. 작업을 하다보면 외부 볼륨에서 작업을 하고 연결을 해주고 싶을 때가 있을 것이다. 그럴 때 사용하는 것이 EBS
다. 정말 외장하드 같은 느낌이다. 인스턴스가 종료되더라도 EBS
는 남아있다. 임의의 EBS
는 또 다른 인스턴스에 연결될 수 있다. 정말 usb, 외장하드라고 생각하면 된다.
그 다음으로 태그 추가 페이지로 넘어간다.
나중에 인스턴스가 엄~청 많아지면 구분하기가 어려워질 수 있다. 태그를 추가하면 인스턴스를 구분할 수 있다. key-value형태로 넣을 수 있고, python의 dictionary 형태처럼 넣어두면 사용하기 용이하다.
다음은 보안 그룹 구성이다.
예를 들어, 나는 어떤 특정 인스턴스를 테스트 서버로 쓰고 싶어서 회사 사람만 들어올 수 있게 하고 싶다. 그럴 땐 여기서 서브넷 마스크를 씌운다.
위처럼 예로 만들어보자. 좌측 하단 규칙 추가를 누르고, 유형을 본인이 보안을 걸고 싶은 유형으로 선택한다. 데이터베이스를 감추고 싶을 땐 MySQL 등을 선택할 수 있다. 지금은 사용자 지정 TCP라고 한다. 프로토콜은 TCP이고, 포트범위는 80 웹서버 라고 하자. 소스는 사용자 지정으로 특정 IP만 들어오게 하고 싶다면 특정 IP만 추가할 수 있고(예: 123.123.123.123/32
), 같은 네트워크를 쓰고 있는 회사사람만 들어오게 하고 싶다면 123.123.123.0
이런 식으로 마지막을 비워둘 수도 있다. 모든 사람이 들어오게 하고 싶다면 0.0.0.0
으로 할 수 있다.
위와 같이 보안 그룹을 만들고 검토 및 시작을 누른다.
다음으로 검토하는 페이지가 나오는데, 올바르게 했는지 검토하고 넘어가면 된다.
시작하기를 누르면 기존 키 페어 선택 또는 새 키 페어 생성이 나온다.
이 키 페어는 잃어버리면 완전 큰일난다! 키페어는 인스턴스에 접근할 수 있는 열쇠인데, SSH를 통해 인스턴스에 접속하려고 하면, 인스턴스를 만들 때 지정한 키 페어 파일을 가지고 있어야 한다!
새 키페어 생성을 선택하고, 키 페어 이름을 선택한 후, 키 페어 다운로드를 클릭해서 키 페어를 다운로드 받아주면 된다. 이것은 절대로 임의로 삭제해선 안되고, 어디 전달하거나 그럴 때 굉장히 신중하게 행동해야 한다.
그 뒤 인스턴스 시작을 눌러준다.
EC2 메인페이지로 넘어가서 기다려보면 인스턴스가 잘 실행중인 것을 확인할 수 있다. (2~3분 정도 소요된다.)
이제 EC2 인스턴스에 접속해보자! 그 전에 인스턴스에 대해 IP를 할당해줘야 한다. 인스턴스 마다 할당되어 있는 IP가 있지만, 이는 인스턴스를 껐다 켰다 하게 되면 변동될 수 있다. 따라서 고정할 수 있는 IP를 할당할 수 있어야 한다. 고정 IP를 할당하러 가보자!
드디어 접속.. cmd
(Windows) 또는 terminal
(Linux)을 열어서 아까 다운로드 한 키 페어가 있는 폴더 위에서 다음 명령어를 입력해준다.
ssh ubuntu@인스턴스IP -i 키페어명.pem
ssh ec2-user@인스턴스ip -i 키페어명.pem
-i
옵션을 이용해서 pem
파일을 넣어주는 것이다.
yes
해주면 된다.
그럼 이렇게 접속이 된 모습을 확인할 수 있다!😍 command로 exit
을 하면 창을 나갈 수 있다.
서버 혹은 개인 서비스를 올리고, 이러한 인스턴스를 여러개로 만들고 싶을 때는 커스텀 AMI를 생성하면 된다.
AMI
를 클릭하고, 상태가 pending
에서 available
로 넘어가면 준비 완료!단점은.. 이건 돈 들어간다! 조심조심..
Elastic Block Store
에 있는 볼륨 탭으로 들어간다.
볼륨 생성을 눌러서 EBS 볼륨을 생성한다.
(지금 있는 저 볼륨은 실행중인 인스턴스다. 절대 날리면 안된다!)
USB 쓰는 느낌으로 4기가만 한다. 가용 영역이 현재 인스턴스 영역과 일치하는지 꼭 확인하자.
인스턴스가 중지중이라면 인스턴스를 실행시켜준다.
기존에 가지고 있는 인스턴스에 대해 연결을 해주기 위해 오른쪽 클릭을 눌러서 볼륨 연결을 누른다. 적당한 인스턴스를 선택해서 연결한다.
다음 명령어들을 입력해서 EC2 인스턴스에 연결한다.
sudo fdsik /dev/xvdf
sudo mkfs.ext3 /dev/xvdf1
sudo mount -t ext3 /dev/xvdf1 /mnt
마지막 sudo mount -t ext3 /dev/xvdf1 /mnt
는 file system이 /dev/xvdf1
인 형식을 가진 mnt
폴더에 마운트 하겠다는 뜻이다. df -k
를 통해 확인을 해보면 4GB 짜리 mnt
가 생긴 것을 확인할 수 있다.