EC2는 Elastic Compute Cloud의 약자로 AWS에서 제공하는 IaaS 이다. 그리고 EC2는 하나의 서비스가 아니다. 높은 수준에서 보면 많은 것을 포함하고 있다.
이전에 클라우드는 필요할 때마다 언제든지 컴퓨팅을 대여할 수 있다고 했는데 EC2가 바로 그 예시이다.
여기서 기억해야 할 핵심은 사용자가 원하는 대로 가상 머신을 선택하여 AWS에서 빌릴 수 있다는 것이다. 이것이 클라우드의 힘이다.
EC2 사용자 데이터 스크립트를 사용하여 인스턴스를 부트스트래핑할 수 있다.
부트스트래핑이란 머신이 작동될 때 명령을 시작하는 것을 말한다. 스크립트는 처음 시작될 때 한 번만 실행되고 다시 실행되지 않는다.
따라서 EC2 사용자 데이터에는 매우 특정한 목적이 있다. 부팅 작업을 자동화하기 때문에 부트스트래핑이라는 이름을 갖게 된다. 사용자가 원하는 것은 뭐든지 할 수 있지만, 사용자 데이터 스크립트에 작업을 추가할수록 부팅 시 인스턴스가 할 일이 늘어난다.
참고로 EC2 사용자 데이터 스크립트는 루트 계정에서 실행되기 때문에 모든 명령문은 sudo 로 해야 한다.
EC2에는 다양한 사례에서 사용 가능한 여러 유형의 인스턴스가 있으며 최적화 유형도 각기 다르다.
https://aws.amazon.com/ec2/instance-types/에서 EC2 인스턴스의 유형과 요금 및 특성을 확인할 수 있다.
m5.2xlarge 인스턴스를 예시로 다음과 같은 뜻이 있다.

범용의 인스턴스는 M, T로 시작하는 이름을 가지고 있으며 웹 서버나 코드 저장소 같은 다양한 작업에 적합하다. 컴퓨팅, 메모리, 네트워킹 간의 균형도 잘 맞는다.

컴퓨팅 최적화 인스턴스는 C로 시작하는 이름을 가지고 있으며 컴퓨터 집약적인 작업에 최적화된 인스턴스이다.
고성능 프로세서는 일부 데이터의 일괄 처리에 사용하거나 미디어 트랜스코딩 작업 시 혹은 고성능 웹 서버가 필요하거나 HPC(고성능 컴퓨팅) 작업을 할 때 그리고 머신 러닝이나 전용 게임 서버가 있을 때 사용한다. 이는 모두 훌륭한 CPU와 컴퓨팅을 요구하는 작업이며 EC2 인스턴스는 이런 특성을 가지고 있다.

메모리 최적화 인스턴스는 RAM을 나타내는 R로 시작하거나 X1, Z1 등으로 시작하는 이름을 가지고 있으며 메모리에서 대규모 데이터셋을 처리하는 유형의 작업에 빠른 성능을 제공한다.
대부분 인 메모리 데이터베이스가 되는 고성능의 관계형 또는 비관계형 데이터베이스에 사용하고 분산 웹스케일 캐시 저장소에도 사용한다. 또, BI(비즈니스 인텔리전스)에 최적화된 인 메모리 데이터베이스와 대규모 비정형 데이터의 실시간 처리를 실행하는 애플리케이션에도 사용한다.

스토리지 최적화 인스턴스는 I, D, H1으로 시작하며 로컬 스토리지에서 대규모의 데이터셋에 액세스할 때 적합한 인스턴스이다.
주로 고주파 온라인 트랜잭션 처리인 OLTP 시스템에 사용되며 관계형과 비관계형인 NoSQL 데이터베이스에 사용된다. 예를 들어 Redis같은 메모리 데이터베이스의 캐시나 데이터 웨어하우징 애플리케이션과 분산 파일 시스템에 사용된다.
instances.vantage.sh에서 전체 EC2 인스턴스를 비교한 것을 볼 수 있다.
보안 그룹은 AWS 클라우드에서 네트워크 보안을 수행하는 것에 있어 기본이 되는 것이다. 이 그룹은 EC2 인스턴스 안팎으로 트래픽이 허용되는 방식을 제어한다.
보안 그룹은 IP 주소(컴퓨터의 출발지)를 기준으로 규칙을 설정하며 여기에는 허용 규칙만 포함되어 있어서 무엇이 들어가고 나갈 수 있는지를 정할 수 있다. 또는 다른 보안 그룹을 참조하여 설정할 수 있다.
좀 더 자세히 말하자면 보안 그룹은 EC2 인스턴스의 방화벽이며 승인된 IP 범위와 포트에 대한 액세스를 규제한다. 또한 인바운드와 아웃바운드 네트워크를 제어한다.
인바운드 네트워크: 외부에서 인스턴스로 들어오는 것
아웃바운드 네트워크: 인스턴스에서 외부로 나가는 것

보안 그룹 규칙을 보면 유형, 프로토콜, 포트 범위, 소스, 설명으로 나뉘어져 있는 것을 볼 수 있다. 현재 선택한 유형은 SSH이고 프로토콜은 TCP이다. 포트는 트래픽이 인스턴스에서 통과할 수 있도록 허용하는 것이고, 소스는 IP 주소 범위를 나타내며 0.0.0.0/0 은 모든 IPv4에서 허용한다는 것을 의미한다(IPv6의 경우 ::/0).
보안 그룹 규칙 예시
소스에 본인의 공인 IP 주소가 적혀 있다고 가정해보자.내 컴퓨터에서 인스턴스에 접속하려고 할 때 22번 포트에서 인증을 받게 된다. 이때 나의 IP는 규칙에 허용되어 있기 때문에 컴퓨터에서 EC2 인스턴스로 트래픽이 이동할 수 있다.
하지만 친구 집에서 인스턴스에 접속하려고 하면 친구의 IP는 허용하지 않았기 때문에 방화벽이 차단하고 타임아웃이 되어 통과하지 못하게 된다.
위에 나와 있지는 않지만 아웃바운드 규칙의 경우 기본적으로 모든 보안 그룹에 대한 EC2 인스턴스가 모든 트래픽이 나가는 것을 허용하게 한다. 따라서 EC2 인스턴스가 웹사이트에 액세스하여 연결을 시작하려고 하면 보안 그룹에서 허용하게 된다.
다른 보안 그룹의 보안 그룹을 참조하는 방법
A라는 이름을 가진 인스턴스가 있고, 여기에는 보안 그룹 1과 보안 그룹 2를 승인하는 보안 그룹 0이 있다고 가정해보자.이때 B라는 이름을 가진 인스턴스가 보안 그룹 1번이 연결되어 있다면 B 인스턴스는 포트를 통해 A 인스턴스로 직접 연결할 수 있다. 마찬가지로 C라는 이름을 가진 인스턴스가 보안 그룹 2번과 연결되어 있다면 C 인스턴스는 포트를 통해 A 인스턴스로 직접 연결할 수 있다.
따라서 인스턴스의 IP와 관계없이 올바른 보안 그룹이 연결되어 있기 때문에 다른 인스턴스와 직접 통신할 수 있다. (항상 IP를 생각하지 않아도 됨)
하지만 D라는 인스턴스가 보안 그룹 3번과 연결되어 있다면 보안 그룹 3은 보안 그룹 0의 인바운드 규칙에서 승인되지 않았기 때문에 거부되고 작동되지 않는다.
EC2 인스턴스에 연결한다. SSH, PuTTY, EC2 Instance Connect 어떤 방법이든지 상관 없음AWS CLI가 설치되어 있는지 확인한다.aws --version 으로 확인할 수 있다.AWS CLI를 포함하고 있다.IAM 페이지로 이동 후 역할 탭으로 이동한다.EC2 페이지로 이동한 뒤 역할을 연결하고자 하는 EC2 인스턴스를 선택하고 우측 상단 작업 을 누르고 보안 > IAM 역할 수정 을 누른다.인스턴스 역할 추가를
aws configure을 통해 설정하면 안되는 이유
해당 명령어를 통해 EC2 인스턴스에 상세 개인 정보를 입력해두면 계정 상의 누구라도 인스턴스에 접속해서 입력된 자격 증명 정보를 회수할 수 있게 된다.
us-east-1의 M5 유형 인스턴스 제품군m5.xlarge, m5.2xlarge 모두 가능)Linux 와 Windows 간 전환 가능)Host, Dedicated, Default 전환 가능)전용 호스트와 전용 인스턴스에 대한 자세한 내용: https://blog.naver.com/techtrip/222638353175
EC2 인스턴스 구매 옵션에 대한 간단한 예시
- 온디맨드: 언제든지 리조트에 방문할 수 있고 원할 때 전체 요금을 지불
- 예약 인스턴스: 아주 오랜 기잔 리조트에 머무르기로 미리 계획하는 것
- 오랫동안 머물기 때문에 할인을 많이 받을 수 있음
- Savings Plans: 리조트에서 일정 금액을 지출하기로 하는 대신 시간에 따라 방을 바꿀 수 있음
- 앞으로 12개월 동안 매달 300달러 씩 지불하기로 약정
- 즉, 리조트에서 일정 금액을 지출하기로 약정하는 것
- 스팟 인스턴스: 리조트에서 제공하는 마감 할인
- 리조트의 빈 객실에 대해 사람들이 가격 입찰을 해서 크게 할인 받을 수 있음
- 단, 누군가 사용자보다 객실비를 더 많이 지불하기로 하면 언제든 쫒아낼 수 있음
- 전용 호스트: 리조트 건물 전체를 예약하는 것.
- 자신만의 하드웨어인 리조트를 가지게 되는 것과 같음
- 용량 예약: 객실을 예약하고 싶은데 숙박 여부는 확실하지 않은 것.
- 하지만 원할 때는 머물 수 있으며 그래서 숙박 여부와 관계 없이 전체 가격을 지불한다.