EC2
•
Infrastructure as a Service
•
Virtual Machine 서비스
•
다양한 OS 지원
•
Auto Scaling을 통한 탄력적 확장 / 축소
•
성능에 따른 다양한 인스턴스 타입 제공
EC2 인스턴스 타입 종류 (family)
EC2 인스턴스 타입 설명
인스턴스 구매 옵션
인스턴스 구매 옵션
온디맨드 인스턴스
•
약정 없이 초당 사용한 만큼 비용 지불
•
처음 60초 이후 초당 과금
•
장기 약정이나 선 결제가 없음
•
단기간 동안 예측할 수 없는 워크로드 및 중단되어서는 안되는 애플리케이션에 적합
•
EC2에서 처음으로 개발 중이거나 시험 중인 애플리케이션 사용에 적합
스팟 인스턴스
•
사용하지 않는 예비 EC2 용량을 경매방식으로 구매하여 사용하는 방식
•
온디맨드 인스턴스보다 최대 90% 저렴
•
경매 조건에 미달하면 인스턴스가 정지 또는 종료되므로 언제든지 시작 및 종료가 가능한 경우에 사용
•
여러 개의 스팟 인스턴스를 하나의 그룹으로 묶어 스팟 집합(Spot Fleets)으로 구매해서 사용
•
예약 인스턴스 + 스팟 인스턴스(짧은 시간 급격하게 증가된 용량이 필요한 경우)의 조합으로 사용
예약 인스턴스
•
1년 또는 3년 기간을 약정하여 인스턴스를 사용
•
온디맨드에 비해 최대 72% 저렴
•
수요가 꾸준하고 예측가능한 경우에 유용
•
결제옵션은 선결제, 부분 선결제, 선결제 없음 3가지 선택 가능
•
예약 인스턴스 유형
◦
표준 예약 인스턴스(Standard Reserved Instances) : 인스턴스 타입을 지정하면 예약기간동안 변경 불가능
◦
전환형 예약 인스턴스(Convertible Reserved Instances) : 예약기간동안 인스턴스 타입 변경가능
◦
정기 예약 인스턴스(Scheduled Reserved Instances) : 지정된 시간, 날짜 동안에 인스턴스가 시작되어 사용
Saving Plan
•
1년 또는 3년 기간의 일정 사용량을 약정하여 시간당 요금으로 인스턴스를 사용
•
EC2 뿐만 아니라 Lambda 및 Fargate 서비스도 사용 가능
•
사용량은 시간당 USD 요금으로 측정
•
온디맨드에 비해 최대 66~72% 저렴
•
Compute Saving Plans 와 EC2 Instance Saving Plans 두 가지 유형이 있음
•
EC2 인스턴스 패밀리, 인스턴스 사이즈, 리전, OS 관계 없이 적용 및 변경 가능한 유연성이 있음
전용 호스트 / 전용 인스턴스
•
전용 호스트
◦
물리적인 전용 서버를 할당 받아 사용하는 방식
◦
CPU 소켓, 코어 등이 표시됨
◦
사용자가 인스턴스 배치 방법을 지정할 수 있음
◦
소켓, 코어당 또는 VM 당으로 사용하는 소프트웨어 라이선스 사용 가능
◦
CPU 코어나 물리적 서버에 할당되는 라이선스를 기존에 보유한 경우에 적합
•
전용 인스턴스
◦
물리적인 전용 서버를 할당 받아 사용하는 방식
◦
전용 호스트에서 사용가능한 CPU 코어, 인스턴스 배치, 사용자 라이선스 사용 불가
ENI (Elastic Network Interface)
ENI
•
가상 네트워크 인터페이스
•
IP 주소, MAC 주소 등이 부여됨
•
인스턴스에 연결되어 네트워크 통신을 하는 역할
•
인스턴스 생성시 기본 네트워크 인터페이스가 IP 주소 등의 정보 할당과 함께 생성됨
•
EC2에 추가로 여러 개의 네트워크 인터페이스 연결 가능
Security Group
Security Group
•
EC2 인스턴스에 대한 인바운드 및 아웃바운드 트래픽을 제어하는 가상 방화벽 역할
•
EC2 인스턴스의 ENI와 연결됨
•
보안 그룹은 허용 규칙만 지정 가능하고 거부 규칙은 지정 할 수 없음
•
보안 그룹은 연결 상태를 추적하는 상태저장 방화벽 (Stateful Firewall)
트래픽 종류
•
인바운드 트래픽
◦
외부에서 EC2 인스턴스로 들어오는 트래픽
•
아웃바운드 트래픽
◦
EC2 인스턴스에서 외부로 나가는 트래픽
제어 규칙
•
트래픽 유형 (SSH, HTTP 등)
•
프로토콜 (TCP, UDP 등)
•
포트 (22, 8080 등)
•
대상 (개별 UP 주소, IP 주소대역, 다른 보안 그룹)
Stateful
•
아웃바운드 규칙에 상관없이 허용된 인바운드 트래픽에 대한 반응으로 외부로 나가는 흐름이 수행
•
사용자가 인스턴스에서 요청을 전송하면 해당 요청의 응답 트래픽은 인바운드 보안 그룹 규칙에 관계없이 인바운드 흐름이 허용
탄력적 IP (Elastic IP)
Elastic IP
•
인터넷에 연결 가능한 고정적인 퍼블릭 IP 주소
•
인스턴스 생성시 자동으로 할당 받은 Public IP는 인스턴스를 재시작하면 다른 IP로 재할당 받기에 Public IP 주소가 변경됨
•
EC2 인스턴스의 ENI에 Elasitc IP주소를 연결하면 EC2 인스턴스를 다시 시작해도 동일한 IP 주소로 접속할 수 있음
•
실행 중인 인스턴스에 연결된 Elastic IP 한 개는 무료로 사용
•
리전당 5개의 Elastic IP로 제한됨
AMI (Amazon Machine Image)
AMI
•
OS, 애플리케이션, 서버 프로그램 설정 등이 미리 구성된 이미지
•
EC2 인스턴스를 시작하는데 AMI 사용하여 EC2 시작 시 OS 설치나 서버 소프트웨어 설정 등을 별도로 할 필요 없음
•
3가지 유형
◦
AWS 제공 AMI
◦
AWS 마켓플레이스 AMI
◦
AWS 커스텀 AMI
•
운영중인 EC2 인스턴스를 커스텀 AMI로 만들어서 동일한 환경으로 구성된 EC2를 빠르게 시작 가능
배치 그룹 (Placement Groups)
Placement Groups
•
EC2 인스턴스 배치를 구성하는 방법
3가지 유형의 배치 그룹
클러스터 배치 그룹
•
고성능 네트워크 연결로 이루어진 인스턴스 묶음
•
근접한 서버를 고속 네트워크로 연결하여 그룹화
•
네트워크 지연시간이 매우 짧음
•
짧은 대기시간이 필요한 고성능 컴퓨팅(HPC) 등에 적합
•
짧은 네트워크 지연 시간, 높은 네트워크 처리량 또는 대부분의 네트워크 트래픽이 그룹 내 인스턴스 간에 전송되는 경우에도 권장
파티션 배치 그룹
•
인스턴스 그룹을 하드웨어를 공유하지 않는 파티션 단위로 분할
•
EC2는 각 그룹을 파티션이라고 하는 논리 세그먼트로 나뉨
•
하드웨어를 파티션으로 그룹화
•
파티션끼리는 서로 다른 하드웨어 사용 (하드웨어를 공유하지 않음)
•
하나의 하드웨어 장애 발생시 다른 하드웨어에 영향이 없음 (파티션간 장애의 영향을 분리 가능)
•
하둡 등의 빅데이터 분산처리 시스템에 사용
•
파티션 배치 그룹은 가용 영역당 파티션을 최대 7개까지 가질 수 있음
분산형 배치 그룹
•
인스턴스 그룹을 별개의 서버랙 단위로 분할
•
같은 서버랙의 서버를 그룹화
•
분산 그룹의 서버는 다른 서버랙에 있음
•
분산 그룹끼리 서버랙을 공유하지 않으므로 서버랙에 장애 발생시 안전
•
매우 중요하고 고가용성이 필요한 애플리케이션에 적합
라이프 사이클
라이프 사이클
•
시작 (Start)
◦
인스턴스 전원을 켜는 것
•
재부팅 (Reboot)
◦
인스턴스를 재부팅
•
중지 (Stop)
◦
인스턴스 전원을 끄는 것
•
종료 (Termination)
◦
인스턴스 삭제
•
최대절전 모드 (Hibernate)
◦
RAM에 있는 애플리케이션 상태를 저장 후 중지상태 전환
◦
노트북에서 종료를 안하고 스크린만 닫을 때와 동일함
◦
서버 부팅시 프로세스 로드시간이 오래 걸리는 시스템의 경우 유용
ELB (Elastic Load Balancing)
ELB
확장성 (Scalability)
수직적 확장
•
자원을 추가하는 방식
•
EC2 인스턴스를 t2.micro에서 t2.large로 변경하는 것
Load Balancing 알고리즘
Round Robin (RR) / 라운드 로빈
현재 구성된 장비에 부하를 순차적으로 분산
Least Connection / 최소 접속 방식
현재 구성된 장비 중 가장 활성화된 세션 수가 적은 장비로 부하를 분삭
Weighted Round Robin / 가중치 기반 라운드 로빈
라운드 로빈 방식과 동일하지만 각 장비에 가중치를두어 가중치가 높은 장비에 부하를 더 많이 분산하는 방식
처리 용량이 다른 서버에 부하를 분산하기 위한 분산 알고리즘
Weighted Least Connection / 가중치 기반 최소 접속 방식
최소 접속 방식과 동일하지만 각 장비에 가중치를 부여해 가중치가 높은 장비에 부하를 더 많이 분산하는 방식
처리 용량이 다른 서버에 부하를 분산하기 위한 분산 알고리즘
Heah / 해시
해시 알고리즘을 이용한 부하 분산
수평적 확장
•
노드를 추가하는 방식
•
EC2 인스턴스 개수를 늘리는 것
•
탄력성이라고도 함애플리케이션 확장 방법으로 주로 사용됨
고 가용성
고 가용성
•
지속적으로 정상 운영이 가능한 상태
•
이중화
개요
•
트래픽을 분산하는 서비스
•
EC2 인스턴스, 컨테이너, IP 주소 등 여러 대상으로 자동으로 분산 가능
•
비정상 대상을 감지하면 해당 대상으로 트래픽 라우팅을 중단하고 대상이 다시 정상으로 감지되면 트래픽을 해당 대상으로 다시 라우팅
종류
ALB (Application Load Balancer)
•
Layer 7
•
HTTP, HTTPS
•
HTTP header Content를 사용하여 라우팅 요청 처리
•
웹 애플리케이션, 서비스에 적합
NLB (Netwrok Load Balancer)
•
Layer 4
•
TCP, UDP, TLS
•
Protocol, Port Number를 사용하여 라우팅 요청 처리
•
수백만의 대용량 트래픽 처리에 적합
GWLB (Gateway Load Balancer)
•
Layer 3 - Gateway Load Balancer Endpoint
•
Layer 4 - Gateway Load Balancer
•
Transparency한 네트워크 게이트웨이를 제공하므로 보안 검사를 위한 방화벽, IPS, IDS 등의 원본 패킷 의 데이터가 중요한 가상 어플라이언스에 적합
CLB (Classic Load Balancer)
•
Layer 4, Layer 7
•
HTTP, HTTPS, TCP, TLS
•
Protocol, Port Number를 사용해 라우팅 요청 처리
•
이전 세대 EC2-Classic 네트워크에서 사용
구성 (GWLB 제외)
ALB (Application Load Balancer)
ALB
•
HTTP / HTTPS 요청을 로드 밸런싱 해야 하는 경우 사용
•
웹 애플리케이션 처리에 적합
•
리스너 규칙을 기반으로 라우팅 설정이 가능함
•
데이터 전송 보안을 위한 HTTPS 프로토콜 사용시 SSL/TLS 인증서를 배포해야함
•
인증서는 ACM 사용 또는 클라이언트 인증서 사용 가능
Listener 규칙
•
Host header
◦
각 요청의 호스트 이름을 기반으로 라우팅
◦
aaa.example.com 또는 bbb.example.com
•
Path
◦
요청의 URL의 경로 기반으로 라우팅
◦
www.example.com/audio 또는 www.example.com/video
•
Http Header
◦
각 요청의 HTTP 헤더를 기반으로 라우팅
•
Http Request Method
◦
각 요청의 HTTP 요청 매서드를 기반으로 라우팅
•
Query String
◦
쿼리 문자열의 키/값 페어 또는 값을 기반으로 라우팅
•
Source IP
◦
각 요청의 소스 IP 주소를 기반으로 라우팅
NLB (Network Load Balancer)
NLB
•
TCP, UDP, TLS 요청을 로드 밸런싱 해야 하는 경우에 사용
•
고도의 성능이 요구되거나 대기 시간이 낮아야 하는 애플리케이션에 적합
•
게임 등의 수백만의 동시 사용자 처리에 적합
•
고정 IP 주소 할당 가능
•
클라이언트 IP 주소 전달 가능 (Source IP Preservation)
•
ALB 처럼 리스너 규칙 설정 없음
•
리스너 프로토콜은 TCP, TCP/UDP, UDP, TLS를 사용 할 수 있음
•
데이터 전송보안을 위한 TLS 프로토콜 사용시 SSL/TLS 인증서를 배포해야함
•
인증서는 ACM 사용 또는 클라이언트 인증서 사용 가능
TG (Target Groups)
TG
Target Type (대상 유형)
•
인스턴스
◦
EC2 Instance
◦
EC2 Auto Scaling Groups
•
IP 주소
◦
Local VPC CIDR
◦
Public IP 주소
◦
Fargate
•
Lambda
•
Application Load Balancer
Protocols
Protocols
•
ALB
◦
HTTP
◦
HTTPS
•
NLB
◦
TCP
◦
TLS
◦
UDP
◦
TCP_UDP
•
GWLB
◦
GENEVE
Health Checks (상태 검사)
Health Checks
•
등록된 대상(Target)에게 상태 확인 메시지를 보내서 대상의 상태를 확인
Health Checks 종류
ICMP (Internet Control Message Protocol)
VIP에 연결된 Real Server에 대해 ICMP(ping)로 Health Check를 수행하는 방법
단순히 서버가 살아 있는지 여부만 체크하는 방법
TCP Service Port
Load Balancer에 설정된 서버의 서비스 포트를 확인하는 방법
SYN, ACK를 받으면서 서버에 다시 ACK로 응답하고 FIN을 보내 Health Check를 종료합니다.
(3 Way-Handshake 방식)
TCP Service Port - Half Open
초기 3 Way-Handshake 방식
SYN을 보내고 SYN, ACK를 받지만 이후 ACK 대신 RST를 보내 세션을 끊습니다.
HTTP 상태코드
Load Balancer가 Server로부터 3 Way-Handshake를 거치고나서 HTTP를 요청해 정상적인 상태 코드를 응답하는지 확인하는 방법
콘텐츠 확인(문자열)
Load Balancer에 Server로 Content를 요청하고 응답받은 내용을 확인하여 지정된 Content가 정상적으로 출력됐는지 확인하는 방법
Attributes (속성)
Attributes - HTTP/HTTPS
•
등록 취소 지연 (Deregistration delay / Connecting Draining)
◦
Auto Scaling 축소 등으로 Deregistration 된 인스턴스에 더 이상의 요청을 보내지 않도록 하는 기능
◦
해당 인스턴스에 진행중인 요청이 있을 경우 설정해 놓은 시간동안 여결이 유효상태가 되지 않으면 해당 인스턴스에 연결 요청을 하지 않음
•
느린 시작 기간 (Slow start duration)
◦
기본적으로 대상은 대상 그룹으로 등록되자 마자 전체 요청 공유를 받기 시작하고 초기 상태 확인을 전달
◦
느린 시작 모드에서는 로드 밸런서가 대상으로 보낼 수 있는 요청의 수를 선형으로 증가
•
알고리즘
◦
라운드 로빈 (Round-Robin) : 일정 시간마다 라우팅을 변경
◦
최소 미해결 요청 (Least Outstanding Requests) : 처리하고 있는 요청이 가장 적은 대상에게 라우팅
•
고정 (Stickiness Sessions / Session Affinity)
◦
클라이언트가 세션을 유지한 상태라면 모든 요청을 동일한 인스턴스로 유지하는 기능
◦
세션 유지를 위해 쿠키를 사용하기에 클라이언트에서 쿠키를 지원해야함
◦
세션 데이터를 잃지 않으려는 상태정보를 유지하는 서버에 적합
Attributes - TCP/UDP/TLS
•
등록 취소 지연 (Deregistration delay)
◦
Auto Scaling 축소 등으로 Deregistration 된 인스턴스에 더 이상의 요청을 보내지 않도록 하는 기능
◦
해당 인스턴스에 진행중인 요청이 있을 경우 설정해 놓은 시간동안 여결이 유효상태가 되지 않으면 해당 인스턴스에 연결 요청을 하지 않음
•
등록 해제 시 연결 종료 (Connection Termination on deregistration)
◦
등록 취소 지연에 도달 했을 때 NLB가 활성 연결 종료
•
프록시 프로토콜 v2
•
클라이언트 IP 주소 보존 (Preserve client IP addresses)
◦
들어오는 모든 트래픽의 클라이언트 IP를 애플리케이션으로 전달
•
고정 (Stickiness Sessions / Session Affinity)
◦
클라이언트가 세션을 유지한 상태라면 모든 요청을 동일한 인스턴스로 유지하는 기능
◦
세션 유지를 위해 쿠키를 사용하기에 클라이언트에서 쿠키를 지원해야함
◦
세션 데이터를 잃지 않으려는 상태정보를 유지하는 서버에 적합
Auto Scaling
Auto Scaling
•
EC2 인스턴스르 자동으로 확장하고 축소하는 기능
•
사용자가 정의한 조정 정책에 따라 인스턴스 수가 증가되거나 축소됨
◦
서버의 로드가 증가하면 EC2 인스턴스 개수가 추가됨 (Scale out)
◦
서버의 로드가 감소하면 EC2 인스턴스 개수가 줄어듬 (Scale in)
구성요소
•
오토 스케일링 그룹
◦
EC2의 인스턴스 그룹
•
시작 템플릿
◦
EC2서버를 시작하기 위한 AMI
◦
인스턴스 유형 정보를 가진 템플릿
•
조정 옵션 (조정 정책)
◦
Auto Scaling을 실행하기 위한 조건
조정 정책
•
항상 현재 인스턴스 수준 유지 관리
◦
지정된 수의 실행 인스턴스를 항상 유지하도록 Auto Scaling 그룹을 구성
◦
인스턴스가 비정상 상태임을 확인하면 해당 인스턴스를 종료한 다음 새 인스턴스를 시작
•
수동 조정
◦
최대, 최소 또는 원하는 용량의 변경 사항만 지정하는 경우 사용
•
일정을 기반으로 조정
◦
확장 작업이 시간 및 날짜 함수에 따라 자동으로 수행됨
•
온디맨드 기반 조정
◦
수요 변화에 맞춰 Auto Scaling 그룹의 크기를 동적으로 조정
•
예측 조정 사용 (Predictive Scaling)
◦
머신러닝을 사용하여 CloudWatch의 기록 데이터를 기반으로 용량 필요량을 예측
동적 조정 (Dynamic Scaling)
•
대상 추적 조정 (Target Tracking Scaling)
◦
지정한 지표가 목표값을 초과할 때 한해서 Auto Scaling 그룹을 확장하는 방식
◦
CPU 평균 사용률, 네트워크 인터페이스에서 송/수신한 평균 바이트 수, 로드밸런서 요청 수 등의 지표 사용 가능
•
단계 조정 (Step Scaling)
◦
CloudWatch alarm의 지표를 기반으로 Auto Scaling 그룹을 확장하는 방식
◦
크기 조정 활동이 시작된 후 정책은 크기 조정 활동 또는 상태 확인 교체가 완료되고 휴지 기간 (Cooldown Period)이 끝날 때까지 기다린 후 추가 경보에 응답
•
단순 조정 (Simple Scaling)
◦
CloudWatch alarm의 지표를 기반으로 Auto Scaling 그룹을 확장하는 방식
◦
크기 조정 활동 또는 상태 확인 교체가 진행 중인 동안에도 정책이 추가 경보에 계속 응답
•
Amazon SQS 기반 크기 조정
◦
Amazon SQS 대기열의 시스템 로드 변경에 따라 Auto Scaling 그룹을 조정
조정 휴지 (Scaling Cooldowns)
•
EC2가 증가 또는 감소하는 활동이 발생하면 조정 휴지 시간 (Cooldown Period)을 가짐
•
디폴트 조정 휴지 기간은 300초
•
조정 휴지 기간 동안 Auto Scaling Group은 EC2를 종료하거나 시작하지 않음
•
EC2 인스턴스가 처음 시작된 다음 안정적인 서비스 상태가 될 때까지 시간이 소요됨
•
EC2가 안정적인 서비스 상태가 될 때까지 스케일링을 하지 않도록 차단하는 역할을 함
•
불필요한 EC2 인스턴스가 생성되거나 종료되는 것을 방지하는 기능
수명 주기 후크
•
Auto Scaling 인스턴스 수명 주기의 이벤트를 인식한 다음 해당 수명 주기 이벤트가 발생할 때 사용자 지정 작업을 수행
•
인스턴스가 In Service 상태에 가기 전에 추가적인 작업을 수행할 수 있음 (Pending State)
•
인스턴스가 Terminated 상태에 가기 전에 추가적인 작업을 수행할 수 있음 (Terminating State)
•
예시
◦
인스턴스 시작 및 종료 시 감사 시스템에 데이터를 보내 사용자 지정 스크립트 실행
Instance Store
•
블록 수준의 임시 스토리지
•
특정 인스턴스 유형은 Instance Store라고 하는 스토리지를 가지고 있음
•
Instance Store는 서버에 직접 장착되어 있는 물리적 SSD 또는 HDD 스토리지
•
Instance Store는 IOPS 성능이 매우 높은 고성능 스토리지
•
인스턴스를 중지하거나 최대 절전 모드로 전환하거나 종료하면 Instance Store의 모든 스토리지 블록이 리셋됨
•
임시 파일을 보관하는 가장 빠른 성능의 저장 옵션
•
Instance Store는 EC2 인스턴스가 종료되면 데이터가 삭제되므로 영구적인 저장소가 아닌 고성능을 요구하는 애플리케이션의 임시 저장소로 적합
•
중요한 장기 데이터의 경우 S3, EBS, EFS 등의 데이터 스토리지를 사용































