[AWS] EC2 - Elastic Compute Cloud

dereck·2024년 12월 14일

AWS CCP

목록 보기
3/29
post-thumbnail

EC2 기초

EC2는 Elastic Compute Cloud의 약자로 AWS에서 제공하는 IaaS 이다. 그리고 EC2는 하나의 서비스가 아니다. 높은 수준에서 보면 많은 것을 포함하고 있다.

  • 가상 머신 임대 (EC2)
  • 데이터를 가상 드라이브에 저장 (EBS)
  • 로드 분산 (ELB)
  • 오토 스케일링 그룹을 통해 서비스 확장 (ASG)

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

EC2 설정 옵션

  • 리눅스, 윈도우, 맥 OS의 세가지 옵션이 있고, 그 중 리눅스가 가장 인기 있는 옵션이다.
  • 가상 머신에서 사용할 컴퓨팅 성능과 코어의 양(CPU)을 선택할 수 있다.
  • 랜덤 액세스 메모리(RAM)의 양을 선택할 수 있다.
  • 용량을 선택할 수 있다.
    • EBS, EFS: 네트워크를 통해 연결
    • EC2 인스턴스 스토어: 하드웨어에 연결
  • 네트워크의 종류를 선택할 수 있다.
    • 속도가 빠른 네트워크 카드
    • 공용 IP
  • EC2 인스턴스의 방화벽 규칙(보안 그룹)을 선택할 수 있다.
  • 인스턴스를 구성하기 위한 부트스트랩 스크립트
    • 처음에 설정하는 EC2 사용자 데이터

여기서 기억해야 할 핵심은 사용자가 원하는 대로 가상 머신을 선택하여 AWS에서 빌릴 수 있다는 것이다. 이것이 클라우드의 힘이다.

EC2 유저 데이터

EC2 사용자 데이터 스크립트를 사용하여 인스턴스를 부트스트래핑할 수 있다.

부트스트래핑이란 머신이 작동될 때 명령을 시작하는 것을 말한다. 스크립트는 처음 시작될 때 한 번만 실행되고 다시 실행되지 않는다.

따라서 EC2 사용자 데이터에는 매우 특정한 목적이 있다. 부팅 작업을 자동화하기 때문에 부트스트래핑이라는 이름을 갖게 된다. 사용자가 원하는 것은 뭐든지 할 수 있지만, 사용자 데이터 스크립트에 작업을 추가할수록 부팅 시 인스턴스가 할 일이 늘어난다.

참고로 EC2 사용자 데이터 스크립트는 루트 계정에서 실행되기 때문에 모든 명령문은 sudo 로 해야 한다.


EC2 인스턴스 유형 기본 사항

EC2에는 다양한 사례에서 사용 가능한 여러 유형의 인스턴스가 있으며 최적화 유형도 각기 다르다.

https://aws.amazon.com/ec2/instance-types/에서 EC2 인스턴스의 유형과 요금 및 특성을 확인할 수 있다.

AWS 명명 규칙

m5.2xlarge 인스턴스를 예시로 다음과 같은 뜻이 있다.

  • m: 인스턴스 클래스
    • m은 범용의 인스턴스를 의미
  • 5: 인스턴스의 세대
    • 즉, m5 이후에 m 유형의 인스턴스 클래스를 개선하면 m6이 되는 것
  • 2xlarge: 인스턴스 클래스 내에서 크기를 나타냄
    • small로 시작해서 large, 2xlarge, 4xlarge 등의 크기가 있음
    • 크기가 클수록 인스턴스에 더 많은 메모리와 CPU를 가지게 됨

인스턴스 클래스에 대한 간단한 설명

범용의 인스턴스는 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의 인바운드 규칙에서 승인되지 않았기 때문에 거부되고 작동되지 않는다.

보안 그룹에 대해 알아야 할 사항

  • 여러 인스턴스에 연결할 수 있다.
    • 보안 그룹과 인스턴스 사이에는 1:1 관계가 없다.
    • 실제로 인스턴스에는 여러 보안 그룹이 있을 수도 있다.
  • 보안 그룹은 특정 지역과 VPC 조합에만 제한된다.
    • 다른 지역으로 전환하는 경우 새 보안 그룹을 생성해야 한다.
    • 다른 VPC를 생성한 경우에도 보안 그룹을 다시 생성해야 한다.
  • 보안 그룹은 EC2 외부에 있다.
    • 따라서 트래픽이 차단되면 EC2 인스턴스는 트래픽을 볼 수도 없다.
    • EC2에서 실행되는 애플리케이션과는 다르며 실제로는 EC2 인스턴스 외부의 방화벽이다.
  • SSH 액세스를 위한 별도의 보안 그룹을 하나 유지하는 것이 좋다.
  • 애플리케이션에 접근했을 때 타임아웃이 발생하는 경우는 보안 그룹 문제이다.
    • 임의의 포트에 연결하려고 하는데 컴퓨터가 정지하고 대기하고 있다면 이는 보안 그룹의 문제일 가능성이 높다.
  • 애플리케이션에 접근했을 때 연결 거부 오류가 발생하면 실제로 연결이 거부되었다는 응답을 받게 된다.
    • 실제로 보안 그룹이 작동하고 트래픽이 통과했지만 애플리케이션이 오류가 나거나 실행되지 않은 것이다.
  • 인바운드 규칙의 기본값은 전체 차단이고, 아웃바운드 규칙의 기본값은 전체 허용이다.

알아야 하는 포트 정보

  • 22 = SSH(Secure SHell)
    • 네트워크 상의 다른 컴퓨터에 로그인하여 명령을 실행하고 정보를 보고 받을 수 있도록 해줌
    • CUI 기반 (리눅스 인스턴스 용)
  • 21 = FTP(File Transfer Protocol)
    • 인터넷을 통해 컴퓨터 간에 파일을 전송하기 위한 표준 프로토콜
  • 22 = SFTP(Secure File Transfer Protocol)
    • 서버 접속, 파일 전송, 파일 관리를 지원
    • 암호화를 통해 데이터를 안전하게 전송할 수 있음
    • 일반 텍스트 파일은 전송되지 않음
  • 80 = HTTP
    • 안전하지 않은 웹사이트에 접근 가능
  • 443 = HTTPS
    • 안전한 웹사이트에 접근 가능
  • 3369 = RDP(Remote Desktop Protocol)
    • 데스크탑 컴퓨터를 원격으로 사용하기 위한 프로토콜
    • GUI 기반 (윈도우 인스턴스 용)

EC2 인스턴스에 역할 설정

  1. 먼저 EC2 인스턴스에 연결한다.
    • SSH, PuTTY, EC2 Instance Connect 어떤 방법이든지 상관 없음
  2. AWS CLI가 설치되어 있는지 확인한다.
    • aws --version 으로 확인할 수 있다.
    • Amazon Linux AMI는 AWS CLI를 포함하고 있다.
  3. IAM 페이지로 이동 후 역할 탭으로 이동한다.
  4. 역할을 생성해서 원하는 정책을 연결한 뒤 생성한다.
  5. EC2 페이지로 이동한 뒤 역할을 연결하고자 하는 EC2 인스턴스를 선택하고 우측 상단 작업 을 누르고 보안 > IAM 역할 수정 을 누른다.
  6. 생성한 역할을 선택하고 저장한다.

인스턴스 역할 추가를 aws configure 을 통해 설정하면 안되는 이유
해당 명령어를 통해 EC2 인스턴스에 상세 개인 정보를 입력해두면 계정 상의 누구라도 인스턴스에 접속해서 입력된 자격 증명 정보를 회수할 수 있게 된다.


EC2 인스턴스 구매 옵션

EC2 온디맨드

  • 사용한 만큼 지불한다.
    • Linux & Windows 사용 시 첫 1분이 지난 이후부터 초당 비용이 청구된다.
    • 그 외 운영체제의 경우 시간당 비용이 청구된다.
  • 가격이 높은 편에 속하지만 선결제가 없고 장기 약정도 필요 없다.
  • 연속적인 단기 워크로드애플리케이션 동작을 예측할 수 없는 워크로드에 적합하다.

EC2 예약 인스턴스

  • 특정 인스턴스 속성을 예약한다.
    • 인스턴스 유형리전, 테넌시OS
  • 예약 기간을 설정한다.
    • 3년 선택 시 할인율이 높다
  • 선결제 없이도 가능하며 부분 선결제, 전체 선결제 또한 가능하다
    • 전체 선결제 시 할인율이 제일 높다
  • 특정 리전으로 범위를 지정하거나 특정 AZ의 용량을 예약하도록 영역을 지정할 수 있다.
  • 애플리케이션이 안정된 상태에서 사용되는 데이터베이스 등의 경우 적합하다.
  • 마켓 플레이스에서 예약 인스턴스를 구매하거나 판매할 수도 있다.

  • 전환형 예약 인스턴스
    • 인스턴스 유형을 변경할 수 있다.
    • 인스턴스 제품군OS범위 그리고 테넌시가 변경 가능하다.
    • 유연성이 높은 만큼 할인율은 줄어든다.

EC2 Savings Plans

  • 장기 사용에 따라 할인을 받을 수 있다.
    • 대신 시간당 10달러의 비용을 1년 또는 3년 동안 약정한다.
  • Savings Plans에서 초과하는 사용량은 온디맨드 가격으로 청구된다.
  • 특정 인스턴스 제품군과 리전에 한해 사용할 수 있다.
    • ex) us-east-1M5 유형 인스턴스 제품군
  • 변경 가능한 것 (유연성)
    • 인스턴스 크기 (m5.xlarge, m5.2xlarge 모두 가능)
    • OS (LinuxWindows 간 전환 가능)
    • 테넌시 (Host, Dedicated, Default 전환 가능)

EC2 스팟 인스턴스

  • 나열한 인스턴스 중 가장 높은 할인율을 제공한다.
  • 인스턴스가 언제든 중단될 수 있다.
    • 사용자가 스팟 인스턴스에 지불하고자 하는 가격보다 스팟 인스턴스의 가격이 더 높으면 인스턴스가 중단된다.
  • AWS에서 가장 비용 효율적인 인스턴스
  • 서비스가 중단되어도 복구하기 쉬운 워크로드에 적합하다.
    • 배치 작업
    • 데이터 분석
    • 이미지 처리
    • 분산된 워크로드
    • 시작 및 종료 시점이 유동적인 워크로드
  • 중요한 작업이나 데이터베이스에는 적합하지 않다.

EC2 전용 호스트

  • 사용자의 사용 사례에 맞춘 EC2 인스턴스 용량을 가진 물리적 서버
  • 규정 준수 요구 사항이 있거나 기존의 서버 결합 소프트웨어 라이선스를 사용해야 하는 경우 적합
    • 라이선스 모델과 함께 제공되는 소프트웨어처럼 사용자 라이선스를 사용
    • 강력한 규제와 규정 준수 요건이 필요한 경우
  • 비용은 소켓당, 코어당, VM 소프트웨어 라이선스당 청구된다.
  • 구매 옵션
    • 온디맨드로 초당 청구
    • 1년 또는 3년 예약
  • 실제 물리적 서버를 예약하기 때문에 AWS에서 가장 비싼 옵션이다.

EC2 전용 인스턴스

  • 사용자의 전용 하드웨어에서 실행되는 인스턴스이며 물리적 서버와는 다름
  • 같은 계정의 다른 인스턴스와 하드웨어를 공유하기도 한다.
  • 인스턴스 배치는 제어할 수 없다.

전용 호스트와 전용 인스턴스에 대한 자세한 내용: https://blog.naver.com/techtrip/222638353175

EC2 용량 예약

  • 원하는 기간 동안 특정한 AZ에 온디맨드 인스턴스를 예약할 수 있음
  • 이후 필요할 때마다 그 용량에 액세스할 수 있다.
  • 시간 약정이 없기 때문에 언제든지 예약하거나 취소할 수 있지만 요금 할인은 없음
    • 요금 할인을 받으려면 리전 예약 인스턴스 혹은 Savings Plans와 결합해야 함
  • 용량 예약만을 위해서 사용된다.
  • 인스턴스 실행 여부와 관계없이 온디맨드 요금이 청구됨
  • 특정한 AZ에 위치하는 단기의 연속적인 워크로드에 잘 맞음

EC2 인스턴스 구매 옵션에 대한 간단한 예시

  • 온디맨드: 언제든지 리조트에 방문할 수 있고 원할 때 전체 요금을 지불
  • 예약 인스턴스: 아주 오랜 기잔 리조트에 머무르기로 미리 계획하는 것
    • 오랫동안 머물기 때문에 할인을 많이 받을 수 있음
  • Savings Plans: 리조트에서 일정 금액을 지출하기로 하는 대신 시간에 따라 방을 바꿀 수 있음
    • 앞으로 12개월 동안 매달 300달러 씩 지불하기로 약정
    • 즉, 리조트에서 일정 금액을 지출하기로 약정하는 것
  • 스팟 인스턴스: 리조트에서 제공하는 마감 할인
    • 리조트의 빈 객실에 대해 사람들이 가격 입찰을 해서 크게 할인 받을 수 있음
    • 단, 누군가 사용자보다 객실비를 더 많이 지불하기로 하면 언제든 쫒아낼 수 있음
  • 전용 호스트: 리조트 건물 전체를 예약하는 것.
    • 자신만의 하드웨어인 리조트를 가지게 되는 것과 같음
  • 용량 예약: 객실을 예약하고 싶은데 숙박 여부는 확실하지 않은 것.
    • 하지만 원할 때는 머물 수 있으며 그래서 숙박 여부와 관계 없이 전체 가격을 지불한다.

EC2 공동 책임 모델

AWS의 경우

  • 모든 데이터 센터인프라에 대한 보안 책임
  • 사용자가 물리적 호스트와 분리된 상태인지 확인하는 책임
    • ex) 전용 호스트를 얻는 경우
  • 서버 장애로 결함있는 하드웨어를 교체하거나 동의한 규정을 준수하고 있는지 확인해야 하는 책임

사용자의 경우

  • 클라우드 내의 보안을 책임
    • 사용자가 자체 보안 그룹 규칙을 정의한다는 것을 의미
    • EC2 인스턴스에 사용자 자신 또는 다른 사람의 액세스를 허용하는 것
  • EC2 인스턴스 내부에 전체 가상 머신을 소유함
    • 운영체제가 Linux나 Windows임을 뜻하며 모든 패치와 업데이트를 사용자가 해야 함
    • AWS는 가상 머신만 제공하며 사용 방법은 사용자에게 달린 것
  • 이는 EC2 인스턴스에 모든 소프트웨어와 유틸리티가 설치되어 있다는 뜻이며 모두 사용자의 책임이라는 뜻
  • IAM 역할의 할당 방법을 이해하고 권한이 올바른지 확인
  • 인스턴스 데이터가 안전한지 확인

References

0개의 댓글