Amazon EC2 기초

Amazon Elastic Compute Cloud(EC2)는 안전하고 크기 조정이 가능한 컴퓨팅 파워를 클라우드에서 제공하는 웹 서비스입니다. 개발자가 더 쉽게 웹 규모의 클라우드 컴퓨팅 작업을 할 수 있도록 설계되었습니다.
EC2의 장점
- 초 단위 온디맨드 가격 모델
- 온디맨드 모델에서는 가격이 초 단위로 결정
- 서비스 요금을 미리 약정하거나 선입급이 필요 없음
- 빠른 구축 속도와 확장성
- 몇 분이면 전 세계에 인스턴스 수 백여대를 구축 가능
- 다양한 구성 방법 지원
- 머신러닝, 웹 서버, 게임 서버, 이미지 처리 등 다양한 용도에 최적화된 서버 구성 가능
- 다양한 과금 모델 사용 가능
- 여러 AWS 서비스와 연동
- 오토 스케일링, Elastic Load Balancer(ELB), CloudWatch
EC2의 사용 사례
- 데이터베이스
- 웹 서버
- 머신 러닝
- 어플리케이션의 백엔드 서버
- 데이터 프로세싱
- 기타 서버가 필요한 모든 작업
EC2 인스턴스
EC2 인스턴스란?
- EC2에서 컴퓨팅을 담당
- 다양한 유형과 크기로 구성
- 저장을 담당하는 EBS와 네트워크로 연결
- 저장 방법에 따라 두 가지로 분류
- 하나의 가용영역(AZ)에 존재
인스턴스 유형(패밀리)
- 인스턴스의 역할에 따라 CPU, 메모리, 스토리지, 네트워크 등을 조합한 구성
- 각 인스턴스 유형 별로 사용 목적에 따라 최적화
- 예: 메모리 위주, CPU 위주, 그래픽 카드 위주 등등
- 유형 별로 이름 존재
- 예: t유형, m유형, inf유형 등
- 같은 유형의 인스턴스들을 인스턴스 패밀리라 부름
- 타입 별 세대 별로 숫자 부여
- 아키텍쳐 및 프로세서/추가기술에 따라 접미사
- c7gn = c인스턴스 중 AWS Gravition 프로세서를 사용(g) + Network Optimized(n) = c7gn

인스턴스 크기
- 같은 인스턴스 패밀리에서 다양한 크기가 존재
- 인스턴스의 cpu 갯수, 메모리 크기, 성능 등으로 크기 결정
- 크기가 클수록 더 많은 메모리, 더 많은 CPU, 더 많은 네트워크 대역폭, EBS와의 통신 가능한 대역폭을 가짐

EBS와 AMI
Amazon EBS

Amazon Elastic Block Store(EBS)는 AWS 클라우드의 Amazon EC2 인스턴스에 사용할 영구 블록 스토리지 볼륨을 제공합니다. 각 Amazon EBS 볼륨은 가용 영역 내에 자동으로 복제되어 구성요소 장애로부터 보호해주고, 고가용성 및 내구성을 제공합니다.
EBS란?
- 가상 하드드라이브
- EC2 인스턴스가 종료되어도 계속 유지 가능
- 루트 볼륨으로 사용 시 EC2가 종료되면 같이 삭제됨
- 단 설정을 통해 EBS만 따로 존속 가능
- 용량을 범위에 따라 자유롭게 설정 가능
- 특수하게 하나의 EBS를 여러 EC2로 장착 가능한 경우도 있음(EBS Multi Attach)
- EC2 인스턴스와 같은 가용영역에 존재. 즉, 하나의 가용영역 안에서만 존재
- 가용영역 안에 자동으로 분산 저장: 99.999% 가용성 목표
EBS 유형
- 범용(General Purpose or GP): SSD
- 프로비저닝 된 IOPS(Provisioned IOPS or io): SSD
- 쓰루풋 최적화(Throughput Optimized HDD or st): HDD
- 콜드 HDD(sc): HDD
- 네틱(Standard): HDD

스냅샷
- EBS의 특정 시점을 저장한 이미지
- 이후 EBS로 다시 복구 가능
- EBS의 백업 용도로 활용 가능
- 증분식: 바뀐 부분만 저장
- 100gb 볼륨의 스냅샷을 5번 찍어도 500gb가 아닌 100gb+4번의 변경 부분만 저장
- 비용 역시 최적화
- S3에 저장: 99.999999999% 내구성
- Data Lifecycle Manager / AWS Backup 등으로 자동화해서 생성 가능
- 기타 여러 기능
- 암호화
- 아카이브: 더 적은 비용으로 저장할 수 있으나 몇 가지 제약사항 적용
- 최소 90일 이상 저장
- 복원에 최대 72시간 소요
- 공유: 다른 계정 등에 공유 가능
- EBS Direct API를 활용해서 스냅샷에 직접 내용을 쓰거나 읽기 가능
AMI
AMI(Amazon Machine Image)란?
- EC2 인스턴스를 실행하기 위해 필요한 정보를 모은 템플릿
- 구성
- 1개 이상의 EBS 스냅샷
- 사용 권한(어떤 AWS 어카운트가 사용할 수 있는지)
- 블록 디바이스 맵핑(EC2 인스턴스를 위한 볼륨 정보 = EBS가 무슨 용량으로 몇 개 붙는지)
- 필요에 따라 Private으로 가지고 있거나 Public으로 공개 가능
인스턴스 저장 유형에 따른 AMI의 생성 방법
- EBS: 스냅샷을 기반으로 루트 디바이스 생성
- 인스턴스 저장: S3에 저장된 템플릿을 기반으로 생성
Amazon EC2 요금 모델 기초
EC2 요금모델
- On-Demand: 사용한 시간 만큼만 요금 지불
- Reserved Instances: 인스턴스 사용 기간을 약정
- Savings Plan: AWS의 컴퓨팅 사용량을 약정
- Spot Instances: 남는 인스턴스를 저렴하게 사용
- Dedicated: 물리적인 전용 인스턴스 임대
- Dedicated Instance / Dedicated Host
온디맨드(On-Demand)
- 실행하는 인스턴스에 따라 초당 혹은 시간 당 컴퓨팅 파워로 측정된 가격을 지불
- 약정 필요 없음
- 수요 예측이 힘들거나 유연하게 EC2를 사용하고 싶을 때
- 한번 써보고 싶을 때
예약 인스턴스(Reserved Instances)
- EC2 인스턴스를 일정 기간 약정하여 요금을 할인 받는 방식
- 온디맨드 EC2 사용 요금을 할인 받는 방식으로 적용
- 할인 받고 싶은 EC2 인스턴스와 같은 리전, 유형 구매 필요
- 약정 기간이 길 수록 더 큰 할인율 적용
- 최대 72% 저렴
Savings Plan
- 컴퓨팅 파워의 사용량을 약정하는 요금 모델
- 종류
- Compute Savings Plans: 다른 서비스(Lambda, Fargate 등과 같이 사용)와 같이 약정
- EC2 Instance Savings Plans: EC2 인스턴스 패밀리를 지정해서 약정
- 최대 72% 저렴
스팟 인스턴스(Spot Instance)
- AWS에서 보유중인 남는 인스턴스를 저렴한 가격으로 제공
- 가용영역 별, 인스턴스 유형 별 다른 풀로 관리
- 최대 90%까지 절약 가능
- 가격을 상황에 따라 변동. 단, 항상 가격은 On-Demand 이하를 보장
- 단, 인스턴스가 언제 종료될지 예측 불가능(Spot Instance interruption)
전용 인스턴스(Dedicated Instance)
- 물리적으로 인스턴스/호스트 단위로 격리된 서버에서 EC2를 실행
- 주로 라이선스 이슈/퍼포먼스 이슈를 해결하기 위해서 활용
보안 그룹
보안 그룹은 인스턴스에 대한 인바운드 및 아웃바운드 트래픽을 제어하는 가상 방화벽 역할을 합니다.
보안 그룹이란?
- EC2의 방화벽 역할을 하는 서비스
- Port 허용
- 기본적으로 모든 포트는 비활성화
- 선택적으로 트래픽이 지나갈 수 있는 Port와 Source를 설정 가능
- Deny는 불가능
- 인스턴스 단위
- 하나의 인스턴스에 하나 이상의 보안 그룹 설정 가능
- 인스턴스에 여러 보안 그룹이 적용될 경우 모든 보안 그룹의 규칙을 적용 받음
실습 - EC2로 웹서버 만들기
EC2 구축하기
- 리전 선택 후 EC2 메뉴로 접속

- 인스턴스 시작

- 이름, AMI, 인스턴스 유형, 키페어, 네트워크 설정, 스토리지 구성 등 설정
※ 웹 서버에 접속하기 위해 HTTP 트래픽 허용

AMI 생성

EC2 접속 방법
SSH 연결

FTP 연결

* SSH 키 페어
- 인스턴스에 연결할 때(SSH/FTP) 자격 증명 입증에 사용하는 보안 자격 증명 집합
- 프라이빗 키와 퍼블릭 키로 구성
- 다시 발급 불가능
- 분실 시 EBS를 분리해 다른 인스턴스에 연결 혹은 스냅샷을 통해 재생성 필요
- 리전 단위
- 다른 리전에서 사용하기 위해서는 import 필요
EC2 인스턴스 연결

EC2 직렬 콘솔 연결

실습 - FTP 연결
- EC2 시작하기
- 키 페어 생성

- FTP 새 사이트 연결

- 프로토콜: SFTP
- 호스트: public IPv4
- 로그온 유형: 키 파일
- 사용자: ec2-user
- 키 파일: 생성한 키 파일(.pem) 선택
- /var/www/html 경로에 인덱스 파일 붙여넣기

실습 - 직렬 콘솔 연결
- EC2 시작하기
- Manage access 허용

- password 셋업
a. EC2 인스턴스 연결
b. sudo -s
c. sudo passwd root
- EC2 직렬 콘솔 연결
EC2 생명 주기

- 중지
- 중지 중에는 인스턴스 요금 미청구
- 단 EBS 요금, 다른 구성요소(Elastic IP 등)는 청구
- 중지 후 재시작 시 퍼블릭 IP 변경
- EBS를 사용하는 인스턴스만 중지 가능 = 인스턴스 저장 인스턴스는 중지 불가
- 재부팅
- 최대 절전모드
- 메모리 내용을 보존해서 재시작 시 중단 지점에서 시작할 수 있는 정지모드
ENI와 Elastic IP
ENI

ENI(Elastic Network Interface)는 VPC에서 가상 네트워크 카드를 나타내는 논리적 네트워킹 구성 요소입니다.
ENI란?
- EC2의 가상의 랜카드
- IP 주소와 Mac 주소를 보유
- 하나의 인스턴스에 여러개의 ENI를 연동 가능
- 하나의 인스턴스가 한 개 이상의 ip를 보유 가능
- 인스턴스 유형 및 사이즈에 따라 최대 보유 가능한 IP 주소가 변동
- 내부적으로 보안 그룹은 ENI에 부착
탄력적 IP(Elastic IP)
탄력적 IP란?
- EC2의 퍼블릭 IP를 고정해주는 서비스. 즉, 인스턴스를 중지해도 재시작 시 고정적인 IP를 확보 가능
- EC2 이외에 다른 서비스(예:NLB)에도 사용
- 내가 보유한 IP 주소를 AWS에서 사용 가능
- 리전 단위
- 연결하지 않아도 보유하기만 해도 비용 발생(IPv4 비용 발생)
실습 - 탄력적 IP 생성하기
- 탄력적 IP 주소 할당

- 탄력적 IP 주소 연결

- 인스턴스 연결

EC2 UserData
- EC2 인스턴스의 최초 실행 시 지정한 스크립트 실행 가능
- 별도 설정을 통해서 재부팅 마다 실행하도록 설정 가능
- 두 가지 모드
- Shell Script
- cloud-init: 리눅스 이미지의 부트스트래핑을 위한 오픈소스 어플리케이션
- 주요 사용 사례
- EC2 인스턴스 설정(보안 설정, 인스턴스 설정 등)
- 외부 패키지 다운로드
- 설치 어플리케이션 실행
- 기타 EC2 실행 시 필요한 동작

인스턴스 메타데이터는 실행 중인 인스턴스를 구성 또는 관리하는 데 사용될 수 있는 인스턴스 관련 데이터입니다. 인스턴스 메타데이터는 호스트 이름, 이벤트 및 보안 그룹과 같은 범주로 분류됩니다.
EC2 Instance Metadata란?
- EC2 인스턴스의 속성 및 정보 데이터
- AMI ID, IPv4/IPv6주소, EBS 맵핑, 보안 그룹 연동상황, IAM 역할 연동 등
- 실행중인 EC2 인스턴스의 메타데이터 IMDS(Instance Metadata Service)로 조회 가능
- HTTP Endpoint 지원
- IP주소: 169.254.169.254(IPv4), fd00:ec2::254(IPv6)
- 두 가지 모드
- IMDS v1: Request/Response 기반
- IMDS v2: 세션 기반(default)
- 주요 사용 사례
- 인스턴스 별 설정, IAM 임시 자격증명 조회 등(AWS CLI, SDK 등이 내부적으로 활용)
- EC2 실행 시 메타데이터 액세스 가능 여부 설정 가능
- 가격: 무료
Instance Metadata Service V1
- 별도의 보안 인증이 필요 없는 Request/Response 기반
- Link Local IP(169.254.169.254)를 사용하기 때문에 해당 EC2 인스턴스에서만 요청 가능
- CloudWatch Metric을 활용해서 조회 횟수 기록 가능
- 인스턴스 이름 가져오기 예시
curl http://169.254.169.254/latest/meta-data/tags/instance/Name
Instance Metadata Service V2
- 보안 토큰을 발급 받아 요청할 때 마다 토큰을 사용해 인증하는 세션 방식
- IMDSv1보다 더 높은 보안 수준 제공
- IAM 정책 등을 활용하여 EC2 인스턴스가 IMDSv2를 사용하도록 강제 가능
- 예시
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds:21600"`
curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/metadata/tags/instance/Name
실습 - 메타데이터 액세스 활성화 및 Userdata 등록
- EC2 시작하기
- 고급 세부 정보
- 메타데이터 액세스 활성화 및 버전(V2) 선택(default)

- 사용자 데이터 등록

EC2 권한 부여
IAM 자격 증명을 등록
- IAM 사용자를 생성하고 IAM 자격 증명을 발급 받아 EC2에 등록
- AWS Configure를 통해 자격 증명을 파일로 등록(~/.aws/credentials)
- 관리가 어렵고 바꾸기 힘듦
IAM 역할을 부여
- 권한이 부여된 IAM 역할을 만들고 EC2에 부여
- 관리가 쉽고 교체가 쉬움
- 내부적으로 지속적으로 자격 증명을 변경
실습 - IAM 역할을 사용하여 EC2 권한 부여하기
- IAM 역할 생성

- 사용 사례 EC2 선택 후 권한 선택하여 생성

- EC2 인스턴스 시작
- 고급 세부 정보에서 IAM 인스턴스 프로파일 선택

참고
https://www.inflearn.com/course/%EC%89%BD%EA%B2%8C-%EC%84%A4%EB%AA%85%ED%95%98%EB%8A%94-aws-%EA%B8%B0%EC%B4%88/dashboard