EC2란?
EC2는 Elastic Compute Cloud의 약자이며, AWS의 Infrastructure as a Service를 그대로 실행하고 있다.
기능
-
Renting virtual machines
- EC2 인스턴스라 부른다.
-
Virtual drive에 EBS 볼륨에 데이터를 저장할 수 있다.
-
ELB(Elastic Load Balancer)를 이용한 시스템 부하 분산
-
ASG 혹은 auto-scaling group을 이용해 서비스를 확장할 수 있다.
EC2를 이해하는 것은 클라우드가 어떻게 동작하는 지를 이해하는 데 가장 기본이 된다.
EC2 Sizing & Configuration 옵션
- OS: 리눅스, 윈도우, 맥 중 선택 가능
- CPU
- RAM
- 저장 공간
- 네트워크를 통해 연결될 저장 공간(EBS & EFS 이용)
- 하드웨어(EC2 Instance Store)
- EC2 인스턴스에 추가하길 원하는 네트워크 유형
- 빠른 속도를 원할 경우
- 어떤 종류의 공공 IP를 원하는 지
- Security group 설정
- EC2 User Data라 불리는 첫 launch시 인스턴스를 구성하기 위해 사용하는 Bootstrap 스크립트 설정
EC2 User Data
- EC2 User Data 스크립트를 이용해 인스턴스를 bootstrap 할 수 있다.
- 부트스트랩은 머신을 작동시킬 때 명령을 런칭한다는 것을 의미한다.
- 해당 스크립트는 처음 시작시 딱 한 번만 작동하며 그 이후에 다시 작동하지는 않는다.
- EC2 User Data는 부트 작업을 자동화 하기 위해 사용된다. 인스턴스를 부팅할 때 어떤 작업을 자동화 하고 싶은지 지정할 수 있다.
- Installing updates
- Installing software
- Downloading common files from the internet ...
- 그러나 많은 User Data script를 사용할수록 다른 인스턴스보다 부팅 시간이 더 오래 걸리게 된다.
- EC2 User Data scripts는 루트 사용자를 이용해 작동시킬 수 있다.
- 즉, sudo 권한을 이용해야 한다.
인스턴스 유형에는 여러가지가 있지만 대표적으로 아래와 같은 것들이 있다.
이를 보고 앱의 특성에 맞게 선택해서 사용해야 한다.
EC2 실행하기
-
AMI(Amazon Machine Image) 선택
- Quick Start, My AMIs, AWS Marketplace 등 여러 선택지가 있는데 프리티어를 사용하는 경우 "Amazon Linux2 AMI"를 선택한다.
-
인스턴스 타입 선택
-
인스턴스 디테일 선택
- 위에서 원하는 설정을 끝낸 뒤 아래쪽으로 내려보면 "User Data"가 있다.
- 이는 위에서 설명했듯이, 인스턴스가 맨 처음으로 부팅되는 동안에만 실행되는 스크립트이다.
- 원하는 스크립트(.sh 파일에 들어가는)를 생성해서 적어 놓으면 된다.
-
Add Storage
- 여기에는 Delete on Termination 옵션이 있는데, 이는 우리가 인스턴스를 종료할 때 디스크도 사라지게 된다는 뜻이다.
-
태그
- 원하는 태그를 만들고 싶다면 원하는 수 만큼 만들 수 있다.
-
Security group
-
Launch
- Key pair를 생성해야 한다.
- 이는 인스턴스에 로그인 하기 위해 SSH를 사용할 때 쓰인다.
- 처음 인스턴스를 생성하는 경우 key pair를 만들어야 하며 type은 RSA로 한다.
- 생성 후에는 다운로드 한다.
생성된 인스턴스의 특징
- Public IP와 Private IP를 갖는다.
- Public IP: 웹 서버에 접근하기 위해 사용한다.
- 만약 인스턴스를 중단했다가 다시 시작하는 경우 Public IP는 변하지만 Private IP는 변하지 않는다.
EC2 인스턴스 유형
- 네이밍 컨벤션
ex) m5.2xlarge
- m: instance class(일반적인 인스턴스 유형)
- 5: 인스턴스의 세대(AWS는 새 버전을 계속해서 출시함)
- 2xlarge: 인스턴스 클래스 안의 사이즈(크기가 클수록 CPU가 더 많은 메모리를 갖게됨)
유형: 컴퓨팅 최적화(Compute Optimized)
- 컴퓨팅 집약적인 작업에 최적화 된, 높은 수준의 프로세서가 필요한 인스턴스에서 사용한다.
- 사용 사례
- 배치 프로세스(많은 양의 데이터를 다루는 경우)
- 미디어 트랜스코딩
- 고성능 웹 서버
- 고성능 컴퓨팅(HPC)
- 머신러닝
- 게임 전용 서버
- C로 시작하는 이름을 사용한다.
유형: 메모리 최적화(Memory Optimized)
- 메모리에서 대규모 데이터 세트를 처리하는 워크로드 유형에 대해 매우 빠른 성능을 보인다.
- 메모리는 RAM을 의미한다.
- 사용 사례
- 고성능의 관계형 또는 비관계형 데이터베이스
- 분산 웹스케일 캐시 저장소
- BI에 최적화된 In-memory 데이터베이스
- 큰 비정형 데이터를 실시간으로 처리하는 애플리케이션
- R로 시작하는 이름을 사용한다(R은 RAM을 의미함).
- X1은 높은 메모리
유형: 스토리지 최적화(Storage Optimized)
- 사용자가 로컬 스토리지의 엄청 많은 데이터 세트에 접근할 때 유용함
- 사용 사례
- 온라인 트랜잭션 처리(OLTP)
- Relational & NoSQL Databases
- DW(Data Warehouse)
- 분산 파일 시스템
- I, G 또는 H1으로 시작한다.
ec2.instances.info에서 인스턴스 유형에 대한 정보를 얻을 수 있다.
Security Groups
- 트래픽이 EC2 인스턴스로 들어오고 나가는 방식을 제어한다.
- IP 또는 다른 보안 그룹을 참조해 설정할 수 있다.
- 보안 그룹은 서로 참조가 가능하다.
- 인바운드 & 아웃바운드
- 인바운드 그룹: 인증된 유저 혹은 컴퓨터가 접근할 수 있음
- 아웃바운드 그룹: 기본적으로 모든 트래픽을 허용함
- 인스턴스는 여러 보안 그룹을 가질 수 있다.
- 보안 그룹은 리전, vpc에 속해있기 때문에 리전을 변경하면 다른 vpc를 생성해야 한다.
- 보안 그룹은 EC2 바깥에 위치한 방화벽이다.
- 따라서, 만약 트래픽이 차단된다면 인스턴스는 해당 트래픽을 볼 수 없다.
- SSH 접속만을 위해서 보안 그룹을 하나 생성해 놓는 것이 좋다.
다른 보안 그룹 참조
- 인스턴스를 여러개 생성하게 되면 그에 따른 보안그룹을 생성하거나 기존 보안 그룹을 사용하게 되는데 해당 인스턴스들이 기존 인스턴스와 직접 연결하고 싶을 수 있다.
- 이럴 때 보안그룹 참조가 필요하다.
알아두면 좋을 클래식 포트 번호
- 22: SSH - 리눅스
- 21: FTP - 파일 업로드 또는 전송
- 22: SFTP - SSH + SFTP로, 보안 파일 전송 프로토콜
- 3389: RDP(Remote Desktop Protocol) - 윈도우 인스턴스에 로그인 하기 위해 사용됨(22와 반대)
SSH로 EC2에 접근하기
- SSH는 CLI Utility를 의미한다.
- EC2 Instance Connect는 웹 브라우저를 EC2 인스턴스에 연결하는 것을 뜻한다.
- 이는 Amazon NX2에서만 가능하다.
- 아래의 테이블에 어떤 Utility가 어떤 OS에서 사용하기 적합한지 정리되어 있다.