...
EC2 (Elastic Compute Cloud) 개념
EC2란 Amazon Elastic Compute Cloud의 줄임말로서 AWS에서 제공하는 클라우드 컴퓨팅이다.
독립된 컴퓨터를 임대해주는 서비스로서 AWS의 대표적인 서비스, 대표적인 상품이다.
우리가 PC방에 가서 요금을 내고 컴퓨터를 이용하는 것 처럼 aws에서 컴퓨터를 대여해주는 서비스라고 보면 된다.
물론, 여러분의 가정용 컴퓨터와 EC2는 중요한 차이가 존재한다.
EC2는 컴퓨터를 주문하면 바로 1분 안에 생성되고, 삭제 역시 즉시 제거된다.
초기 구입비, 세팅비가 전혀 없고, 그냥 사용한 만큼 비용을 지불하면 된다.
내가 만일 10GB의 용량만 필요하다면, 120GB 삼성 SSD를 구입해서 장착하는게 아니라 딱 10GB용량 만큼만 지불하고 뽑아 사용 할 수 있으니 융통적으로 비용을 아낄수 있는 원리이다.
또한 EC2는 복잡한 공유기 세팅없이 인터넷을 통해서 자유롭게 접속할 수 있고, 이미지(AMI) 기능도 사용할 수 있다.
컴퓨터를 사용하면 프로그램도 설치하고, 파일도 저장하고, 설정도 변경하게 되는데, 이 OS 상태 그대로 저장하는 기능을 이미지(AMI) 라고 한다. 윈도우 백업 설정 이라고 봐도 무방하다.
이미지를 이용해서 새로운 컴퓨터를 만들면 이미지에 저장된 상태와 똑같은 컴퓨터를 빠르게 생성할 수 있다.
즉, 컴퓨터를 하나 장만할 때마다 반복되는 설치 작업을 하지 않게 되는 것이다.
이를 통해 하드웨어 구매없이 더 빠르게 애플리케이션을 개발하고 배포할 수 있다.
EC2를 통해 원하는 만큼 가상 서버를 구축하고 보안 및 네트워크 구성과 스토리지 관리가 가능하며, 또한 요구 사항이나 갑작스러운 트래픽 증가 등 변동 사항에 따라 신속하게 규모를 확장하거나 축소할 수 있어 서버 트래픽 예측 필요성이 줄어든다는 장점이 있다.
이 밖의 클라우드 컴퓨팅의 특징에 대해서는 따로 자세히 정리해보았다.
EC2 특징 요약
EC2의 특징을 요약 정리하자면 다음과 같다.
- 컴퓨팅 요구사항의 변화에 따라 컴퓨팅 파워를 조정할 수 있다.
- 실제로 사용한 용량 만큼만 지불한다 (서비스 요금을 미리 약정하거나 선입금, 하드웨어 비용이 필요 없음)
- Linux / Windows 중 OS 선택이 쉽게 가능하다
- 몇 분이면 전세계에 컴퓨터 수백여대를 생성할 수 있다. (실제로 미국에 가서 건물 임대하고 컴퓨터 구입하고 네트워크 구축하는 비용과 시간에 서비스 신청만 하면 바로 이용)
- 머신러닝, 웹서버, 게임서버, 이미지 처리 등 다양한 용도에 최적화된 서버를 쉽게 구성 가능
- 여러 다른 AWS 서비스와의 유기적인 연동이 가능
+ EC2를 배우기에 앞서 모르는 용어가 나올 경우 이 포스팅을 참고하기를 추천한다.
EC2의 구성 (Instance / EBS / AMI)
일반적인 서버를 보면 보통 컴퓨팅(CPU/RAM), 하드디스크, 랜카드 로 나누어진다.
이것을 EC2에 대입해보면 다음과 같이 된다.
- 컴퓨팅에 해당하는 인스턴스
- 하드디스크에 해당하는 EBS
- 랜카드에 해당하는 ENI 가 있다.
랜카드 : 한 네트워크 안에서 컴퓨터간 신호를 주고받는 데 쓰이는 하드웨어
이번 시간에는 이들이 무엇인지 어떤 역할을 하는지 알아보겠다.
EC2 인스턴스 이해하기
인스턴스란, 어렵게 접근할 필요없고 단순하게 aws 클라우드에서 사용하는 가상 컴퓨터 라고 이해하면 된다.
가상의 컴퓨터에의 CPU, 메모리, 그래픽카드 등 연산을 위한 하드웨어 부분을 담당한다.
그리고 Amazon EC2는 각 사용 사례에 맞게 최적화된 다양한 인스턴스 유형을 제공한다.
컴퓨터라고 해서 모두 같은 컴퓨터다 아니다. 컴퓨터도 컴퓨터 마다 쓰임새가 다양하다.
고사양 게임용, 서버용, 대량의 데이터 저장소, 영상용, 로봇 등 컴퓨터 하드웨어 구성에 따라 여러 사용 목적을 정할 수 있다.
이것이 바로 인스턴스 유형이다.
즉, 애플리케이션 종류와 목적에 따라 적합한 리소스 조합을 선택할 수 있는 유연성을 제공하는 서비스이다.
EC2 인스턴스 유형
최근에 출시된 엘든링과 함께 보통 정통 RPG게임에는 캐릭터를 부여받으면 한정된 스탯 포인트로 스탯 힘/민첩/지구력 ..등 을 골라 분배할 수 있다. 그리고 어느 스탯에 얼만큼의 포인트가 분배되냐에 따라 전사가 될지 궁수가 될지 마법사가 될지 직업의 귀천도 정해진다.
이처럼 EC2 인스턴스에 스탯 분배 개념을 그대로 대입해 보면 더욱 친숙하면서 이해하기 쉬울 것이다.
위와같이 RPG게임에서 한정된 스탯으로 힘/민첩/지능 중에 어느걸 찍어 전직을 할지 결정하는 것처럼,
EC2 인스턴스란 한정된 요금으로 EC2 인스턴스의 유형(직업)을 고르고 사이즈(스탯 포인트)를 골라 각 인스턴스별로 사용 목적에 따라 최적화를 시키는 것이다.
예를들어 CPU에 힘을 실어 연산능력이 좋은 서버를 만든다던지, 메모리 위주에 힘을 실어 저장소로서 기능 구성한다던지, 그래픽 카드에 힘을 실어 게임을 돌린다던지 등 다양하게 구성이 가능하다.
RPG게임에 직업이 전사/도적/마법사 가 있듯이, 인스턴스 유형에도 타입 이라는 것이 존재한다.
aws는 각 인스턴스의 사용 목적(서버용, 머신러닝용, 게임용)에 따라 타입별로 인스턴스에 이름을 부여해 구분하고 있다.
- ex) t타입, m타입, inf타입 ..등
표를 보면 범용 및 컴퓨팅, 메모리, 저장 최적화 성능 목적에 따라 타입이 여러가지 존재한다는 것을 볼 수 있다.
특히 t와 m은 범용타입이기 때문에 aws 초보자들이 가장 많이 사용하는 프리티어에서 쓰는 타입이므로 자주 접해 볼수 있는 타입이다.
EC2 인스턴스 사이즈
인스터스의 크기라 함은, 인스턴스 cpu 갯수, 메모리 크기, 성능 등으로 사이즈가 결정됨을 말한다.
즉, 인스턴스 사이즈가 클수록 더 많은 메모리, 더많은 cpu, 더많은 네트워크 대역폭을 가질 수 있다는 것을 의미한다.
다음 표를 보면, 같은 t2. 이라는 인스턴스 타입에 영단어로 nano, micro, small, ...large 로 크기가 나뉘어져 있음을 볼 수 있다. CPU나 메모리를 보니 사이즈가 클 수록 늘어나고 성능도 빨라진다.
즉 아래로 갈수록 점점 커지는 것이고 성능이 좋아지는 지표이다.
EC2 인스턴스 타입 읽는 법
위에 소개한 타입이 어떤 종류가 있고 사이즈는 뭐가 있고 등을 모두 외워야 하는거 아니다.
다만 위 사진처럼 인스턴스 단어가 나오면 이게 무슨무슨 의미인지만 알면 된다.
위의 단어를 해석하자면,
- m은 인스턴스 타입(패밀리) (범용 애플리케이션 서버용)을 의미하며
- 5는 5세대를 의미한다. 지금 이글을 쓰는 순간도 6세대, 7세대가 개발되어지고 있으며 앞으로도 세대가 업그레이드 될 것이다.
- a는 amd기반의 CPU 프로세서를 사용한다는 의미이며, (t4g = t4인스턴스 중 AWS Graviton 프로세서를 사용)
- xlarge는 큰 사이즈를 의미한다고 보면 된다.
EBS(Elastic Block Storage) 이해하기
위에서 배운 인스턴스가 연산에 관한 (CPU,메모리 등) 처리를 한다고 하면, 데이터를 저장하는 역할은 바로 EBS가 한다고 보면 된다.
즉, 클라우드에서 사용하는 가상 하드디스크(HDD) 인 셈이다.
여러분 집 컴퓨터 본체에 꽂혀져 있는 하드를 네트워크로 만든 버젼이라고 보면 된다.
EBS는 AWS 클라우드의 Amazone EC2 인스턴스에 사용할 영구 블록 스토리지 볼륨을 제공한다.
그리고 단 몇분 내에 사용량을 많게 또는 적게 확장할 수 있으며, 프로비저닝(빌리는 행위)한 부분에 대해서만 저렴한 비용을 지불 할 수 있다.
EBS에 대해 보다 자세히 이해하고 싶다면 다음 포스팅을 참고해보자
EBS 볼륨 유형 타입
EBS 타입이란 시중에서도 같은 하드 저장 디스크라도 SSD와 HDD, 느브메로 나뉘고 용량에 따라 성능과 가격이 차이나는 것처럼, EBS도 각각 타입으로 나눠놓은 것이다.
EBS는 총 5가지 타입을 제공하는데, 다음과 같다.
- 범용(General Purpose of GP3) : SSD
- 프로비저닝 된 IOPS(Provisioned IOPS or io2) : SSD
- 쓰루풋 최적화(Throughput Optimized HDD or st1)
- 콜드 HDD(SC1)
- 마그네틱(Standard)
일반적으로 범용타입인 GP3을 선택하면 되지만, 자신은 요금을 극도로 아끼겠다 하면 마그네틱을 사용하면 된다.
AMI(Amazon Machine Image) 이해하기
AMI는 EC2 인스턴스를 실행하기 위한 정보를 모은 단위 이다.
EC2(가상 컴퓨터)를 실행하기 위해서는 CPU 프로세서 타입이라던지 저장공간 용량은 몇인지, 32비트인지 64비트인지, OS는 윈도우인지 리눅스인지, 소프트웨어는 어떤게 설치되었는지 ..등 정보가 필요한데 이러한 세팅 정보(템플릿)를 저장한 단위라고 생각하면 된다.
AMI : 서버에 필요한 운영체제와 다양한 소프트웨어로 구성된 탬플릿
예를들어 나는 리눅스가 깔린 EC2사용 할 것이다! 라면,
인스턴스를 생성하고 OS를 일일히 설치해서 구성해야 하는게 아니라, 리눅스 환경 세팅이 된 리눅스 템플릿 AMI를 EC2에 적용시켜 아주 간편하게 리눅스 컴퓨터를 장만 하는 원리이다.
앞서 배운 스냅샷을 기반으로 AMI 구성이 가능하기 떄문에, AMI를 사용하여 현재 상태의 EC2 세팅(템플릿)을 복제해서 다른 계정이나 다른 리전에게 전달도 가능하다.
또한 exe처럼 프로그램 형태로 AMI 배포가 가능해 다른사람이 받아 내 EC2 상태 그대로를 사용할 수 있다.
AMI에 대해 보다 자세히 이해하고 싶다면 다음 포스팅을 참고해보자
EC2 구축 세팅 & 사용하기
EC2 인스턴스 구축하기
0. EC2 인스턴스 시작
먼저 리전을 선택하고 ec2를 검색하여 들어간다.
1. EC2 인스턴스 구성하기 위한 AMI 선택
1단계 화면에서는 생성하고자 하는 인스턴스(서버)의 OS(Windows, Ubuntu, Centos.. etc)를 선택하는 화면이다.
위에서 배운 AMI 개념이 바로 여기서 나오는 것이다.
AMI는 일종의 컴퓨터 세팅 템플릿이라고 했다. 즉, 우분투가 깔려진 컴퓨터 세팅을 고른다거나 윈도우 템플릿을 고른다거나 등, 바로 이 단계에서 하는 것이다.
사용하고자 하는 목적에 따라 OS와 CPU 프로세서(x86 / ARM)를 선택한 후 클릭을 하면 된다.
이 강의에서는 프리티어 사용 가능 이라고 써져있는 AMI를 이용하겠다. (1년 동안 무료. 하지만 트래픽이 많이 발생하거나 용량이 큰 트래픽을 처리하게 되면 요금이 과금이 발생할 수 있다.)
가장 첫번째 Amazon Linux 2 AMI (HVM) - Kernel X.XX, SSD Volume Type 을 고른다.
Amazon Linux 2는 직접 리눅스를 커스터 마이징 하여 아마존 웹서비스에 최적화한 리눅스라고 보면 된다.
2. EC2 인스턴스 유형과 사이즈 선택
위에서 배운 EC2 인스턴스 유형 & 사이즈 개념이 바로 여기에 등장한다.
가장 범용적으로 쓰이는 t2 그룹에 micro 유형 크기가 프리티어로 사용이 가능하다라고 명시되어 있다.
다시 한번 설명하자면, 인스턴스 유형에는 대체로 C, D, H, I, M, R, T, Z, G, P 그룹의 인스턴스가 많이 사용된다.
각 시리즈별로 컴퓨팅 최적화, 메모리 최적화, 스토리지 최적화등 특화된 인스턴스들이다.
우리는 가장 기본적인 t2를 사용할 예정이다.
[프리 티어 사용 가능] 이 붙지 않은 Instance는 컴퓨터를 시작하는 순간부터 과금이 발생할 수 있다.
그룹에 따라 가격이 천차만별이니 만들기 전에 가격을 알아보시고 사용하길 바란다.
3. EC2 인스턴스 세부 정보 구성
+ 추가 옵션 설명
- 인스턴스 개수 : Instance의 개수 설정 (몇 개까지 가 확장될 수 있는지 등)
- 구매 옵션 : 스팟 인스턴스란 AWS에서 유휴(놀고 있는, 사용하지 않는, 여유) 컴퓨터가 많은경우 할인 받을 수 있는 요금제라고 볼 수 있다. 정확한건 다음 사이트 참고 (https://aws.amazon.com/ko/ec2/spot/)
- 종료 방식 : 중지 같은 경우 잠시 프리징 시킨다고 보면된다. 종료 같은경우는 아예 해당 Instance를 삭제한다고 보면 된다.
4. EBS(가상 스토리지) 설정
EBS는 네트워크에 있는 하드라고 생각하면 된다고 배웠다.
옵션에 크기와 볼륨 유형이 눈에 띄는데 다음과 같다.
- 크기(GiB) : 메모리 GB단위 (적당히 8GB로)
- 볼륨 유형 : 위에서 EBS의 5가지 타입이라고 배운바가 있다.
항목에는 5가지 종류의 SSD가 있는데, 성능 차이에 따라 구분을 둔 것이다.
(성능을 높게 잡으면 비용이 많이 발생할 수 있으니, 범용 SSD나 가장 저렴한 마크네틱을 선택한다.) - 종료 시 삭제 : 나중에 인스턴스가 삭제 될떄 EBS도 삭제할지 말지 설정하는 옵션이다.
해당 옵션이 체크되면, 인스턴스를 종료하면 컴퓨터와 저장장치가 모두 폐기된다고 보면된다.
체크가 안되있는 경우 컴퓨터는 폐기, 저장장치는 폐기되지 않는다고 보면 된다.
(저장장치도 비용 발생할 수 있으니 체크를 한다.) - 암호화 : EBS 자체를 암호화 시키는 것이다.
만일 누가 해킹해서 EBS를 뺴온다 해도 암호화 되어있기 때문에 안의 데이터가 안전하다는 뜻이다.
즉, 금고 같은 개념이다. (내용물 데이터가 암호화가 되는게 아닌 하드가 암호화)
5. 태그 추가
태그는 어떤 인스턴스를 만들고, 어떤 용도, 누가 관리 하는지 등의 메모기능 이라고 볼 수 있다.
인스턴스를 여러 개 사용할 경우 해당 인스턴스를 알아보기 쉽게 별명으로 구분하는 위한 기능이다.
간단히 해당 EC2의 역할이 먼지만 기록하고 넘어간다. (설정을 하지 않고 넘어가도 상관없다.)
6. 보안 그룹 구성
보안 그룹 구성은 쉽게 방화벽을 설정하는 단계라고 생각하면 된다.
네트워크를 통해 해당 인스턴스에 어떤 접속방식을 어디까지 허용할지 설정해준다.
기본값은 SSH접속을 22번 포트를 사용하여 IP 0.0.0.0/0 즉 모든 IP의 사용자가 접속할 수 있도록 설정되어 있다.
만일 웹에서 접속하게 하고 싶다면, 규칙을 추가해서 HTTP(80) 포트를 추가해 열면 된다.
새 보안 그룹 생성을 하면 그룹 세팅이 저장되어 추후 새로 만들 서버들에게도 동시에 적용이 가능하다
이외에도 보안그룹에 https나 추가적으로 세팅해줘야 할게 있는데,
단순히 연습용이라면 그냥 기존 보안 그룹 선택 버튼을 누르고 디폴트 VPC 보안그룹을 선택해 적용해주면 간단히 설정 할 수 있다.
다음으로 넘어가기위해 검토 및 시작 버튼을 누른다.
만일 EBS 설정 부분에서 범용 SSD가 아닌 마그네틱을 선택했으면 다음 모달창이 뜰 것이다. 큰 의미는 아니고 aws는 범용SSD를 쓰는데 마그네틱 계속 쓸꺼냐? 는 확인창이다.
세번째 항목에 체크하고 진행한다.
7. 인스턴스 설정 검토
이때까지 인스턴스 설정한 것들을 최종 검토하는 페이지이다.
잘못된 것이 있나 확인하는데, 특히 네트워크 관련된 설정들이 잘 되있는지 한번 더 확인을 권장한다.
8. 인스턴스 키페어 생성
위에서 시작하기 클릭시 키페어 설정 페이지가 호출 될 것이다.
키 페어는 인스턴트에 접속하기 위한 물리 키라고 보면 된다.
평소 로그인 할때 처럼 비밀번호 입력하듯이 ****** 를 입력하고 들어가는 게 아니라, .pem 파일이 꼭 있어야만 EC2 인스턴스에 접근이 가능한 원리이다.
나중에 외부에서 EC2에 접속을 할때 키페어가 반드시 필요하게 된다.
잃어버리거나 삭제해버려도 재발급이 불가한 것으로 알고 있으니 그런 일이 생기지 않도록 잘 관리해주어야 한다.
자칫 EC2를 다시 만들어야 할지도 모른다.
만일 이전에 이미 한번 발급받은 적이 있다면, 기존 키 페어 리스트가 뜰 것이며, 기존키를 사용하여 범용적으로 사용이 가능하기도 하다.
여기서는 새로 키를 발급받겠다.
[ 새 키페어 생성 ]을 선택하고 케피어 이름을 선택한 후 [ 키 페어 다운로드 ]를 클릭하면 다운로드 된다.
9. 인스턴스 시작
인스턴스가 초기화되면서 상태가 실행 중 이라면 문제없이 인스턴스 생성을 완료한 것이다.
10. 인스턴스 삭제
만일 인스턴스를 삭제를 원한다면, 우클릭을하고 인스턴스 종료를 하면 된다.
인스턴스를 종료하게 되면 인스턴스 상태가 노란버튼으로 shuting-do상태에서 조금만 기다리면 빨간버튼으로 terminated로 변경되고 2~4시간 이상 지나면 목록에서 제거된다.
EC2 인스턴스 웹서버 설치하고 접속하기
이제 인스턴스에 웹서버를 설치해보자.
그러면 다음과 같이 EC2 커넥트에 접속되게 된다.
EC2 커넥트는 웹에서 간편하게 리눅스 터미널을 사용할수 있게 만든거라고 보면 된다.
먼저 인스턴스가 들어있는 서브넷이 외부와 잘 연결되어있는지 ping을 쳐본다.
아래 사진과 같이 계속 응답이 오면 정상적으로 연결 된 것이다. ctril + C 를 눌러 중지 시키자
$ ping 8.8.8.8
이제 아파치 웹 서버를 설치를 한다.
$ sudo -s # 루트 권한 획득
$ yum install -y httpd # 아파치 웹 서버 설치
yum 설치하는데 Could not retrieve mirrorlist 에러뜰경우 ⛔
보안그룹이나 NACL에서 인바운드, 아웃바운드 설정이 외부 인터넷과 잘 연결되게 되어있는지 봐본다.
그래도 잘 모르겠으면 전체 TCP 허용으로 규칙을 추가해서 테스트 해본다.
설치가 완료됬다면 하단에 Public IPs로 브라우저로 접속해본다.
Test Page가 나오면 정상적으로 웹서버 설치가 된 것이다.
$ service httpd start # 웹서버 시작
EC2 인스턴스에 탄력적 IP 할당하기
서버(인스턴스)가 생성되었고, 이를 실행하는데 그전에 추가로 해야할 것이 있다.
탄력적 IP 라는 것을 설정 해주어야 하는데, 이 인스턴스에서 설정된 퍼블릭 IP는 서버를 키고 끌때마다 새로운 것으로 갱신되기에, 이를 하나의 IP로 통일(고정)하기 위함이다.
안 그러면 인스턴스 끄고 킬때마다 아이피가 바뀌는 불상사가 일어난다.
탄력적 IP에 대한 원리와 세팅 방법은 다음 포스팅에 자세히 정리하였다.
외부에서 EC2 접속(SSH) 여러가지 방법
PuTTy / FileZilla / GIT BASH / CMDER / mobaxterm 이용해서 접속하는 방법을 총정리 해보았다 :)
EC2 인스턴스 AMI 다루기
지금까지 인스턴스를 생성하고 웹서버 프로그램을 깔고 띄우는 것 까지 성공했다.
그런데 만일 다른 곳 가서 또 인스턴스를 생성해 웹서버 띄우라고 하면 콘솔에 다시 웹서버를 설치하는 등 반복해야 할지도 모른다.
하지만 우리는 AMI(이미지) 라는 개념을 배웠다. 이를 적극적으로 활용하면된다.
이제 AMI 만드는 법을 알아보자.
1. EC2 AMI 만들기
EC2 인스턴스에서 우클릭 -> 이미지 및 템플릿 -> 이미지 생성 을 누른다.
이미지 생성 버튼을 누르면 AMI가 생성되기 시작한다.
다만 시간이 좀 걸리는 작업이니 여유있게 기다려주자.
2. EC2에 AMI 적용하기
AMI가 완성되면 이제 인스턴스를 만들때 내가 만든 커스텀 AMI가 잘 적용되는지 확인해보자.
[ EC2 인스턴스 시작 ]을 누르고 나의 AMI를 누르면 지금 생성했던 EC2가 보일 것이다.
생성한 EC2를 선택하고 앞서에 만들었던 EC2 세팅 단계를 다시 반복해서 만들면, 복제한 원본 인스턴스 내용이 그대로 반영이 되어있을 것이다.
이처럼, 잘 빌드된 백앤드 어플리케이션을 AMI로 만들뒤 오토스케일링이나 로드 밸런싱에서 인스턴스를 사용할때, 미리 만들어든 AMI을 사용한다면 시간을 많이 절약 할 수 있게 된다. 이미 준비된 상태로 인스턴스를 실전 배치를 할 수 있기 때문이다.
또한 AMI를 다른사람에게 전달도 가능하니 매우 유용하게 쓰일수 있다.
# 참고자료
https://youtu.be/rdlHszMujnw
https://youtu.be/N8TB_6AbaM4
https://dlaudtjr03.tistory.com/11
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.