Amazon EC2
- AWS에서 제공하는 서비스형 인프라스트럭처
- 많은 기능들이 있다
- EC2 - VM을 대여
- EBS - 데이터를 가상 드라이브 또는 EBS 볼륨에 저장
- ELB - 로드를 분산 시킬 수 있다
- ASG - 오토 스케일링 그룹을 통해 서비스를 확장 시킬 수 있다
EC2 sizing & configuration options
- Operating System(OS)
- CPU
- RAM
- Storage
- 네트워크를 통해 연결할 스토리지 (EBS, EFS)
- 하드웨어를 통해 연결할 스토리지 (EC2 Instance Store)
- Network
- Security Group
- Bootstrap script
EC2 User Data
- bootstrap은 머신이 작동될 때 명령을 시작하는 것을 말한다
- 스크립트는 실행 될 때 한번만 실행되고 그 후엔 실행되지 않는다
- 부팅 작업을 자동화하기 때문에 bootstrapping이라는 이름을 가지게 되었다
- Installing updates
- Installing software
- Downloading common files from the internet
EC2 instance types
- 어플리케이션에 적합한 인스턴스를 선택하는 것

EC2 인스턴스 생성
- 퍼블릭 IP로 접속해서 User data에 작성한 스크립트가 제대로 작동하는지 확인
인스턴스 중지 & 삭제
- 인스턴스를 중지 하지 않고 계속 Running상태로 두면 그에 따른 요금이 청구된다
- 인스턴스를 중지했다가 다시 Running상태로 바꿀 경우 IP가 변동된다(사설 IP는 변경되지 않는다)
- 삭제를 하고 싶다면 Terminate instance를 통해 삭제가 가능하다
EC2 Instance Types
- General Purpose
- 웹 서버나 코드 저장소와 같은 다양한 작업에 적합
- Compute, Memory, Networking간의 균형이 좋음
- Compute Optimized (C로 시작하는 이름)
- compute-intensive 작업에 적합 (고성능 프로세서)
- Batch processing workloads
- 미디어 트랜스 코딩 작업
- 고성능 웹 서버
- High performance computing (HPC)
- 머신러닝
- Memory Optimized (R로 시작하는 이름)
- 메모리에서 대규모 데이터셋을 처리하는 유형의 작업에 적합
- 고성능을 필요로하는 데이터베이스
- Accelerated Computing
- Storage Optimized
- 로컬 스토리지에서 대규모의 데이터셋에 액세스할 때 적합한 인스턴스
- 고주파 온라인 트랜잭션 처리 시스템
- 관계형, 비관계형 데이터베이스
- 분산 파일 시스템
- Instance Features
- Measuring Instance Performance
AWS naming convention
“m5.2xlarge”
Security Groups
- AWS에서 네트워크 보안을 실행하는데 핵심
- Port로의 액세스를 통제하며 인증된 IP주소 범위를 확인
- EC2 인스턴스에서 트래픽을 제어
- Security groups는 오로지 “allow rules”만 허용한다 ****
- IP 주소를 참조해서 규칙을 만들 수 있다
- 보안 그룹끼리 서로 참조 할 수도 있다
“Inbound traffic” - 외부에서 EC2인스턴스로 들어오는 트래픽
“Outbound traffic” - EC2인스턴스에서 외부로 나가는 트래픽
Security Groups에서 알아야 할 사항
- 여러 인스턴스에 연결 할 수있다
- 지역과 VPC 결합으로 되어 있다
- 보안 그룹은 EC2 외부에 존재한다 (EC2 외부의 방화벽)
- 트래픽이 차단되면 EC2 인스턴스는 확인 할 수 없다
- SSH 액세스를 위해 하나의 별도의 보안 그룹을 유지하는 것이 좋다
- 타임아웃으로 애플리케이션에 접근할 수 없다면 보안 그룹 문제
- Connection refused 에러가 발생했다면 애플리케이션의 문제이거나 실행되지 않았다는 것
- Default로 모든 인 바운드 트래픽은 차단되어 있다
- Default로 모든 아웃 바운드 트래픽은 허용되어 있다
Referencing other security groups
보안 그룹의 다른 보안 그룹을 참조하는 방법
- 여러 보안 그룹을 참조해서 보안 그룹을 설정하면 각각의 보안 그룹을 설정한 EC2 인스턴스들이 트래픽을 보낼 수 있다
Classic Ports to know
- “22” - SSH (Secure Shell)
- “21” - FTP (File Transfer Protocol)
- 파일 공유 시스템에 파일을 업로드 하는데 사용
- “22” - SFTP (Secure File Transfer Protocol)
- SSH를 사용해서 업로드 하기 때문에 SSH와 같은 포트를 사용
- “80” - HTTP
- 보안이 되지 않은 사이트에 액세스 하기 위해 사용
- “443” - HTTPS
- “3389” - RDP (Remote Desktop Protocol)
SSH
- 명령줄 인터페이스
- 터미널이나 명령줄을 이용해서 머신이나 서버를 제어할 수 있다
- SSH
- Mac, Linux, Windows 10 이상
- Putty
- EC2 Instance Connect
SSH를 통한 EC2 접근
chmod 0400 {{key_file_name}}.pem
chmod 600 {{key_file_name}}.pem
ssh -i {{key_file_name}}.pem ec2-user@{{EC2_public_ip}}
SSH를 통한 EC2 인스턴스 역할
ssh -i /Users/jinwoo/Documents/workspace/keys/saa.pem ec2-user@3.34.179.99
[ec2-user@ip-172-31-46-35 ~]$ aws --version
aws-cli/1.18.147 Python/2.7.18 Linux/5.10.179-166.674.amzn2.x86_64 botocore/1.18.6
[ec2-user@ip-172-31-46-35 ~]$ aws iam list-users
Unable to locate credentials. You can configure credentials by running "aws configure".
[ec2-user@ip-172-31-46-35 ~]$ aws iam list-users
{
"Users": [
{
"UserName": "admin",
"Path": "/",
"CreateDate": "2023-01-02T06:23:12Z",
"UserId": "AIDA5QZOV3LPA3NKSVJIK",
"Arn": "arn:aws:iam::929421449950:user/admin"
},
{
"UserName": "sakin",
"PasswordLastUsed": "2023-06-18T04:03:06Z",
"CreateDate": "2023-05-27T00:37:57Z",
"UserId": "AIDA5QZOV3LPDGRVXIAHQ",
"Path": "/",
"Arn": "arn:aws:iam::929421449950:user/sakin"
}
]
}
- Access Key ID와 Secret Access Key를 적어두면 인스턴스에 접근하는 누군가 인스턴스에 입력된 자격 증명 정보를 회수 할 수 있다
- 따라서 이전에 만들어 두었던 DemoRoleForEC2를 연결해서 사용

EC2 Instances Purchasing Options
“On - Demand”
📌 단기적이고 중단 없는 워크로드가 필요할 때나 애플리케이션의 예측을 할 수 없을 때 사용
- Linux or Windows - 1분 후에 1초마다 지불
- 다른 OS - 시간 마다 지불
- 비용이 많이 들지만 지불할 금액은 없다
- 장기적인 약정 없다
“Reserved Instances”
📌 중장기적으로 예약해서 사용할 경우 이용하며 중간에 변환할 수 있는 예약도 있다
- On - Demand에 비해 72% 할인을 제공
- 특정한 인스턴스 속성을 예약
- 1년 혹은 3년의 기간으로만 예약 가능
“Spot Instances”
📌 정해진 금액을 넘기면 사라지게 되므로 중요한 작업이나 데이터베이스에는 적절하지 않지만 금액을 많이 아낄 수 있다
- On - Demand에 비해 최대 90% 까지 할인을 받을 수 있다
- 정해진 금액을 넘어 서게 되면 인스턴스가 사라진다
- 워크로드가 사라질 경우를 대비해야 한다
- Batch jobs, Data analysis, Image processing, 분산형 워크로드
“Dedicated Hosts”
📌 전용 호스트로 실제 물리적 서버를 받는 경우로 라이선싱 모델과 함꼐 제공되는 소프트웨어인 경우 사용한다 (쉽게 말해 회사 규모)
- 소켓, 코어, VM 소프트웨어 라이선스를 기준으로 청구
- 가장 비싼 옵션이며, On - Demand와 예약을 할 수 있다
- 높은 수준의 규정 준수가 필요한 기업, 혹은 복잡한 라이선스 모델을 가진 소프트웨어에 적합
“Dedicated Instances”
📌 개인 전용 하드웨어에서 실행되는 인스턴스
- 물리적 서버와는 다르다
- 같은 계정에서 다른 인스턴스와 함께 하드웨어를 공유할 수 있다
- 인스턴스 배치에 대한 통제권은 없다
“Capacity Reservations”
📌 원하는 기간 동안 특정한 AZ에서 On - Demand 인스턴스를 예약 할 수 있다
EC2 Spot Instance Requests
- On - Demand에 비해 최대 90% 할인된 가격으로 사용이 가능하다
- spot price < max을 정의한다
- 만약 정의한 가격보다 높아질 경우 아래와 같은 2가지 옵션(2분의 유예 시간이 존재)이 존재한다
- 인스턴스를 중단하는 옵션
- 인스턴스를 종료하는 옵션
- spot block을 사용할 수도 있다
“Spot Instance 요청의 원리”
📌 원하는 인스턴스의 개수, 지불의사가 있는 인스턴스 가격, AMI등 요청의 유효기간 등
- 스팟 인스턴스를 위한 일회성 요청
- 요청이 이행되는 즉시 인스턴스가 시작된다
- 시작되면서 스팟 요청이 사라진다
- 사후 인스턴스를 위한 지속적인 요청
- 요청사항이 계속 유지된다
- 만약 정의한 가격보다 높아져서 삭제됬을 경우 요청이 남아있으므로 인스턴스가 다시 시작된다
“Spot 요청의 취소 조건”
📌 open, active, disabled상태여야 한다 (failed, cancelled, closed 상태이면 안된다)
- 만약 요청을 취소 했을 경우, 기존에 남아있던 인스턴스는 삭제되지 않고 남아있는다
- 따라서 Spot 요청을 먼저 삭제하고 남아있는 인스턴스를 삭제해야 왼벽하게 삭제된다
“Spot Fleets”
📌 비용 절감을 위한 방법
- 한 세트위 스팟 인스턴스에 선택적으로 온디맨드 인스턴스를 섞어서 사용하는 것
- 정의된 비용 제한 내에서 대상 용량을 맞추려 노력하는 것
- 사용 가능한 Launch Pool을 통해서 실행된다
- 다양한 인스턴스 유형, OS, 가용 영역을 가질 수 있다
- Fleet이 가장 적합하고 좋은 Launch Pool을 선택한다
“Spot Instance를 할당해 줄 전략”
- LowestPrice
- 가작 적은 비용을 가진 풀에서 인스턴스를 실행
- 짧은 워크로드 실행 시
- Diversified
- 기존에 정의한 모든 풀에 걸쳐 분산이 된다
- 긴 워크로드에 적합하며 한 풀이 중단되더라도 다른 풀이 활성화 되어 있어 가용성이 뛰어나다
- CapacityOptimized
- 인스턴스의 개수에 따라 최적 용량으로 실행
- 적절한 풀을 찾아 실행