포스트

클라우드/AWS 개념 정리

EP 3

EC2란?

AWS의 핵심, EC2가 뭔지 알아보자.

EC2란?

EC2(Elastic Compute Cloud)

실습을 통해 EC2 인스턴스를 만들고 보안 그룹 설정, SSH 접속, 웹 서버를 구축해봤음.

이제 그러한 용어들과 개념들에 대해 설명해보겠음.

먼저 주구장창 말했던 EC2(Elastic Compute Cloud)가 뭔지부터 설명해보겠음.

이름 그대로 AWS에서 제공하는 클라우드 컴퓨팅 서비스임.

클라우드 컴퓨팅이 뭔진 초반에 설명했음.

Elastic?

그런데 Elastic가 뭘까? 탄력있는, 탄력적인 이런 뜻을 가지고 있음.

또는 유연하게 확장이 가능하다는 의미를 가지고 있는데, AWS에선 시스템의 리소스를 수요에 맞게 줄이거나 늘리는 능력을 뜻함.

예를 들어 갑자기 트래픽이 늘어나면 AWS가 자동으로 인스턴스의 성능을 늘리고, 아니라면 줄이는 그러한 능력임. (스케일 업/다운)

그게 EC2의 핵심 중 하나고, 이게 오토스케일링임.

autoscaling

이러한 기능이 없었다면, 인스턴스의 CPU 사용량을 직접 측정하고, 예상하여 인스턴스의 성능(스케일)을 업/다운 해야 그나마 효율적으로 관리할 수 있었음.

하지만 Elastic한 EC2의 오토스케일링을 쓰게 되면? 사진처럼 그때그때 알아서 스케일을 설정해줌.

그 외에도 AWS에서 Elastic은 트래픽이 늘어나면 트래픽이 늘어나면 자동으로 여러 인스턴스에 부하를 분산하는 ELB(Elastic Load Balancer), 아까 설명했던 EIP(Elastic IP)도 Elastic라는 단어를 씀.

아 물론 요금도 Elastic하게 부과됨.

인스턴스(Instance)

일단 객체지향에서 무조건 배우는 용어인데, 쉽게 설명해서 어느 클래스에 소속된 개별적인 개체들을 인스턴스라 부름.

AWS에서도 비슷한 개념임. AWS에서 사용하는 가상의 컴퓨터를 개별적으로 부르는게 인스턴스임.

instance

인스턴스 타입(Instance Types)

우리가 인스턴스를 만들 때 사용 목적/용도/방식 등에 따라 인스턴스의 성능을 선택해야 하는데, 그때 인스턴스 타입을 보고 CPU, 메모리, 스토리지 볼륨, 네트워크 등을 선택할 수 있음.

아까 t2.micro 이런걸 선택했었는데, 얘네가 인스턴스 타입임.

인스턴스 타입엔 표기법이 있는데, 아래와 같이 표기됨.

1
[인스턴스 패밀리][인스턴스 세대][프로세서][추가 기능] . [인스턴스 사이즈]

일단 인스턴스 패밀리엔 크게 5가지로 분류됨. (자세한건 공식 문서를 참조하자)

  • General purpose (범용)
    • 가장 일반적인 인스턴스, 골고루 균형잡힌 식단임. 아까 프리티어의 t2도 여기에 해당됨.
  • Compute optimized (컴퓨팅 최적화)
    • CPU 연산에 최적화가 되어있는 타입임. 수학적 계산이나 인공지능같은 CPU를 많이 잡아먹는 작업에 주로 쓰임.
  • Memory optimized (메모리 최적화)
    • 메모리를 많이 가지고 최적화된 타입임. 빅데이터 분석 등 메모리 소모가 많이 필요한 작업에 주로 쓰임.
  • Accelerated computing (가속화 컴퓨팅)
    • GPU같은 가속화 장치에 중점을 둔 것. 얘도 인공지능이나 관련 연산이 많이 필요한 곳에서 주로 씀.
  • Storage optimized (스토리지 최적화)
    • 스토리지에 최적화된 타입, 데이터베이스나 R/W 작업 등의 연산이 주로, 많이 필요할 때 씀.

t2.micro 에서 t가 인스턴스 패밀리, 그 뒤의 2는 세대를 의미하고 t 패밀리의 2세대를 의미함.

프로세서는 x86_64, ARM 등의 프로세서를 선택하고, 추가 기능은 말 그대로 추가적인 기능을 넣을 수 있음. (자세한건 문서 참조…)

마지막으로 . 뒤의 인스턴스 사이즈는 말 그대로 인스턴스의 CPU, 메모리 등의 사이즈를 의미함.

온디맨드 인스턴스 vs 예약 인스턴스 vs 스팟 인스턴스

우리가 프리티어를 써서 그렇지 AWS는 유료 서비스임. 세상에 꽁짜는 없다.

그래서 인스턴스를 쓸때도 요금을 내야하는데, 그러한 방식엔 3가지 종류가 있음.

  • 온디맨드(On-demand)
    • 사용한 만큼 비용을 지불함. 가장 기본적이고 안정적이며 유연하게 작동됨. 시간당으로 부과되고 단점은 비싸다는거
  • 예약(Reserved)
    • 말 그대로 특정 기간동안 예약하고 씀. 할인도 받을 수 있고, 정기적인 서비스에 유리함.
    • 다만 그 기간 동안 뽕을 못뽑으면 가성비가 떨어질 수 있다는 점.
  • 스팟(Spot)
    • AWS에서 제공하는 특이한 요금제인데, 쉽게 말해 AWS 내에 남는 자리를 빌리는 방식임.
    • 때문에 매우 저렴하다는 장점이 있으나, 남는 자리를 빌려서 쓰다보니 AWS 내에서 자리가 없다면 사용하기가 어려워진다는 점, 또한 가용성이 저해된다는 점도 있음. 그래서 주기적으로 스냅샷(백업)을 해둬야됨.

사용 용도에 맞게 쓰면 됨. 기업이나 장기적으로 돌릴거면 예약해서 쓰고, 짧고 굵게 돌릴거면 온디맨드, 좀 저렴하게 가거나 끊겨도 딱히 상관 없다면 스팟으로 가면 될 듯.

스토리지(Storage)

일단 스토리지(저장소)는 이름 그대로 데이터를 저장하는 저장소인데, 클라우드에서 스토리지라 하면 클라우드에 있는 스토리지를 뜻하겠지.

우리가 쓰는 컴퓨터로 비유하자면 하드디스크, SSD같은 저장소인데 용도가 있음.

볼륨(Volume)은 그 스토리지 위에서 생성된 논리적인 단위의 공간임. 운영체제(윈도우 등)에서 드라이브 같은게 볼륨임.

즉 디스크(물리적인 저장장치)를 파티션(디스크를 논리적으로 나눈 것)으로 나누고 그걸 볼륨으로 사용하는 것.

윈도우에서 USB를 연결하면 D:\ 같은 볼륨 하나가 인식되는 것이 예시임.

그리고 마운트(Mount)라는 용어도 나오는데, 얘는 쉽게 설명하면 스토리지를 연결하여 장치에 편입시켜 사용할 수 있게 하는게 마운트임.

예시로 윈도우에서 USB를 연결했을 때, D:\ 라는 볼륨으로 마운트 되고, 리눅스 환경에선 /mnt 라는 디렉토리에 하위 디렉토리로 마운트됨.

AWS에도 당연히 이러한 스토리지가 있는데, 우리가 접할건 S3(Simple Storage Service), EBS(Elastic Block Store) 등이 있음.

그런데 그 전에 스토리지의 유형과 아키텍쳐에 대해 좀 알고 가자.

블록(Block) 스토리지

그런데 EBS에서 Block이 뭘 의미하는걸까? 여기서 블록, 객체, 파일은 스토리지의 유형를 의미함.

일단 블록(Block) 스토리지는 데이터를 동일한 크기의 블록이라는 단위로 나눠서 저장함.

이 블록들은 고유한 식별자를 가지고 있고, 읽을 땐 쪼개진 데이터를 조합하기만 하면 됨.

실제 저장장치(하드 등)는 데이터를 쓰고 읽기만 하고, 쪼개서 식별자를 부여하거나 찾는 건 OS 차원에서 한다는 점.

예를 들어서 1024바이트의 파일을 저장한다고 하면, 512바이트의 블록 단위로 쪼개서 저장하고, 각 블록엔 식별자를 부여함.

만약 어떤 파일을 수정한다고 생각하자, 그럼 블록 스토리지는 하나의 파일을 블록 단위로 쪼개서 저장하기 때문에 바뀐 부분만 수정해주면 됨. 그래서 쓰기 면에서 빠름.

AWS에선 후술할 EBS가 있음.

객체(Object) 스토리지

블록 스토리지와는 반대로 파일을 쪼개지 않고 파일과 메타 데이터, 고유한 키를 묶어서 하나의 오브젝트(객체, Object)라는 단위로 저장함. 일반적인 디렉토리 경로처럼 구조화되어 있지 않고, flat하게 놓여있음.

아무래도 파일을 변경하면 오브젝트 전체를 갈아줘야 되다보니 쓰기 속도 면에선 느림. 다만 구조가 단순해서 읽기는 빠르고.

그래서 클라우드 차원에서 비용이 저렴하고, 잘 변경되지 않는 파일, 백업(스냅샷) 등에서 요긴하게 사용됨.

AWS에선 후술할 S3가 객체 스토리지를 씀. 그래서 AWS에서 백업(스냅샷)은 S3에 저장하는 편.

파일(File) 스토리지

우리가 쓰는 운영체제(윈도우, 맥, 리눅스 등등)가 바로 파일 스토리지 형식임.

얘는 파일을 디렉토리 구조(경로)로 구분하고, 해당 위치의 파일에 접근함.

즉 OS 차원에서 파일을 찾아주는걸 사용자가 직접 찾게 한다는 것. 얘도 블록 스토리지 처럼 블록 단위로 쪼개서 저장하게 되는데, 블록 스토리지에 경로라는 개념이 추가됐다고 생각하면 편할 듯.

AWS에선 EFS(Elastic File System) 등의 스토리지가 있음.

DAS(Direct Attacted Storage), NAS(Network Attached Storage), SAN(Storage Area Network)

스토리지에 어떤 방식으로 접근할지에 대해서도 방식이 있음. (스토리지 아키텍쳐/인프라)

DAN은 컴퓨터에 직접 연결된 스토리지를 뜻함. 네트워크를 거치지 않고 직접 연결되며, 일반적으로 스토리지 당 하나의 컴퓨터와 연결됨. 컴퓨터와 직접 연결되기 때문에 성능 면에선 가장 빠름.

NAS, Network Attached Storage를 직역하면 네트워크 결합 스토리지를 의미함. 즉 LAN을 통해 네트워크로 연결한 스토리지임.

DAN과는 다르게 네트워크로 연결되기 때문에 여러 사용자가 공유할 수 있음.

다만 네트워크를 통해 접속하기 때문에 네트워크 사용이 제약된다면 NAS의 사용에도 제약이 생기고, 네트워크에 따라 속도가 느려질 수 있음.

SAN은 NAS처럼 네트워크를 통해 연결되나, LAN이 아닌 광섬유를 사용하여 연결이 됨.

그래서 NAS보다 빠르며, 규모가 큰 서버의 데이터베이스 등에서 쓰임. 구축 비용과 관리 비용이 비교적 큼.

얘는 NAS처럼 파일 단위가 아닌, 블록 단위(블록 스토리지)로 입출력됨.

EBS(Elastic Block Store)

EBS(Elastic Block Store)는 EC2 인스턴스에서 사용할 수 있는 스토리지 중 하나임.

(EC2 인스턴스 만들 때 루트 볼륨이 대부분 EBS임)

CPU, 메모, 그래픽카드 등의 하드디스크(또는 SSD)를 제외한 나머지 부속품들이 EC2라면, EC2에서 하드디스크는 EBS에 해당됨.

EC2에서 사용할 수 있는 스토리지?

EC2에선 대부분 EBS를 연결하여 사용할 수 있지만, 사실 EBS 없이도 데이터 저장이 가능하긴 함.

바로 EC2 인스턴스에 내장된 디스크(인스턴스 스토리지)가 있는데 문제는 얘는 인스턴스를 끄면 데이터가 날아감.

그리고 특정 인스턴스 타입(d 패밀리, i 패밀리 등등등)만 지원을 한다는 점. 만약 ephemeral 라고 적혀있다면 이러한 내장 스토리지를 의미함.

EBS 말고도 EFS(Elastic File System, NAS처럼 작동함)도 마운트할 수 있음.

얼핏 보기엔 실제 컴퓨터처럼 EC2에 EBS가 종속된다고 생각할 수 도 있는데, 사실 네트워크 상 별개로 연결된 서비스임.

때문에 인스턴스가 꺼져도 EBS는 작동함. 그래서 장점이 인스턴스던 EBS던 업그레이드 후 재연결만 시켜주면 돼서 확장이 빠름.

그리고 여러 EBS를 하나의 인스턴스에 연결할 수 도 있고, 반대로 여러 인스턴스를 하나의 EBS에 연결할 수 도 있음.

물론 인스턴스를 중지(Stop)시킨다고 해도 EBS는 별개로 작동되어 비용이 청구되기 때문에, 중요 자료는 백업해두고 종료(Terminate)시켜 청구되는 비용을 막을 수 있음.

그리고 인스턴스의 가용 영역(AZ)과 EBS의 AZ가 일치되어야 연결이 가능함.

EBS도 EC2와 마찬가지로 Elastic하게 확장하거나 성능을 조절할 수 있음. (크기를 줄이는건 직접적으론 안됨)

결론적으론 EC2 인스턴스에서 하드나 SSD 처럼 쓸 수 있는 스토리지라 생각하면 편함.

(실습) 직접 생성하고 마운트해보기

TODO

S3(Simple Storage Service)

S3도 AWS에서 제공하는 클라우드 스토리지 중 하나임. 구글 드라이브처럼 파일 저장 서비스인데, 데이터를 온라인으로, 오브젝트(오브젝트 스토리지) 형태로 저장함.

때문에 데이터를 읽어오는데 유리하고, 파일 저장저장소나 백업 등 다양하게 쓰임.

앞서 오브젝트 스토리지의 특징이였던 데이터를 객체로 저장한다는 것, 그 개체는 각각 파일과 메타데이터, 키를 가지고 있음.

그리고 파일 시스템처럼 디렉토리 구조가 아니라 버킷(Bucket)이라는 공간에 저장함. 즉 S3에 데이터를 저장하기 위해 공간을 만든다 = 버킷을 만든다.

그리고 EBS와는 반대로 여러 EC2에서, 심지어 다른 클라우드 서비스에서도 접근이 가능함.

구조도 간단하고, URL을 통해 접근이 가능하고, HTTP 요청(GET, PUT, DELETE, POST)으로 입출력이 가능하기 때문에 간편함. (물론 실제 활용에선 AWS에서 제공하는 SDK를 쓰는게 가장 편하긴 함)

그럼에도 ACL, IAM, 버킷 정책(Bucket Policy) 등의 보안적 기능들도 뛰어나서 아주 좋은 서비스임.

키페어(Key Pair)

EC2 접속 실습을 했을 때 SSH에 접속하기 위해 .PEM 파일을 썼었음. (윈도우 PuTTY 에선 PPK 형식)

이게 바로 키페어인데, 즉 AWS 인스턴스에 SSH로 접근하기 위한 암호 키를 의미함.

공개 키와 개인 키가 제공되는데, 인스턴스의 공개 키와 SSH 접속 시 개인 키가 일치해야 접속되는 것.

EIP(Elastic IP)

마찬가지로 EC2 인스턴스 생성 & 접속 실습을 해보면서 접했던 기능인데, 인스턴스 재시작 등의 작업으로 IP가 바뀐다고 말했었음.

어쩔 수 없는게 로컬 서버처럼 하나의 서버를 독점하는게 아니고, 퍼블릭 클라우드 환경이기 때문에 그에 따른 물리적 서버 등이 바뀔 수 있기 때문. (물론 내부의 프라이빗 IP는 바뀌지 않음)

그래서 EIP(Elastic IP)라는 고정 퍼블릭 IP를 할당해줄 수 가 있는데, 얘는 EC2랑 별개로 동작하는 애라 EC2를 연결된 바꾸거나 재연결, 해제해도 IP가 그대로 유지가 됨. 그래서 Elastic 이라는거.

퍼블릭 IP에 대해선 VPC 다룰 때 살짝 설명함.

그 외… : User Data 스크립트

솔직히 몰라도 될 거 같긴 한데 로드맵에 적혀있으니 설명함.

예를들어서 어떠한 인스턴스 3대를 만들고 각 인스턴스에 Nginx 설치 및 환경 세팅을 해줘야한다고 가정하자.

3대를 만들고 SSH로 들어가서 하나하나 세팅을 해줄 수 도 있지만, 여간 귀찮은게 아님.

그래서 인스턴스를 만들 때 유저 데이터(User Data)라는 스크립트를 넣을 수 있는데, 여기의 스크립트는 인스턴스가 최초로 부팅될 때 실행되는 스크립트임. 근데 왜 이름이 User Data 인지는 몰?루

윈도우 파워셸의 경우 <powershell> 테그를 넣고 어쩌고 하는데 자세한건 문서를 보도록 하고, 대부분 리눅스를 쓸테니 #!/bin/bash shebang을 달아두고 셸 스크립트를 쓰면 됨.

ec2-user-data

인스턴스 만들 때 고급 정보 펼쳐보면 맨 아래에 있음.