EC2 개념
EC2 = Elastic Compute Cloud = Infrastructure as a Service
EC2는 사용자가 인터넷을 이용해 컴퓨팅 리로스, 즉 가상 머신을 사용할 수 있도록 하는 서비스이다. 마치 클라우드에 있는 컴퓨터라고 생각하면 되는데, 그렇기에 EC2를 생성할 때 OS, CPU, RAM, 스토리지 등의 설정을 해야 한다.
주 기능
- renting virtual machine (EC2)
- store data on virtual drives (EBS)
- distributing load accross machines (ELB)
- scaling the services using an auto-scaling group (ASG)
EC2 설정
- OS
- CPU : how many compute power & cores
- RAM : how much random-access memory
- storage : how much storage space
- network-attached: EBS & EFS
- hardware: EC2 instance store
- network card: speed of the card, public IP address
- firewall rules: security group
- bootstrap script: EC2 User Data, which is configured at first launch
EC2 User Data
이는 인스턴스로 bootstrap할 때 사용하는 스크립트이다. 이때, bootstrapping이란 인스턴스가 시작할 때 특정 명령어들을 수행하는 것을 의미한다. 이 스크립트는 인스턴스 시작할 때 한 번만 실행되며, 주로 다음과 같은 작업들을 자동화하기 위해 사용된다.
- 업데이트 설치
- 소프트웨어 설치
- 인터넷에서 흔한 파일 다운받기 위해
스크립트는 root user로써 실행된다. 즉 스크립트 명령들은 sudo 권한을 가진다.
EC2 Instance Types Overview
AWS에 EC2 Instance Types를 검색하면 시나리오별로 어떠한 인스턴스가 적합한지에 대한 설명이 있다. AWS는 다음과 같은 시나리오들을 제공하고 있다.
- General purpose
- 다양한 워크로드를 가진 경우 적합한 instance type
- compute, memory, networking. 이 세가지에 대한 밸런스를 갖추고 있다
- ex)
- web server
- code repositories
- Compute Optimized
- 성능이 높은 프로세서가 필요한 경우, 즉 compute-intensive task가 많은 경우 적합한 instance type
- ex)
- batch processing workloads
- media transcoding, high performance web servers
- scientific modeling & machine learning
- dedicated gaming servers
- Memory optimized
- RAM에 있는 큰 데이터셋을 처리해야 하는 워크로드가 많은 경우 적합한 instance type
- ex)
- high performance, relational/non-relational databases
- distributed web scale cache stores
- in-memory databases optimized for BI (business intelligence)
- applications performing real-time processing of big unstructured data
- Storage optimized
- 스토리지를 많이 요구하는 경우가 적합하며, 로컬 스토리지에 있는 큰 데이터셋에 대해 read and write가 많고 연속적인 경우 적합하다
- ex)
- high frequency online transaction processing (OLTP) systems
- relational & NoSQL databases
- cache for in-memory databases (ex. Redis)
- data warehousing applications
- distributed file systems
Security Groups
개념
Security group은 AWS의 네트워크 보안에 있어 필수적인 개념으로, 어떤 트래픽이 EC2 instance에 들어가거나 나가는지를 결정한다. 쉽게 말하면 EC2 instance에 대한 firewall이다. 이는 규칙만으로 구성되어 있는데, 규칙은 다음과 같은 정보를 명시한다.
- 허용하는 Port range
- 허용되는 IP 주소 범위 or 다른 security group
- control of inbound network (outside -> instance)
- control of outbound network (instance -> outside
특징
- 한 security group은 여러 개의 인스턴스에 붙여질 수 있다.
- Region/VPC에 제한적이다. 즉, 지역을 바꾸러나 새로운 VPCf를 만들 경우 security group을 새로 만들어야 한다.
- EC2 밖에 위치해있다. 그렇기에 트래픽이 막히면 EC2 인스턴스는 모른다
- SSH 접근을 관리하는 security group을 따로 하나 생성해두는 것이 좋다
- 애플리케이션에 타임아웃되어 connection refused response 받으면서 접근못하면, 그건 security group 문제이다
- 디폴트로 모든 inbound 트래픽은 blocked, outbound 트래픽은 allowed이다
Classic Ports to know
- 22 = SSH (Secure Shell)
- log into a linux instance
- 21 = FTP (File Transfer Protocol)
- upload files into a file share
- 22 = SFTP (Secure File Transfer Protocol)
- 80 = HTTP
- access unsecured websites
- 443 = HTTPS
- 3389 = RDP (Remote Desktop Protocol)
- log into a windows instance
IAM roles with EC2 instance
instance shell에 'aws iam list-users'와 같은 IAM 명령어를 실행하면 configure AWS라는 문구가 뜨면서 사용자의 Acess Key ID와 Secret Access Key를 입력하라고 한다. 그러나 인스턴스 내에 그런 정보를 입력하는 것은 지양해야 한다. 한번 입력하면 다른 계정들이 IAM credential 정보를 얻을 수 있기 때문이다. 이를 해결하기 위해 IAM role을 사용할 수 있다. IAM 관련 권한들을 IAM role에 명시하고, 이를 인스턴스에 부착하면 허용된 사람들만 IAM credentials에 대해 접근할 수 있다.
EC2 instances purchasing options
인스턴스는 디폴트로 on-demand instance로 요구사항에 알맞게 비용을 지불하는 인스턴스이다. On-demand instance는 짧은 워크로드, 짧은 기간, 그리고 애플리케이션이 예측가능하지 않을 경우 적합하며 초마다 비용이 책정되는 시스템이다. 선지불할 필요가 없고 긴 계약 기간이 없어 편리하지만 비용이 가장 비싸다. 그래서 워크로드가 조금 다르거나 할인을 받고 싶다면, 애플리케이션에 맞게 EC2 instance purchasing option을 골라서 할인받을 수 있다. 옵션으로는 다음 같은 것들이 있다.
- reserved (1 & 3 year term)
- 특정 인스턴스 타입이 기준
- 예상보다 더 많이 사용했을 경우, 초과된 사용량은 on-demand 비용으로 측정됨
- 긴 워크로드인 경우: reserved instance
- 긴 워크로드를 가지면서 인스턴스 타입을 변경할 경우: convertible reserved instances
- saving plans (1 & 3 year term)
- 어느만큼 사용했는가 기준
- 긴 워크로드를 가진 경우
- spot instances
- 짧은 워크로드
- 매우 쌈
- unreliable: AWS가 공간이 없으면 spot instance를 가져갈 수 있기 때문
- 그래서 batch jobs, data analysis, 또는 실패에 강한 워크로드일 경우 적합함
- 매우 중요한 작업이나 데이터베이스 관련이면 적합하지 X
- dedicated hosts
- 물리적으로 서버 한 개 전체를 예약하고 싶은 경우
- 인스턴스 위치를 조정하고 싶은 경우
- dedicated isntances
- 사용자가 사용하고 있는 하드웨어를 남들과 공유하고 싶지 않을 때
- capacity reservations
Spot Instances
Spot instane는 다른 인스턴스들과 조금 다르게 작동한다. 사용자는 spot request를 작성하여 내면, AWS는 그 요청에 맞게 인스턴스를 생성 및 제거한다. Spot request는 다음과 같은 정보를 담고 있다.
- maximum price
- spot instance 가격은 주식처럼 변동한다. 사용자는 spot instance를 사용하고자 한다면, 인스턴스를 위해 지불할 의향이 있는 최고 가격을 설정한다.
- 현재 가격 < maximum price이면 AWS는 요청에 정의된대로 인스턴스를 생성한다. 이때, maximum price을 지불한다.
- 그러나 현재 가격 > maximum price일 경우, 그 인스턴스는 AWS에 의해 제거된다. 2분 내에 인스턴스를 stop할지, terminate할지 결정해야 함
- desired number of instances
- 요청에 정의된 조건들을 만족하면 AWS가 생성해주길 바라는 인스턴스 개수
- valid from, valid until
- request type: one-time / persistent
- one-time: one-time request인 경우 인스턴스가 제거된 이후에 또다시 요청을 읽지 않는다
- persistent: persistent request는 해당 요청이 유효할 때까지 인스턴스가 제거될 때마다 요청을 다시 읽는 경우이다. 가령, 현재 가격 > maximum price이어서 두 개의 인스턴스가 AWS에 의해 제거됐다고 가정해보자. 이후 가격이 다시 maximum price를 넘지 않을 때 자동적으로 두 개의 인스턴스가 다시 생성된다.
How to terminate spot instances?
- one-time request인 경우:
- 생성된 인스턴스들을 제거하는 것만으로 충분하다
- persistent request인 경우:
- 생성된 인스턴스들을 제거하는 것만으로 충분하지 않다. 생성된 인스턴스를 삭제하면 spot request에 따라 삭제된 개수만큼 인스턴스가 자동적으로 생성되기 때문이다
- 그래서 이런 경우 request를 먼저 취소하고, 이후에 생성된 인스턴스를 모두 삭제해야 완벽히 spot instance를 제거할 수 있다.
Splot Fleets
= set of Spot instances + (optional) on-demand instances
비용을 가장 아낄 수 있는 방법으로, splot fleet은 사용자가 정의한 가격 제한에 맞추면서 목표 용량을 맞추려고 한다. Spot fleet는 spot instances를 가장 적은 비용으로 자동적으로 생성할 수 있도록 한다.
- 가능한 launch pools에서 인스턴스를 생성할 것이며
- fleet가 선택할 수 있도록 여러 개의 launch pool을 가질 수 있다.
- 다른 인스턴스 종류, OS, AZ를 가질 수 있다
- spot fleet은 목표 용량이나 가격 제한에 도달하면 인스턴스 생성을 멈춘다
Strategies to allocate spot instances
- lowestPrice: from the pool with the lowest price (cost optimziation, short workload)
- diversified: distributed across all pools (great for availability, long workloads)
- capcityOptimizied: pool with optimal capacity for the number of instances
- priceCapcityOptimized (recommended): pools with highest capacity available, then select the pool with the lowest price (best choice for most workloads)
Elastic IPs
EC2 instance를 멈췄다가 다시 킬 경우, 원래는 public IP 주소가 바뀐다. 그러나 만약 인스턴스를 위한 고정된 public IP 주소가 필요하다면 elastic IP가 필요하다. Elastic IP는 사용자가 소유하는 고정된 IPv4 IP 주소이다.
- 삭제하지 않는 이상 사용자가 계속해서 소유하게 되며, IP 한 개당 한 인스턴스에만 사용할 수 있다.
- 이를 이용하면 인스턴스나 소프트웨어의 실패를 가릴 수 있다. Elastic IP를 빠르게 다른 인스턴스에 붙임으로써 실패를 가릴 수 있다.
- 계정당 5개의 elastic IP를 가질 수 있음 (더 필요하면 AWS에 직접 요청해야 함)
- 비추천
- 이를 위한 아키텍쳐 디자인이 별로 안 좋다
- 차라리 랜덤한 public IP 주소를 사용하고, 그 주소에 DNS 이름을 붙이는 것이 낫다.
Placement Groups
Placement group은 EC2 instance 배치 전략을 정의한 것이다. Placement group을 생성할 때, 다음 전략 중 하나를 선택한다.
- cluster: clusters instances into a low-latency group in a single AZ
- 장점: great network
- 단점: AZ 실패하면 모든 인스턴스가 동시에 실패하게 된다
- spead: spreads instances across underluying hardware (max 7 instances per group per AZ, used for critical applications)
- 장점: can span across AZs, reduced risk in simulatenous failure, EC2 instances are on different physical hardware
- 단점: limited to 7 instances per AZ per placement group
- partition: spreads instances across many different partitions (which rely on different sets of racks) within an AZ