AWS EC2 instance 만들기
AWS의 서비스 중에서 EC2가 가장 널리 쓰이는 서비스입니다.
EC2는 인터넷에 연결된 가상 서버를 제공해줍니다.
AWS는 처음 시작하는 사용자에게 1년동안 한달 750시간 사용을 제공하는 t2.micro 의 인스턴스를 줍니다.
무료로 맛보고 시작하고 적극적으로 활용하는 것이 좋습니다.
EC2를 사용해야하는 이유는 1. 효율성 2. 비용절감 을 이룰 수 있어서 입니다.
1. 효율성은 어디 안가고 가상으로 인터넷을 통해서 관리할 수 있어서 효율적이고,
2. 비용절감은 사용한 만큼만 돈을 내기 때문입니다.
EC2는 가상서버이기 때문에 원격연결을 하는 Putty와 같은 툴을 이용해서 서버로 직접 접속할 수 있습니다.
EC2의 기본 동작 원리
- Start : EC2 인스턴스를 시작, 운영체제가 부팅됨, 이때부터 사용으로 간주되어 1분을 사용해도 1시간 사용량으로 측정시작.
- Stop : EC2 인스턴스를 정지, 운영체제를 종료, 요금이 과금되어지지않는다.
- Terminate : EC2 인스턴스를 삭제, 삭제되는 시간이 소요되며 일정 시간이 소요되면 사라진다.
- Reboot : EC2 인스턴스를 재부팅, 운영체제가 신속하게 재부팅, Start보다는 빠른 속도
- Root 장치 : 운영체제가 설치되는 스토리지로써 Root 장치로 처음에 EBS와 인스턴스 스토리지를 사용할 수 있다.
* EBS는 비휘발성 스토리지라고 생각하면되고, 인스턴스 스토리지는 휘발성 스토리지라고 생각하면 된다. 기준은 운영체제가 다시 켜질 시
- Kernel ID : EC2 인스턴스가 사용하는 Linux 커널입니다. 다양한 커널 선택가능
운영체제에 따른 가상화 형태
- Window는 OS 커널을 수정할 수 없기에, 하드웨어 가상화(HVM) 또는 전가상화(Full Virtualization)가 가능합니다.
- Linux는 OS 커널을 수정할 수 있기에, 반가상화(Paravirtualization)로 실행됩니다. 때에 따라서 전가상화 가능.
SLA(Service Level Agreement)
AWS에서 제공하는 서비스마다 가동시간을 보증해줍니다.
그 보증시간에 대한 확률를 퍼센트로 나타내는 것은 SLA라고 합니다.
EC2의 경우에는 월 99.95%입니다. 즉, 한달 720 시간 중 0.05%인 0.36시간이 장애가 발생할 수도 있다라는 것입니다.
가동시간을 충족하지 못하는 경우에는 요금결제용 포인트인 크레딧을 받을 수 있습니다.
참고 : http://aws.amazon.com/ko/ec2/sla
4.1 EC2 인스턴스 유형
: EC2에서 생성한 가상 서버를 인스턴스라고 부릅니다. 인스턴스는 사용목적에 맞춰서 다양하게 선택해서 구현할 수 있습니다.
일단 예를 들면,
m3.medium은 m이 인스턴스 패밀리를 나타내고, 3은 세대(Generation)를 뜻하는 숫자입니다. "."의 뒤는 인스턴스의 사양을 뜻하는 단어입니다.
인스턴스 패밀리
- 범용 : M1, M3로 시작하는 인스턴스. vCPU, 메모리, 네트워크, 저장공간 모두 평균적인 사양으로 제공.
- 컴퓨터 최적화 : C로 시작하는 인스턴스. 다른 인스턴스에 비해 vCPU의 비율이 높다. CPU가 많이 필요한 컴퓨팅 기능에 최적화
- GPU 인스턴스 : G로 시작하는 인스턴스. 고성능의 NVDIA GPU가 장착 CUDA, OpenCL 등을 실행할 때 사용.
- 메모리 최적화 : M2, CR1로 시작하는 인스턴스. 다른 인스턴스들에 비해서 메모리 용량이 더 높습니다.
- 스토리지 최적화 : H, I로 시작하는 인스턴스. 다른 인스턴스보다 스토리지 용량이나 초고속 I/O를 제공합니다.
- 마이크로 인스턴스 : 처음에 주는 t2.micro와 같은 낮지만 적당히 테스트는 해볼 수 있을 만한 서버를 프리티어로 공짜 제공합니다.
* vCPU : EC2는 가상 서버이므로 가상화 소프트웨어를 통해서 제공되는 CPU라고 해서 앞에 virtual의 "v"를 붙여서 vCPU라고 부릅니다.
참고 : http://aws.amazon.com/ko/ec2/instance-types/
4.2 EC2 인스턴스 구매 옵션
: 바로 위에 EC2 인스턴스 유형처럼 여러가지 사양으로 나누어져 있는 것 처럼 구매하는 인스턴스의 구매옵션 또한 선택이 가능합니다.
인스턴스는 구매 및 과금 방식에 따라 크게 3가지로 구분이 됩니다.
1) On Demand Instance :
- 필요할 때 바로 생성해서 사용하는 방식.
- 과금은 1시간 단위로 측정. 사용시작시 1분을 사용해서 1시간 단위로 측정.
- 3가지 방식 중 가장 비쌈.
- 공유 인스턴스(Shared tenancy) : 물리적 서버 1 -> EC2 인스턴스 N 를 실행. 한 인스턴스가 많은 자원을 사용한다면 다른 인스턴스에 영향을 미칠 수도 있습니다.
- 전용 인스턴스(Dedicated tenancy) : 물리적 서버 1 -> EC2 인스턴스 1 를 실행. 서로 물리적인 관계가 없기때문에 인스턴스를 많이 만들어도 다른 인스턴스에 영향을 미치지 않음. 단, 공유 인스턴스보다 비용이 비쌉니다.
2) Spot Instance :
- 경매 방식의 인스턴스. 원하는 인스턴스의 스펙을 설정하고 원하는 가격을 입력하여 입찰을 통해 높은 가격을 부른 사람에게 할당.
- 사용 가능한 상황은 클러스터링으로 이루어지는 분석작업, 이미지 변환, 비디오 렌더링, 웹 크롤링, 각종 테스트, 기타 불시에 종료되어도 상관이 없는 업무.
3) Reserved Instance :
- 일정한 예약금을 내고 선불로 1) On Demand Instance를 사용 계약을 해서 할인을 받는 구조입니다.
- 1년 또는 3년을 예약할 수 있습니다. 요금이 대폭 할인이 됩니다. 마찬가지로 On Demand Instance처럼 공유, 전용 인스턴스로 나뉘게 됩니다.
- 예약 인스턴스에 경우에는 총 3가지의 인스턴스로 나뉩니다.
- 3가지를 비교하는 방법은 얼마나 서버를 변화하지 않고 사용하고 있는 가로 구분할 수 있습니다. 가볍게 변동이 많은 경우 Light, 중간은 Medium, 변화가 거의 없이 계속 서버를 사용하는 경우는 Heavy 가 됩니다.
- 예약인스턴스는 선결제 요금 + 시간당 사용 요금 으로 과금합니다.
- Light 사용률 예약 인스턴스 : 모든 예약 인스턴스 중 선결제 금액 가정 저렴, 대신 시간당 요금이 가장 비싼 가격으로 과금되기 때문에 오래 프로젝트를 진행해서 사용하는 서버이지만 24시간 사용하지 않고 띄엄띄엄 원하는 시간에 사용하는 용으로 합니다.
- Medium 사용률 예약 인스턴스 : Light보다 선결제 금액은 비싸지만 시간당 요금이 Light보다 저렴합니다. 24시간은 켜놓지는 않지만 그래도 어느 특정시간대를 빼고는 거의 사용하는 경우에 이 인스턴스를 사용합니다.
- Heavy 사용률 예약 인스턴스 : 선결제 금액이 가장 비쌉니다. 단 시간당 요금이 제일 저렴해서 24시간 계속 사용하는 서비스를 하기에 적합니다.
업무의 형태나 상황에 맞게 인스턴스 구매 방식을 선택하면 비용을 효과적으로 줄일 수 있습니다.
참고 : http://aws.amazon.com/ko/ec2/pricing/
전 포스팅에서 보았던 AWS 계정 생성을 통해서 계정을 생성하였으니, 이번엔 EC2 instance를 만들어보겠습니다.
여기에서 일단 region을 선택합니다. 이 region은 서비스를 제공할 서버를 위치시키는 곳을 말하는데 저는 이번에 생긴 서비스 지역 Asia Pacific (Seoul)에 한번 선택해보려고 합니다.
이 region이라는 것은 나중에 규모를 증가시키는 스케일 업을 할때 그 해당하는 서비스가 없는 경우도 있으니 원하시는 region을 선택하셨으면 그 지역에 제공하는 instance type을 고려해서 지역도 선택하셔야합니다.
비용에 대해서는 사이트를 참고하세요. http://aws.amazon.com/ko/ec2/pricing/
이렇게 보여지는 부분에서 리전을 바꾸시면서 비용과 instance를 살펴 보시면 됩니다.
나중에 트래픽이 많거나 더 고성능의 instance가 필요하신 경우 그때 고려하셔서 AWS에서 변경만 하시면 비용발생과 동시에 손쉽게 변경하실 수 있습니다.
다음과 같이 EC2를 클릭하시고 EC2를 화살표 방향쪽에 등록시킬 수 있습니다. 등록 시키려면 옆에 있는 edit를 눌러서 Drag&Drop으로 손쉽게 등록시킬 수 있습니다. 자주 사용하는 기능을 등록 시켜 놓으면 손쉽게 이용할 수 있습니다.
그리고 EC2에 한번 접속해보도록 하겠습니다.
EC2를 클릭하시면 다음과 같은 EC2 DashBoard가 나옵니다.
instance를 누르시고 들어갑니다.
마찬가지로 Launch Instance를 누르고 들어가시면 됩니다.
들어가시면 다음과 같은 화면이 나옵니다.
Step 1 : Choose an Amazon Machine Image (AMI) 가 제일 위에 보입니다.
이 뜻은 EC2 가상 서버에 설치될 운영체제를 선택을 하라는 것인데 여기서 AMI(Amazon Machine Images)는 AWS에서 빠르게 서버를 구축할 수있게 서버용 OS를 미리 설치 준비해 놓은 운영체제 이미지라고 보시면 됩니다.
저같은 경우에는 우분투가 현재 가장 서버 개발시 많이 사용하고 있고 인터넷에도 자료도 많기 때문에 개발에 용이한 Ubuntu Server 14.04 LTS (HVM), SSD Volume Type을 선택하였습니다.
설명을 보면 알겠지만, EBS를 사용하는 타입입니다. 마이크로 인스턴스(Free tier: 1년 무료 1개 instance)를 선택할 것이기 때문에 반드시 EBS를 루트로 사용하는 AMI를 선택해야 합니다.)
옆에 보시면 가상화 타입이 명시되어있습니다. 가상화 타입은 두가지로 HVM과 Paravirtualization이 있는데
1) HVM은 안정성은 높고 성능은 비교적 조금 낮아집니다.
2) Paravirtualization는 안정성이 비교적 떨어지는 대신 성능이 높아집니다.
이 두가지 타입은 마음대로 선택 할 수 있는 것은 아니고, 이 방식을 선택함에 따라 선택할 수 있는 인스턴스 타입이 달라 집니다.
우리가 나중에 임의로 OS를 설치해서 사용할 수 없기 때문에 반드시 선택을 하셔서 인스턴스로 사용 하셔야합니다.
여기에는 단순히 OS만 설치되어 있는 것이 아니고 서버에 필요한 각종 응용프로그램, DB, 방화벽등 네트워크 구축에 필요한 솔루션들이 설치 될 수 있습니다.
그리고 AWS에서 제공하는 기능을 사용할 수 있게 여러 프로그램들을 설치하실 수 있습니다.
* 여기서 AMI란?
AMI(Amazon Machine Images)는 인스턴스로 시작하기 위해서 아마존 웹서비스에서 미리 만들어 놓은 OS Image입니다.
AMI를 이용해서 좋은 것은 원하는 기능으로 서버를 구현하기 위해서 설치한 프로그램과 환경설정을 그대로 가지고 Auto Scaling이 가능을 가능하게 해줍니다. 백업파일과 같은 기능을 가능하게 함으로써 확장이나 이동이 신속하게 했다고 보시면 될 것입니다.
크게 네가지의 장점을 가집니다.
1) EC2 instance를 기존의 instance 그대로 새로 만들어야하는 경우
2) Auto Scaling을 통해서 자동적으로 성능과 퍼포먼스를 증대시키는 경우
3) EC2 instance를 다른 region(리전)으로 Migration해야하는 경우
4) 내가 만든 AMI를 상업용으로 팔거나 사용하기 위하는 경우
빨간색으로 표시되었지만 꼭 Free tier eligible로 사용하셔야 합니다. 그리고 Next: Configure Instance Details를 눌러주도록 합니다.
Step 3 이 단계는 instance 사용에 있어서 세부적인 설정을 하는 단계입니다.
EC2 인스턴스 세부 설정입니다.
- Number of Instances: 생성할 인스턴스 개수. 기본값 사용
- Purchasing option: 스팟 인스턴스로 구매 옵션. 체크 안하는 것이 기본 값
- Network: VPC 네트워크를 선택하는 옵션. 기본값 사용
- Subnet: 가용 영역(Availability Zone)을 선택하는 옵션. 기본값 사용
- Public IP: 공인 IP를 할당하는 옵션. 기본값 사용
- IAM role: IAM 역할 설정. 기본값 사용
- Shutdown Behavior: EC2 인스턴스안에 설치된 운영체제를 종료했을 때 행동. Stop은 종료만 하고 Terminate는 종료 후 인스턴스를 삭제. 기본값 사용
- Enable Termination protection: 실수로 삭제하는 것을 방지하는 옵션.기본값 사용
- Monitoring: CloudWatch 세부 모니터링 사용 옵션 기본값 사용
- Tenancy: 가상 서버 실행 방식을 설정하는 옵션. 공유 인스턴스(Shared tenancy), 전용 인스턴스(Dedicated tenancy) 두가지 중 선택할 수 있다. 기본값 사용
이 모든게 지금 만들고 있는 Free Tier instance 1개에 대해서는 무료입니다.
일반 Shutdown behavior 만 원하는 것으로 선택하고, 나머지는 디폴트로 놔두겠습니다.
나머지는 현재 딱히 결정할 만한 옵션들이 없기 때문에 Default로 두고 그냥 전부 next: add Storage 하시면 됩니다. 추후에 다 변경 가능한 옵션들이기 때문입니다.
이 단계는 instance의 storage의 설정을 하는 것입니다.
Root 장치는 Storage가 반드시 있어야 합니다. 이번 설정에서는 default 값 그대로 사용하겠습니다.
- Type: Root 장치(Device)인지 추가 장치인지 설정하는 옵션으로 기본적으로 Root 장치는 EBS만 사용할 수 있고, 추가 장치부터 EBS와 인스턴스 스토리지(Instance Store)사용을 선택할 수 있습니다.
- Device: OS에서 보여지는 장치 이름
- Snapshot: 스냅샷 ID
- Size: 스토리지의 크기로 기가바이트(GiB) 단위입니다.(default를 냅두겠습니다.)
- Volume Type: 스토리지 볼륨 유형입니다. Magnetic, General Purpose (SSD), Provisioned IOPS (SSD)를 선택이 가능합니다.. 기본값 그대로 사용합니다.
- Magnetic: 하드디스크 사용 스토리지입니다(평균 약 100 IOPS).
- General Purpose: SSD를 사용하고, 1GiB당 3 IOPS를 제공하는 스토리지입니다. Magnetic보다 추가 요금이 발생합니다.
- Provisioned IOPS: SSD를 사용하고, I/O 대역폭을 설정할 수 있습니다. Magnetic보다 비쌉니다.
- IOPS: Volume Type을 Provisioned IOPS로 선택했을 때 IOPS 값을 설정할 수 있습니다.
- Delete on Termination: EC2 인스턴스가 실행되고 있을 때, 스토리지가 엉뚱하게 삭제되는 것을 방지. 기본값으로 사용합니다.
instance storage는 instance가 storage를 사용하여 저장을 사용하는 경우에만 선택이 가능합니다.
제가 선택한 AMI는 Ubuntu Server 14.04 LTS (HVM), SSD Volume Type 이기때문에 EBS를 사용합니다. 그래서 Storage를 선택할 수 있습니다.
* EBS의 General Purpose 볼륨은 1GiB당 3 IOPS을 제공합니다. 예를 들어 500GiB이면 1,500IOPS를 제공하고 3600초동안 3000IOPS까지 성능을 높아지게 하는 Burst 기능을 제공하기도 합니다. Burst시간동안에는 미리 충전해놓았던 IO크레딧을 사용해야합니다.
일반적으로 instance storage( m1.small 부터 사용할 수 있습니다. EC2 요금표를 보면 2 x 80 SSD, 2 x 320 SSD 등 EC2 인스턴스 유형별로 사용할 수 있게끔 표시되어 있습니다.)는 전원이 끊기게 되면 데이터도 함께 날아가는 임시저장의 성격을 가지고 있습니다.
하지만 그러한 데이터 손실을 막기 위해서 사용하는 것이 EBS입니다.
EBS는 instance를 종료해도 데이터가 날아가지 않고 영구적으로 남아있게 하는 역할을 합니다. EBS의 종류는 여러가지이고 default로 SSD로 Free Tier 치고는 빠른 속도를 냅니다.
실제로 서비스를 돌리고 있는 간단한 어플리케이션이 있는데 텍스트를 처리하는 부분에서는 무리없이 빠른 성능을 보여줍니다. 다만 이미지를 처리하는 부분을 Free Tier로 사용을 하니까 엄청 버벅 거리네요.
확실히 속도면으로는 Instance Storage > EBS
데이터 저장 장점으로는 Instance Storage < EBS 입니다. 잘고려해서 사용하는 것이 중요합니다. 물론 돈 주고 저장하면서 사용하는 것이 중요하죠.
instance에 tag를 달아서 구분에 사용합니다. 그냥 사용시에 어떤 서버였다는 명찰을 달아 놓는다고 생각하시면 됩니다. value에 구분할 만한 내용을 넣습니다.
안써도 무방합니다.
방화벽인 Security Group을 설정하는 것입니다. Create a new security group으로 선택되어 있고 현재 만들고 있는 instance에 예를 들어, 모바일에서 데이터에 대한 서버처리를 부탁하는 request가 들어 왔을때 Port를 선택해서 무작위로 들어오는 요청을 1차적으로 막고 2차적으로 IP를 선별해서 막아 줄 수 있습니다.
현재는 default로 22번 port와 Anywhere이라는 0.0.0.0/0 라고 되어있는데 Add Rule을 이용해서 바꿀 수 있습니다. 접속을 허용하는 ip만 선택할 수도 있고 현재 처럼 아무나 요청할 수 있게 0.0.0.0/0으로 할 수도 있습니다.
이상으로 Review and Launch를 누르면 이제 설정한 것들이 정리된 화면을 볼 수 있습니다.
마지막으로 그동안 선택했던 옵션을 간략하게 보고 Launch를 눌러서 instance를 생성합니다.
게속 instance를 생성할 거냐고 절차가 묻는데 이제는 진짜 마지막 물음입니다.
마지막으로 Create a new key pair를 선택하고
Key pair name 에 원하는 key의 이름을 넣고
Download Key Pair을 해서 pem 키를 생성합니다.
* 여기서 pem key는 instance를 접속할 때 이 키로 생성한 private key 아니면 절대 접속하지 못하니까 정말 중요한 키입니다. 이 키가 없으면 instance에 대한 접근할 수 있는 권한이 없어 집니다. 정말 중요합니다.
그리고 마지막으로 Launch Instances를 선택하면 이제 정말 생성이 된 모습을 보실 수 있게 됩니다.
최종적으로 instance를 생성완료 하였습니다.
* Reference
1. 아마존 웹 서비스를 다루는 기술 - 이재홍 - 이분의 책은 AWS의 바이블이라고 생각됩니다. 구매해서 보시는 것 추천.