[AWS] EC2

Gaeun·2023년 5월 2일
2

참고 자료

1. EC2

❓ Amazon EC2

  • 클라우드 가상 서버. 아마존에서 가장 인기있는 서비스 중 하나.
  • EC2: Elastic Compute Cloud = Infrastructure as a Service
  • 즉, EC2는 하나의 서비스가 아니며, 많은 서비스를 포함.
    • Renting virtual machines (EC2)
    • Storing data on virtual drvices (EBS)
    • Distributing load across machines (ELB)
    • Scaling the services using an auto-scaling group (ASG)

Knowing EC2 is fundamental to understand how the Cloud works!

클라우드는 필요할 때마다 언제든지 컴퓨팅을 대여할 수 있고 EC2가 바로 그 예이다.

🧐 EC2 sizing & configuration options

  • OS: Linux, Windows or Mac OS
  • CPU: 가상 머신에 사용할 컴퓨팅 성능과 코어의 개수
  • RAM: Random Access Memory(RAM)의 크기
  • Storage Space:
    • Network-attached (EBS & EFS)
    • hardware (EC2 Instance Store)
  • Network card: spped of the card, Public IP address
  • Firewall rules: security group
  • Bootstrap script (configuration at first launch): EC2 User Data

원하는 대로 가상 머신을 선택하여 AWS에서 빌릴 수 있다!

📋 EC2 User Data

EC2 인스턴스에 부팅될 때 실행되는 스크립트 또는 데이터를 의미. 주로 EC2 인스턴스의 초기 설정을 자동화하는 데 사용됨.

  • EC2 User data script를 사용하여 인스턴스를 bootstrap(부트스프래핑)을 할 수 있음.
  • bootstrapping: 머신이 작동될 때 명령을 시작하는 것, 부트 작업을 자동화하기 때문에 부트스트래핑이라는 이름을 갖게 됨.
  • 스크립트는 처음 시작할 때 한 번만 실행되고 다시 실행되지 않음.
  • 인스턴스를 부팅할 때 자동화하는 작업들?
    • Installing updates
    • Installing software
    • Downloading common files from the internet
    • Anything you can think of
  • User Data Script에 작업을 더 추가할 수록 부팅 시 인스턴스가 할 일이 더 늘어남.
  • EC2 User Data Script는 루트 계정에서 실행됨.

User Data는 EC2 인스턴스 시작 시에만 사용되며, 인스턴스가 시작된 후에는 수정할 수 없다. 또한 User Data는 암호화되지 않은 텍스트로 저장되므로, 민감한 정보를 포함해서는 안 된다.

✅ EC2 Instance Types

  • EC2 Instance Types:
    • General Purpose (범용)
    • Compute Optimized (컴퓨팅 최적화)
    • Memory Optimized (메모리 최적화)
    • Accelerated Computing (가속화된 컴퓨팅)
    • Storage Optimized (스토리지 최적화)
    • Instance Features (인스턴스 기능)
    • Measuring Instance Performance (인스턴스 성능 측정)
  • naming convention:

    m5.2xlarge
       m: instance class
       5: generation (AWS improves them over time)
       2xlarge: size within the instance class

EC2 Instance Types - Compute Optimized (범용)

  • 웹 서버나 코드 레파지토리 같은 다양한 작업에 적합함.
  • 컴퓨팅, 메모리, 네트워크 간의 균형도 잘 맞음.

EC2 Instance Types - Memory Optimized (컴퓨팅 최적화)

  • 컴퓨터 집약적인 애플리케이션에 최적화된 인스턴스.
  • 고성능 프로세서의 활용
    • Batch processing workloads
    • Media transcoding
    • High performace web server
    • Hight performance computing (HPC)
    • Scientific modeling & machine learning
    • Dedicated gaming servers
  • C로 시작하는 인스턴스 이름을 가지고 있음(ex: C5, C6)

EC2 Instance Types - Memory Optimized (메모리 최적화)

  • 메모리에서 대규모 데이터 세트를 처리하는 워크로드를 위한 빠른 성능을 제공함.
  • 사용 사례
    • High performance, relational/non-relational databases
    • Distributed web scale cache stores
    • In-memory databases optimized for BI (business intelligence)
    • Applications performing real-time processing of big unstrutured data

EC2 Instance Types - Storage Optimized (스토리지 최적화)

  • 로컬 스토리지에서 매우 큰 데이터 세트에 대해 많은 순차적 읽기 및 쓰기 액세스를 요구하는 워크로드를 위해 설계됨.
  • 사용 사례
    • High frequency online transcation processing (OLTP) systems
    • Relational & NoSQL databases
    • Cache for in-memory databases (ex: Redis)
    • Data warehousing applications
    • Distributed file systems

2. Security Groups

🛡️ Introduction to Security Groups

  • 보안 그룹은 AWS에서 네트워크 보안을 실행하는데 핵심이 됨.
  • EC2 인스턴스에 들어오고 나가는 트래픽을 제어함.
  • 보안 그룹은 허용(allow) 규칙만 포함함.
  • IP 주소나 다른 보안 그룹을 참조할 수 있음. (보안 그룹끼리 서로 참조 가능)

🤿 Security Groups Deeper Dive

  • 보안 그룹은 EC2 인스턴스의 "방화벽"
  • They regulate:
    • Access to Ports
    • Authorised IP ranges - IPv4 and IPv6
    • Contorl of inbound network (from other to the instance)
    • control of outbound netword (from the instance to other)

😎 Security Groups Good to know

  • 여러 인스턴스에 연결할 수 있음. (보안 그룹과 인스턴스간의 일대일 관계는 없음. 또한 한 인스턴스에도 여러 보안 그룹을 연결할 수 있음.)
  • 특정 지역과 VPC(Virtual Private Cloud)에 제한되도록 설정되어 있음. 따라서 지역을 전환하면 새 보안 그룹을 생성하거나 다른 VPC를 생성해야 함.
  • EC2 "외부"에 있음. 따라서 트래픽이 차단되면 EC2 인스턴스는 확인할 수 없음.
  • SSH 액세스를 위해 하나의 별도 보안 그룹을 유지하는 것이 좋음. 보통 SSH 액세스는 가장 복잡하므로 별도 보안 그룹이 잘 완료됐는지 확인해야 함.
  • 타임 아웃으로 인해 애플리케이션에 접근할 수 없을 때에는 보안 그룹의 문제임.
  • "connection refused" 에러인 경우엔 보안 그룹은 실행되었고 트래픽은 통과되었지만, 애플리케이션에 문제가 생겼거나 실행되지 않는 등의 문제가 발생된 것임.
  • 기본적으로 모든 인바운드 트래픽은 차단되어 있음
  • 모든 아웃바운드 트래픽은 허용됨.

🚢 Class Ports to know

  • 22 = SSH (Secure Shell): log into a Linux instance
  • 21 = FTP (File Transfer Protocol): upload files into a file share
  • 22 = SFTP (Secure File Transfer Protocol): upload files using SSH
  • 80 = HTTP: access unsecured websites
  • 443 = HTTPS: access secured websites
  • 3389 = RDP (Remote Desktop Protocol) - log into a Windows instance

🧩 SSH Summary Table

SSH(Secure Shell): 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 그 프로토콜

🔗 EC2 Instance Connect

  • 기존의 SSH 접속 방식(SSH 클라이언트를 사용하여 직접 EC2 인스턴스에 접속) 대신, AWS 서비스에서 EC2 인스턴스에 직접 연결할 수 있도록 함.
  • SSH 클라이언트 설정을 관리하거나, SSH 서버를 설치 및 구성하는 데 필요한 작업을 줄일 수 있으며, 다운로드 받은 키 없이 접근할 수 있음.
  • 보안성과 편의성이 높음.
  • Works only out-of-the-box with Amazon Linux 2.
  • 22번 포트는 여전히 열려있어야 함.

3. EC2 Instance

🔖 EC2 Instance Purchasing Options

  • On-Demand Instances: 필요한 대로 실행할 수 있는 인스턴스. 단기적인 워크로드에 사용하기 좋음. 비용 예측 가능, 초 단위로 요금 지불.
  • Reserved (1 & 3 years):
    • Reserved Instance: 장기적인 워크로드에 사용
    • Convertible Reserved Instance: 장기적인 워크로드 w/ 유연한 인스턴스 타입
  • Saving Plans (1 & 3 years): 장기 워크로드. 특정한 사용량 약정.
  • Spot Instances: 단기 워크로드. 가격이 쌈. 하지만 인스턴스들이 손실될 수 있어 신뢰성이 낮음.
  • Dedicated Hosts: 물리적 서버 전체를 예약해서 인스턴스 배치를 제어할 수 있음.
  • Dedicated Instances: 다른 고객과의 하드웨어 공유가 없음.
  • Capacity Reservations: 원하는 기간 동안 특정 AZ(Availability Zone)에 용량 예약 가능.

EC2 On Demand

  • 사용한 만큼 지불.
    • Linux or Windows: 1분 이후 초 단위로 청구
    • All other OS: 시간 단위로 청구
  • 비용이 가장 많이 들지만 바로 지불할 금액이 없음.
  • 장기적인 약정 필요 없음.

단기적이고 중단이 없는 워크로드가 필요할 때, 또는 애플리케이션의 거동을 예측할 수 없을 때 가장 추천됨.

EC2 Reserved Instances

  • On-demand 인스턴스에 비해 최대 72% 할인을 제공함.
  • 특정한 인스턴스 속성을 예약 (Instance Type, Region, Tenancy, OS)
  • Reservation Period: 1 year(+discount) or 3 years(+++discount)
  • Payment Options: 후불 결제(+), 부분 선결제(++), 전액 선결제(+++)
  • Reserved Instance's Scope: Regional or Zonal (reserve capacity in an AZ)
  • 사용량이 일정한 애플리케이션에 예약 인스턴스를 사용하는 것이 좋음. (ex. 데이터베이스)
  • Reserved Instance를 Marketplace에서 사고 팔 수 있음.

Convertible Reserved Instance

  • EC2 instance type, instance family, OS, scope, tenancy 등을 변경할 수 있지만 유연성이 더 크기 때문에 할인율이 약간 더 적음. (최대 66% 정도)

EC2 Savings Plans

  • 장기간 사용 시 할인 받을 수 있음 (RIs와 같이 최대 72%)
  • 1년 혹은 3년 동안 시간당 $10로 약정.
  • 사용량이 한도를 넘어서게 되면 On-demand 가격으로 청구.
  • 특정한 instance family & AWS region으로 고정. (ex. M5 in us-east-1)
  • 유연한 다른 옵션
    • Instance size (ex.m5.xlarge, m5.2xlarge)
    • OS (ex. Linux, Windows)
    • Tenancy (Host, Dedicated, Default)

EC2 Spot Instances

  • On-demand에 비해 최대 90%의 할인율.
  • 현재 스팟 가격이 사용자가 지정한 최대 가격보다 높아지면 언제든지 인스턴스가 종료될 수 있음.
  • AWS에서 가장 cost-efficient한 인스턴스.
  • Useful for workloads that are resilient to failure(수행 중인 작업을 다시 시작할 수 있는 능력이 있는 애플리케이션으로 이해했음)
    • Batch jobs
    • Data analysis
    • Image processing
    • Any distributed workloads
    • Workloads with a flexible start and end time
  • Not suitable for critical jobs or databases

EC2 Dedicated Hosts

  • EC2 인스턴스 용량이 완전히 사용자 전용으로 할당된 물리적 서버
  • Allows you address compliance requirements and use your existing server-bound software licences (per-socket, per-core, per-VM sofware licences)
    따라서 법규 준수 요건 혹은 규정 준수 요구 사항을 만족할 수 있으며, 기존의 서버 바운드 소프트웨어 라이센스를 사용할 수 있도록 해줌.
  • Purchasing Options:
    • On-demand: 초당 비용 지불
    • Reserved: 1 or 3 yesrs(후불 결제, 부분 선결제, 전액 선결제)
  • 가장 비싼 옵션.
  • Useful for software that have complicated licensing model (BYOL-Bring Your Own License) or for companies that have strong regulatory or compliance needs.
    복잡한 라이센싱 모델(BYOL)을 가진 소프트웨어 또는 강력한 규제 또는 규정 준수 요구 사항을 가진 회사에 유용함.

EC2 Dedicated Instances

  • 사용자 전용 하드웨어에서 인스턴스가 실행됨.
  • 동일한 계정 내 다른 인스턴스와 하드웨어를 공유할 수 있음.
  • 인스턴스 배치에 대한 제어가 없음. (정지/시작 후 하드웨어 이동 가능)

Dedicated Instance는 사용자만의 인스턴스를 자신만의 하드웨어에 갖는 반면, Dedicated Host는 물리적 서버 자체에 접근권을 갖고, 낮은 수준의 하드웨어에 대한 가시성을 제공한다.

EC2 Capacity Reservation

  • 지정된 특정 AZ에서 필요한 기간 동안 On-demand 인스턴스 용량 예약 가능.
  • 필요할 때 언제든지 EC2 용량에 액세스할 수 있음.
  • 약정 기간이 없으며(원하는 때에 생성/취소 가능), 요금 할인이 없음 - 용량을 예약하는 것이 유일한 목적이기 때문.
  • Regional Reverved Instance와 Saving Plans와 결합하여 요금 할인 혜택을 받을 수 있음.
  • 인스턴스를 실행하든 안 하든 On-demand 요금이 부과됨.
  • 특정 AZ에서 실행해야 하는 단기적이고 중단되지 않는 워크로드에 적합함.

🤓 Which purchasing option is right for me?

리조트에 비유해서,

  • On demand: 원하는 때에 리조트에 들어가서 전액 지불.
  • Reserved: 미리 계획을 세우고 오랜 시간 머물 계획이 있는 경우 높은 할인을 받을 수 있음.
  • Savings Plans: 일정 기간 동안 매시간 일정 금액을 지불하고 원하는 방 유형(킹, 스위트, 오션뷰 등)에 머물 수 있음.
  • Spot instances: 리조트에서 빈 방을 경매로 판매하고, 가장 높은 입찰가를 제시한 사람이 방을 얻음. 언제든지 방에서 쫓겨날 수 있음.
  • Dedicated Hosts: 리조트 전체 건물을 예약함.
  • Capacity Reservations: 일정 기간동안 방을 예약하고, 체류할 지 안 할지 확실하지 않다고 말하는 것과 같음. 하지만 체류하지 않더라도 가격을 지불해야함.

4. EC2 Spot Instance

📍 EC2 Spot Instance Requests

  • On-demand와 비교했을 때 최대 90%의 할인율.
  • max spot price를 설정. current spot price < max spot price일 때 인스턴스를 얻을 수 있음.
    • 시간당 spot 가격은 offer 및 용량에 따라 변동됨.
    • 현재 spot 가격이 최대 가격보다 높은 경우 2분의 유예 시간 동안 인스턴스를 중지하거나 종료할 수 있음.
  • 다른 방법으로는 Spot Block이 있음.
    • Spot Instance를 일정 기간동안 (1-6시간) 차단하는 기능.
    • 드물게 인스턴스가 회수되는 경우도 있음
  • Used for batch jobs, data analysis, or workloads that are resilient to failures.
  • Not great for critical jobs or databases.

🛑 How to terminate Spot Instances?

  • One-time request: Spot request가 이행되는 즉시 인스턴스가 시작된다. 이는 일회성 요청이었기 때문에 Spot request가 사라지게 된다.따라서, Spot request가 사라져도 괜찮은 경우엔 One-time request를 사용한다.
  • Persistent request: Spot request의 Valid from부터 Valid until까지의 유효기간 동안 사용자가 요청한 개수의 인스턴스들이 계속해서 유효하다. 즉, 어떤 이유로 인스턴스가 중지되거나 Spot price의 상승을 이유로 방해받은 경우에는 Spot request가 다시 검증되고 나면 Spot Instance가 재시작된다. 따라서 persistent request로 실행된 인스턴스의 경우에는, Spot Instance가 중지되어도 Spot request는 여전히 활성화되어 있기 때문에 Spot request가 자동적으로 인스턴스를 재시작한다.
  • Spot request가 취소되기 위해서는 open, active, disabled 상태여야만 한다. (failed, cancelled, 혹은 closed가 아니어야한다.)
  • Spot request를 취소하더라도 인스턴스가 종료되지는 않는다.
  • Spot Instance를 영구히 종료하고 재실행되는 일이 없도록 하기 위해서는 먼저 Spot 요청을 취소한 다음, 연관된 Spot Instance를 종료해야 한다.

⛴️ Spot Fleets

  • Spot Fleet = set of Spot Instance + (optional) On-Demand Instance
  • Spot Fleet은 가격 제약 조건을 충족하며 대상 용량을 맞추려고 시도한다.
    • 사용 가능한 런치 풀(launch pools)을 정의: instance type(m5.large), OS, Avilability Zone
    • 여러 개의 런치 풀을 설정할 수 있으며, fleet이 가장 적합하고 좋은 런치풀을 선택한다.
    • Spot Feelt이 정해진 예산 혹은 원하는 용량에 도달한 경우엔 인스턴스 실행을 멈춘다.
  • Spot Instance 할당 전략
    • lowestPrice: 가장 적은 비용을 가진 풀에서부터 (비용 최적화, 짧은 워크로드)
    • diversified: 모든 풀에 분산 (가용성 우수, 긴 워크로드)
    • capacityOptimized: 인스턴스 수에 대한 최적의 용량을 갖춘 풀
    • priceCapacityOptimized (recommended): 가장 높은 용량을 가진 풀을 선택한 다음 가장 낮은 가격의 풀을 선택(대부분의 워크로드에 가장 적합함)
  • Spot Fleets는 자동으로 최저 가격의 Spot Instance를 요청할 수 있도록 한다.

사용자가 사용하고자하는 인스턴스의 유형과 가용 영역을 지정하는 Spot Instance request와는 다르게, Spot Fleet은 사용자의 요구(최저가 선택 등) 조건에 따라 인스턴스의 유형과 가용 영역을 선택하도록 함.

profile
🌱 새싹 개발자의 고군분투 코딩 일기

0개의 댓글