첫번째 EC2를 만들어보자

글쓴이 상배 윤 날짜

AWS 계정을 만들었으니 EC2 인스턴스를 실행해보자. EC2(Elastic Compute Cloud)는 AWS에서 제공하는 컴퓨팅 서비스다. 흔히 알고 있는 CPU, 메모리, 디스크로 구성된 서버 컴퓨터를 생각하면 된다. 지금은 서버없이 인터넷 서비스를 만들자라는 개념의 서버리스(ServerLess) 컴퓨팅이 주목받고 있어서 좀 시들해진 측면이 있기는 하지만 여전히 AWS에서 가장 중요하며, 가장 많이 사용하는 서비스다.

ECS(Elastic Container Service – 컨테이너 서비스), RDS(RDBMS 서비스), ElastiCache(Redis, Memcached) 등, EC2 위에서 작동하는 AWS 서비스들도 많다.

EC2 인스턴스는 가상서버(Virtual Machine)과 동일하기 때문에, 그냥 AWS 가상서버라고 부르기도 한다.

AWS Management Console

로그인하면 AWS Management Console 페이지로 이동한다. 여기에서 AWS 서비스 목록을 찾거나 자주 사용하는 서비스들을 확인 할 수 있다.

EC2를 만들기 전에 먼저 Seoul 리전에 있는지 확인한다. 언어는 영어로 설정한다. 인터넷에서 얻을 수 있는 AWS 관련 정보들이 모두가 영어라서 한글로 하면 오히려 헷갈린다. 그리고 번역이 미묘하게 다른게 있어서 실 수도 있다.(예. Terminate로 인스턴스를 삭제할 수 있다. 한글 번역은 “종료”라고 되있어서 인스턴스를 끄는 걸로 알고 눌렀다가 삭제해버리는 경우도 있다.)

All Services 에 EC2 가 보인다. EC2를 클릭하자.

  •  Running Instance : 실행 중인 인스턴스
  • Dedicated Hosts : EC2 전용 호스팅이라고 부르기도 한다. EC2 인스턴스를 특정 물리적 서버에 올려서 운영 할 수 있게 한다. 데이터센터를 AWS로 마이그레이션 할 때, 데이터센터에서 사용하던 라이센스를 AWS에 적용 하고 싶을 때 이점이 있다.
  • Volumes : EC2 인스턴스는 운용체제와 애플리케이션, 파일들을 저장할 볼륨(저장공간)이 필요하다. 전체 볼륨의 갯수를 출력한다. AWS는 EC2 인스턴스의 (복제나 백업을 위한)스냅샷 등도 볼륨형태로 저장을 한다. 따라서 보통 인스턴스 개수 보다 더 많은 수의 볼륨이 만들어진다.
  • Key Pairs : SSH로 인스턴스에 접속을 한다. AWS는 SSH Key 저장 기능을 제공한다.
  • Elastic IPs : AWS는 고객에게 인터넷 상에 프라이빗(private) 네트워크를 만들기 위한 VPC 서비스를 제공한다. VPC안에 만들어진 인스턴스는 내부 IP를 쓰기 때문에, 인터넷에서 접근 할 수 없다. 인터넷에서 접근하고 싶다면 EIP(Elastic IP)를 할당 받아서 인스턴스에 붙여(attach)해줘야 한다.
  • Snapshots : 인스턴스는 백업, 복제의 목적으로 현재의 운영 이미지인 스냅샷을 만들 수 있다.
  • 로드밸런서 : 가용성을 확보하기 위해서 인스턴스는 두 대 이상으로 구성된다. 유저 요청이 늘어날 경우 로드밸런서(ELB)를 이용해서 요청을 여러 대의 인스턴스로 분산 할 수 있다.
  • Security Groups : 방화벽(firewall) 정책서다. 리눅스의 iptables를 생각하면 된다. 서비스 목적에 따라 여러 개의 Security Group를 만들어서 사용 할 수 있다.

Choose AMI

Launch Instance를 클릭해서 다음 화면으로 넘어가자.

EC2 인스턴스는 AMI(Amazon Machine Image)로 부터 만들어진다. 운영체제와 AWS 클라우드 애플리케이션이 설치된 이미지다. AWS는 Ubuntu, CentOS, Windows Server와 같은 자주 사용하는 AMI들을 제공하고 있다. 이 중 Amazon Linux 운영체제가 있는데, AWS에서 직접관리하는 운영체제다. AWS 환경에 최적화 되있으니, 특별한 이유가 없다면 Amazon Linux를 선택하자. 현재 Amazon Linux 2 버전까지 나왔다.

유저는 인스턴스 스냅샷으로 부터 자신의 AMI를 만들 수 있다. 이들 AMI는 MyAMIs에 등록된다. 예를 들어 node.js 개발 환경을 세팅했다면 AMI에 등록해서 재 사용 할 수 있다.

AWS Marketplace에는 회사와 사용자들이 만든 AMI들이 올라가 있다. 상용 솔류션이 설치된 AMI 들도 있다. 이런 AMI들은 별도의 사용료를 지불해야 한다. GitLab, WordPress, Drupal, splunk, Tableau 등 온갖 종류의 애플리케이션들을 사용 할 수 있다.

이름에 HVM이 붙은 이미지를 볼 수 있다. Linux AMI는 HVM AMI, PV AMI, HVM 기반 PV 3 가지의 가상화 유형이 있다. 그냥 HVM 유형을 선택하면 된다. 가상화 유형이 궁금하다면 Linux AMI 가상화 유형 문서를 읽어보자.

난 Amazon Linux 2 AMI를 선택했다.

Choose Instance Type

인스턴스 타입을 결정한다. 서버 사양이라고 생각하면 편하다. 좋은 성능의 타입은 (당연히) 더 비싸기 때문에, 목적에 맞는 인스턴스 타입을 선택해야 한다. 선택의 주요 요소는 FamilyType이다.

  1.  Family : 사용 목적에 맞게 인스턴스를 선택 할 수 있다. 범용, 컴퓨팅 최적화, 메모리 최적화, GPU 최적화, 스토리지 최적화 중에 선택 할 수 있다.
  2. Type : 사양이다. micro, small, medium, large, xlarge, 2xlarge, 4xlarge, 12xlarge, 24xlarge 등을 선택 할 수 있다. 24xlarge 정도가 되면 96 core, 384 G memory 사양이다.

나는 t2.micro를 선택했다.

Configure Instance Details

  • Purchasing option : Spot instance로 실행 할 건지 선택한다. Spot instance는 AWS 클라우드 인프라의 남는 자원을 이용해서 사용자에게 인스턴스를 서비스 한다. 아주 저렴한(최대 90%)비용에 인스턴스를 만들 수 있다. 단 남는 자원을 가지고 경쟁을 하기 때문에, 자원이 부족할 경우 비용이 올라갈 수 있다. 사용자가 제시한 금액보다 비용이 올라갈 경우에는 인스턴스가 내려 갈 수 있다.
  • Network : VPC를 선택한다. 지금 계정을 만들었다면 Default-Vpc 하나만 있을 것이다.
  • Subnet : 인스턴스를 배치할 서브넷을 선택한다.
  • Auto-assign Public IP : 인스턴스가 실행되면, 자동으로 Public IP를 할당한다. 이 IP를 이용해서 인스턴스에 접근 할 수 있다. Public IP는 AWS가 “임의로”관리한다. 어떤 IP가 선택될지 알 수 없으며, 바뀔 수 있다. 실 서비스에 이용하려면 고정된 EIP를 할당 받아서 사용해야 한다.
  • IAM role : 인스턴에스 IAM role를 줄 수 있다. 권한이라고 생각하면 된다. 즉 데이터베이스(RDS), S3, SQS와 같은 AWS 자원에 접근 할 수 있는 권한을 인스턴스에 부여 한다.
  • Shutdown behavior : 인스턴스를 shutdown 할 때, stop 만 시킬 건지, 삭제해버릴지를 선택 할 수 있다.
  • Enable termination protection : 사용자가 실수로 인스턴스를 삭제하는 걸 막기 위해서 사용한다.
  • Monitoring : AWS의 자원관리를 위해서 CloudWatch를 제공한다. 기본으로 제공하는 서비스인데, 더 많은 기능을 사용하고 싶다면 체크해야 한다.
  • Tenancy : Shared와 dedicated, dedicated host 중 하나를 선택 할 수 있다.
  • Elastic Inference : 머신러닝 목적으로 인스턴스를 사용 하고 싶다면 선택한다. GPU 최적화 인스턴스가 있기는 한데, 최대 75%이상 저렴하게 GPU를 사용 할 수 있다. 현재 TensorFlow, Apache MXNet, ONNX 모델을 지원하고 있다.
  • T2/T3 Unlimited

이 중 몇개 기능들은 별도의 포스트로 다뤄야 할 정도로 복잡한 것들이 있다. 지금은 EC2 인스턴스를 만드는게 목적이니, 간단하게만 소개하고 넘어간다. 나중에 자세히 다루도록 하겠다.

Add Storage

볼륨을 추가 할 수 있다. AWS는 EBS(Elastic Block Store)라는 블럭 스토리지 서비스를 제공한다. 하드디스크 혹은 SSD 라고 생각하면 된다. 물리적인 디스크와는 다르게 자유롭게 만들고 attach, detach가 가능하다.

인스턴스는 운영체제가 설치될 하나의 EBS가 반드시 필요하다. 이 볼륨을 루트(Root)볼륨 이라고 한다. 추가 적인 볼륨이 필요하다면 Add New Volume 로 새로운 볼륨을 추가하면 된다. EBS는 별도로 만들 수 있으며, 운영 중인 인스턴스에도 attach 할 수 있다.

Add Tags

태그는 자원을 분류하기 위해서 사용한다. 태그를 이용해서 인스턴스의 역할과 위치, 어떤 조직에서, 어떤 목적으로 만들었는지를 식별 할 수 있다. 시스템 관리자에게 매우 중요한 정보다.

Configure Security Group

Security Group은 AWS에서 제공하는 호스트레벨 방화벽(Firewall) 서비스다. AWS 보안에 있어서는 최종 단계에 있는 장치다. Security Group을 이용해서 사용자는 AWS의 자원에 대한 접근을 통제 할 수 있다.

Security Group 유저가 허용하도록 설정한 접근을 제외한 모든 접근을 막는다.

  • Protocol : TCP, UDP, ICMP를 선택 할 수 있다.
  • Port Range : 접근을 허용할 포트번호
  • Source : 접근을 허용할 IP 주소다. CIDR 형식으로 기술 한다.

22 번 포트(ssh)에 접근해서 작업 할 수 있도록 설정 했다.

Revew Instance Launch

실행하기 전에 지금까지의 인스턴스 설정내용을 리뷰해 준다.

Lauch 버튼을 누르면 인스턴스가 만들어질 것 같지만 “훼이크”다. 인스턴스에 연결하기 위한 ssh key pair 설정 화면이 뜬다. 만들어 둔 key가 있으면 선택하고, 없다면 “Create a new key pair”로 새로운 key pair를 다운로드 해서 사용하면 된다. joinc_test 라는 이름의 key를 만들었다면 joinc_test.pem 파일을 다운로드 할 수 있을 것이다. 인스턴스가 만들어진 후 아래와 같이 접속하면 된다.

$ ssh -i joinc_test.pem ec2-user@xxx.xxx.xxx.xxx

Launch Instances 버튼을 누르면 이제 진짜로 인스턴스가 만들어진다.

EC2 인스턴스 접속

EC2 대시보드에서 EC2 인스턴스의 정보를 확인 할 수 있다.

몇 가지 주요 정보들만 확인해 보자.

  • Instance State : 인스턴스는 pending, running, stopping, shutting-down, terminated 등과 같은 수명주기를 가진다. running 이면 실행중임을 의미한다.
  • IPv4 Public IP : 인터넷으로 접근가능한 IP 주소다. Public IP는 고정된 IP가 아니다. 서비스 목적으로 직접 인터넷에 노출시키고 싶다면 EIP를 붙여야 한다.
  • Private IPs : VPC 네트워크에 할당된 사설 IP 주소다.
  • Elastic IPs : EIP를 붙일 경우 여기에 IP 주소가 출력된다. EIP는 변하지 않는다.

인스턴스의 수명 주기는 아래와 같다.

인스턴스 상태설명
pending 인스턴스는 running 상태로 될 준비를 하고 있습니다. 인스턴스가 처음 시작되거나 pending 상태일 때 다시 시작이 되면 stopped 상태가 됩니다.
running 인스턴스를 실행하고 사용할 준비가 되었습니다.
stopping 인스턴스가 중지할 준비를 하고 있습니다.
stopped 인스턴스가 종료되고 사용이 불가합니다. 언제든지 인스턴스를 다시 시작할 수 있습니다.
shutting-down 인스턴스가 종료할 준비를 하고 있습니다.
terminated 인스턴스를 영구적으로 삭제하며 재시작할 수 없습니다.

참고

Dedicated Host

  • VM Import를 사용해서 윈도우 서버 2008, 리눅스 서버의 이미지를 떠서 EC2로 임포트 할 수 있다.
  • 물리적 서버가 제공되며, 서버 상태를 확인 할 수 있는 도구들이 제공된다. 사용자는 인스턴스가 어떤 서버에서 실행되고 있는지도 확인 할 수 있다.
  • 클라우드로 마이그레이션 할 때, 물리서버의 사용강제, Core, Socket 기반의 라이센스 이전 등의 문제 때문에 Dedicated Host를 사용해야 하는 경우가 있다. 네이티브 클라우드 서비스의 경우에는 쓸 일이 없을 것이다.
  • VHD, Citrix Xen, VMDK, OVA와 호환된다.
  • 운영체제는 Windows Server, RHEL, SUSE Linux, Ubuntu, Centos, Debian, Oracle Linux, Fedora 를 지원한다.


댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

Bitnami