EC2(Elastic Compute Cloud)는 안전하고 크기 조정이 가능한 컴퓨팅 파워를 클라우드에서 제공하는 웹 서비스이다. 이는 다양한 OS환경을 제공하는 가상 서버 서비스이며, AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공한다.
AMI는 한마디로 'EC2 인스턴스를 커스텀화한 것'이라 할 수 있겠다. 이는 소프트웨어 구성이 기재된 템플릿으로, EC2 인스턴스를 실행하기 위해 필요한 정보(OS, 아키텍처 타입, 저장공간 용량 등)를 모은 단위이다. 이 템플릿을 통해 여러 인스턴스 실행도 가능해진다. AMI를 별도로 구성한다면 사용자가 필요한 소프트웨어를 미리 패키징 해놓기 때문에 부팅 및 설정에 드는 시간을 줄일 수 있는 장점이 있다.
EC2 사용자 데이터 스크립트를 사용하여 미리 설정해 놓은 명령을 머신 작동 시작시 실행할 수 있게 한다. 스크립트는 처음 시작시 한 번만 실행된다.
AMI의 사본으로 클라우드에서 사용하는 가상 서버이며, CPU, 메모리, 그래픽카드 등 연산을 위한 하드웨어를 담당한다.
Property | Representation |
---|---|
AMD | a |
Graviton2 | g |
Local NVMe SSD | d |
High networking(100Gbps) | n |
Extra capacity | e |
최적의 인스턴스 찾기
Cost Explorer나 AWS Compute Optimizer 서비스는 각각 메모리 사용 기반, 머신러닝 기반의 최적의 인스턴스를 추천해준다.
EBS 볼륨을 루트로 사용하는 인스턴스만 정지 가능하다. 인스턴스 내 저장 기반의 AMI를 사용할 경우 정지 시 정보가 삭제된다.
Elastic IP를 사용하지 않는 경우, 인스턴스 정지 후 재시작시 공인 IP가 변경됨에 유의한다.
주로 IaaS에서 사용하며, SSH 접속 시 Key Pair라고 하는 퍼블릭 키 암호화 기법을 사용하여 접속하며 로그인 정보를 암호화 및 해독한다. Key Pair 분실 시 접속 불가하며, 접속 시 OS별로 접속 name이 다르다. 예를 들어, Linux의 경우 ‘ec2-user’와 같은 사용자가 기본으로 생성된다.
EC2에 설정되는 네트워크 인터페이스의 공인 IP로, 기본적인 Public IP, Private IP와는 별개의 개념이다.
프리티어의 경우 사용하지 않더라도 요금이 부과되므로 유의한다.
EC2 인스턴스 생성시 클라이언트에서 인스턴스에 접속하기 위한 용도로 키를 생성할 수 있다. 퍼블릭 키는 EC2 인스턴스에 저장하고 프라이빗키는 사용자에게 제공하여 사용자는 클라이언트 터미널을 통해 프라이빗 키를 사용하여 인스턴스에 SSH 기반으로 접속할 수 있다. ⇒ 사용자의 프라이빗 키 관리 부담 발생
분류 | SSH | EC2 인스턴스 연결 | Session Manager | EC2 직렬 콘솔 |
---|---|---|---|---|
인증 방법 | 키파일 | IAM | IAM | IAM/Password |
감사방법 | 감사 불가 | 연결 기록만 가능 | 연결 기록 및 세션 로그(CloudWatch) 가능 | 연결 기록만 가능 |
요구사항 | 인터넷 연결 | 인터넷 연결 에이전트 설치 | 에이전트 설치 | 지원하는 인스턴스 타입에 맞게 설정 / 루트 패스워드 세팅 |
목적 | SSH 통신 | SSH 통신 | SSH 통신 | 부팅/네트워크 문제 해결 |
비고 | 키 관리 필요 | SCP로 파일 전송 가능 | 루트 패스워드 관리 필요 |
EC2에 SSM Agent를 설치하여 SSM을 통해 접근하여, 별도의 Bastion Host, Inbound 정책 설정, SSH 키 관리 없이 EC2 인스턴스에 접근할 수 있다. AWS API를 기반으로 인스턴스와 통신한다.
별도의 Agent 설치 필요없이 임시 SSH 키를 EC2에 할당하는 방법으로 EC2 인스턴스에 접속하며, EIC(EC2 instance connect) 에이전트 설치가 필요하다. EIC를 활용하기 위해 EIC 엔드포인트를 생성하며 권한이 있는 사용자만이 AWS CLI를 통해 인스턴스에 접속할 수 있다.
EC2 인스턴스에 임시 블록 수준 스토리지를 제공한다. 인스턴스 종류에 따라 지원 가능하며, 인스턴스가 실행되는 물리 호스트에 연결된 스토리지 공간을 사용하게 된다. 인스턴스 재가동 시 늘 동일한 호스트에 배치되지 않기 때문에 인스턴스와 동일한 수명을 가진다.
한마디로 '인스턴스 종료 후에도 데이터를 지속할 수 있게 하는 저장 공간'이라 할 수 있겠다. EBS란 EC2에서 사용하도록 설계된 영구 지속 블록 스토리지 서비스로, EBS 볼륨을 활용하여 파일 시스템을 생성하거나 블록 디바이스 자체로 활용할 수 있으며 하나의 EBS 볼륨은 하나 이상의 EC2 인스턴스에 연결된다.
비용 효율적이며, 낮은 대기 시간을 제공한다.
시스템 부팅 볼륨, 가상 데스크톱, 개발 및 테스트 환경에 사용할 수 있다.
크기가 1GB에서 16TB까지 다양하다.
버전 | gp2 | gp3 |
---|---|---|
IOPS | 최대 3000IOP까지 버스트 성능 제공 | 3000~16000IOPS |
처리량 | 초당 125~1000MB의 처리량 | |
상관 관계 | 1GB 당 3IOP 증가 | IOP와 처리량은 독립적 |
특징
가장 높은 성능의 SSD 볼륨
미션 크리티컬, 저지연, 고처리량 작업 수행
지속적인 IOPS 성능이 필요한 중요한 애플리케이션이나 16,000 이상의 IOPS가 필요한 경우에 사용
EBS 다중 연결이 가능하다.
버전 | io1 | io2 |
---|---|---|
IOPS | 64000(Nitro EC2)/32000(Other) | 256,000 |
처리량 | 4GB~16TB | 4GB~64TB |
비고 | 스토리지 크기와 별도로 프로비저닝된 IOPS를 늘릴 수 있다. | 서브 밀리초 대기 시간 발생, IOPS 대 GB 비율 1000:1 |
IOPS
I/O Ops Per Sec로 처리량 및 초당 입출력 작업 수를 의미한다.
gp2/gp3/io1/io2만이 부팅 볼륨으로 쓰인다.
하나의 EBS 볼륨을 동일한 가용영역(Availability Zone) 내의 최대 16개의 EC2 인스턴스에 동시에 연결할 수 있게 해주는 기능
한마디로 'EBS의 특정 시점에 사진을 찍어논 것'이라 할 수 있겠다.
특정 시간의 EBS 상태의 저장본으로, 필요 시 이 스냅샷을 통해 특정 시각의 EBS를 복구할 수 있다.
인스턴스에 역할을 부여할 수 있다. 예를 들어, IAMReadOnlyAccess 권한 정책을 지닌 역할을 부여한다면 해당 인스턴스에서는 iam 사용자 목록을 확인할 수 있을 것이다.
보안 그룹은 인스턴스에 대한 인바운드 및 아웃바운드 트래픽을 제어하는 '가상 방화벽' 역할을 한다. 인스턴스 접속 시 타임아웃 에러를 마주한다면, 거의 99.9999% 보안 그룹 설정과 관련이 있을 것이다.
필수 암기 포트
22(SSH):리눅스 인스턴스용 SSH
3389(RDP, Remote Desktop Protocol): 윈도우 인스턴스용 SSH
Elastic Load Balancing(ELB)를 통해 여러 인스턴스에 네트워크 트래픽을 분산할 수 있으며, 4가지 유형의 로드 밸런서를 지원한다.
정의된 일부 조건에 따라 애플리케이션의 부하를 처리하기 위해 EC2 인스턴스를 자동으로 추가 또는 제거하여 애플리케이션 가용성을 유지하는 데 도움이 되는 완전 관리형 서비스이다. 서비스를 통해, 변화하는 수요에 동적으로 대응하고 비용을 최적화할 수 있다.
EC2의 가격모델은 EBS와는 별도이며, EBS는 사용한 만큼 지불하는 방식이다. 한편, 기타 데이터 통신 등의 비용은 별도로 지불해야 한다.
도움되는 영상
AWS 강의실 - 쉽게 설명하는 AWS 기초 강좌 8: EC2(2)-EC2의 가격모델(EC2를 사용하면 돈을 어떻게 내야 하나?)
Option | Description | Remark |
---|---|---|
On-demand | 정기 약정 없이 시간 또는 초 단위로 컴퓨팅 용량 비용을 지불하는 방식으로, 장기적인 예측이 힘들거나 유연하게 사용하는 경우 선택한다. | |
Reserved Instances(RI) | 인스턴스 타입을 기준으로 1년/3년 약정하는 방식으로, 최대 75%정도 저렴하며, 수요 예측이 정확히 되거나 어느 정도 기간의 약정 지불 의사가 있는 경우 선택한다. | |
Convertible Reserved Instances | 일정 기간동안 타입을 변경하며 사용하고 싶은 경우 선택한다. | |
Saving Plans | 특정 사용량(달러 단위)을 기준으로 1년/3년 약정하는 방식으로, 어느 정도 기간의 약정 지불 의사가 있는 경우 선택한다. | |
Spot Instances | 지정가격보다 낮은 가격의 인스턴스를 저렴하게 구매해서 쓰는 방식으로, 최대 90% 정도 저렴하다. 단, 언제 다시 회수될지 모르기 때문에 시작 및 종료가 자유롭거나 추가적인 컴퓨팅 파워가 필요한 경우 선택할 수 있다. | 배치 작업, 데이터 분석, 이미지 프로세싱, 분산 작업 |
Dedicated Host | 실제 물리적 서버 전체를 임대하는 방식이다. 라이선스 이슈(Windows Server 등)가 있는 경우나 규정이나 법규를 반드시 준수해야 하는 경우에 사용할 수 있다. | 구매 옵션: 1년/3년 (가장 비싼 옵션), 인스턴스 배치를 제어할 수 있는 방식, 낮은 하드웨어에 대한 가시성 |
Dedicated Instance | 다른 고객이 나의 하드웨어를 공유하지 않는 방식이다. 같은 계정 내에서 서로 다른 인스턴스가 동일한 하드웨어를 공유할 수 있다. | 인스턴스 배치에 대한 통제권은 없음. 자신만의 인스턴스를 가짐. |
Capacity Reservation | 원하는 기간 동안 특정한 가용영역에 용량을 예약하는 방식이다. 특정한 가용영역에 있어야 하는 단기적이고 중단 없는 작업이 필요한 경우 적합하다. | 언제든 용량을 예약하거나 취소 가능하다. 할인 미적용ex) 특정 기간에 예정된 이벤트 |
비용 비교
Spot Instances < Reserved Instances < On-demand < Dedicated
스팟 가격이 정의된 최대 가격을 초과하면, 두 가지 옵션(인스턴스를 중지하거나 종료) 중 선택할 수 있으며 2분의 유예기간이 주어진다.
전략 | 설명 |
---|---|
lowestPrice | 가장 낮은 가격인 풀에서 인스턴스를 시작하기 때문에 비용이 최적화된다. 워크로드가 매우 짧은 경우 적합하다. |
diversified | 정의한 모든 풀에 분산된다. 한 풀이 사라져도 다른 풀이 활성화되어 있으므로, 긴 워크로드와 가용성 고려시 적합하다. |
capacityOptimized | 원하는 인스턴스 수에 맞는 최적의 용량을 가진 풀을 선택한다. |
priceCapacityOptimized | 먼저 사용 가능한 용량이 가장 큰 풀을 선택하고, 그 중 가격이 가장 낮은 풀을 선택한다. 대부분의 워크로드에 적합하다. |
Spot Instance Request vs Spot Fleets
Spot Instance Request는 원하는 인스턴스 유형과 AZ를 정확히 알고 있는 경우 사용하는 반면, Spot Fleets는 조건을 만족하는 모든 인스턴스 유형과 모든 AZ를 선택하라는 것이다.
배치 전략 | 설명 | 장점 | 단점 | 적절한 사례 |
---|---|---|---|---|
Cluster | 모든 인스턴스가 동일한 가용영역에 존재 | 높은 대역폭 / 지연 시간이 짧고, 처리량이 많은 네트워크 확보 | 가용영역에 장애 발생시 모든 인스턴스에 장애 발생 | 빅데이터 처리 |
Spread | 서로 다른 가용영역과 물리적 하드웨어에 인스턴스를 분산 | 동시 실패의 위험이 감소(동일 가용 영역 내에서도 마찬가지) | 가용 영역당 7개의 인스턴스로 제한 | 가용성을 극대화하고 위험을 줄여야 하는 애플리케이션 |
Partition | 여러 가용 영역의 파티션에 인스턴스를 분산 | 파티션이 많으면 인스턴스가 여러 하드웨어 랙에 분산되어 랙 간의 실패로부터 안전 (가용 영역당 최대 7개의 파티션 가능) | 데이터와 서버를 파티션 전반에 걸쳐 퍼뜨려 놓은 것을 인식 가능한 애플리케이션 |
ENI(Elastic Network Interface)는 EC2의 가상의 랜카드이다.
한마디로 'Private 성을 지키는 수문장'이라 할 수 있겠다.
도움되는 영상
AWS 강의실: 쉽게 설명하는 AWS 기초 강좌 18: NAT Gateway & Bastion Host
내부 네트워크에 대한 보안 접근을 제공하는 중계 서버 역할을 하는 EC2 인스턴스로, 주로 외부에서 직접 접근이 불가한 AWS VPC 내부의 자원에 접근하기 위해 사용된다. 이를 통해 보안과 접근 제어가 강화되며, Bastion 호스트를 경유하여 내부 네트워크로 안전하게 SSH 또는 RDP 접속이 가능해진다.
AMI 선택: 이름 및 태그를 지정하고, AMI를 선택한다. 기존에 만들었던 AMI가 있다면 해당 이미지를 사용할 수 있다.
유형 및 사이즈 선택
프리티어 기간동안은 t2.micro를 무료로 사용할 수 있다.
키 페어 생성: 인스턴스에 안전하게 연결하기 위해 키 페어를 사용한다. 기존의 키페어가 있다면 해당 키페어를 사용하거나, 새로운 키페어를 생성할 수 있다. 여기서는 RSA 기반(비대칭키)으로 암호화된 새로운 키 페어를 생성한다. 프라이빗 키 파일 형식을 .pem으로 지정한다. .pem
형식의 프라이빗 키가 다운로드 될 것이다.
.pem vs .ppk
.pem (Privacy Enhanced Mail) 형식은 주로 OpenSSH 및 Linux 기반 시스템에서 사용되는 프라이빗 키 형식으로, 리눅스, macOS 등에서 SSH 클라이언트를 사용하여 인스턴스에 접속할 때 사용한다.
.ppk (PuTTY Private Key) 형식은 PuTTY라는 SSH 및 텔넷 클라이언트에서 사용되는 프라이빗 키 파일 형식으로, 주로 Windows 환경에서 많이 사용된다.
기존에.pem
형식으로 프라이빗 키를 생성하였더라도, puTTY Key Generator를 통해.pem
파일을.ppk
형식으로 변환하여 PuTTY에서 사용할 수 있다. ‘Conversions > Import key’ 또는 ‘Load’ 버튼을 통해 기존.pem
을 불러온 후 ‘Save private key’을 선택한다. 확장자를ppk
로 변경 후 저장한다.
네트워크 설정 (첨부된 이미지의 내용은 실습과 무관함)
a. 서브넷
b. 보안그룹
c. 인바운드 보안 그룹 규칙: 기본적으로 ssh가 추가되어있으며, ‘보안 그룹 규칙 추가’를 통해 HTTP 등의 인바운드 규칙을 추가할 수 있다.
EBS 설정(생략)
EC2 생성(생략)
EC2 접속 후 웹 서버 설치 및 웹 서버 실행
putty 접속: 만약 기존 ec2 리소스 생성시 pem key를 발급받았을 경우 putty 전용 key로 전환(3번 참고) 후, Category > SSH > Auth > Credentials 에서 Private key file for authentication에서 생성한 프라이빗 키를 선택한다.
8. 웹브라우저 접속 테스트: nginx 커스터마이징 후 인스턴스의 공인 IP로 접속해본다.
만약 생성된 인스턴스에 공인 IP가 부여되지 않았다면?
퍼블릭 IP를 사용하기 위해서는 인스턴스가 속한 VPC 내 서브넷이 외부 인터넷과 연결되어 있어야 한다. 따라서 이전 과정에서 생성한 서브넷에 연결된 라우팅 테이블이 인터넷 게이트웨이와 연결되어야 한다. 'VPC>인터넷 게이트웨이>인터넷 게이트웨이 생성'을 통해 새로운 인터넷 게이트웨이를 생성한다. 해당 인터넷 게이트웨이를 인스턴스가 속한 VPC에 연결한다.
EC2로 이동 > 인스턴스
이미지 백업 시 인스턴스가 중지되며, 이미지 생성은 약 3~5분 정도 소요된다.