AWS

[AWS] aws 강의 섹션 5 (EC2 심층 분석 - EC2 유형, 접속 방법, 구성 옵션, 보안 그룹)

대기업 가고 싶은 공돌이 2024. 9. 16. 07:35

Amazon EC2

  • EC2란 Elastic Compute Cloud의 약자로 Infrastructure as a Service다.
  • EC2란 단순한 하나의 서비스가 아니라 여러 기능을 포괄하는 개념이다.
    1. 가상 머신 빌리기
    2. EBS 볼륨이라는 드라이브에 데이터 저장
    3. 여러 머신에 부하를 분산하는 ELB (Elastic Load Balancer)
    4. 오토 스케일링 그룹 ASG
  • 단순하게 설명하자면 클라우드 컴퓨터를 임대하는 것이다.

EC2 sizing & 구성 옵션

EC2에서는 다양한 옵션을 선택하여 EC2를 만들 수 있다.

  1. EC2의 운영체제
    1. 리눅스
    2. 윈도우
    3. 맥 OS
  2. 컴퓨팅 파워 & 코어 수 (CPU)
  3. RAM 용량
  4. 스토리지 용량
    • 네트워크를 통해 접근한다면 EBS나 EFS를 사용할 수 있다.
    • 하드웨어를 통해 접근한다면 EC2 Instance Store를 사용할 수 있다.
  5. EC2 인스턴스에 연결할 네트워크 유형
    • 네트워크 카드 속도
    • 공개 IP 주소
  6. EC2의 방화벽 규칙 (보안 그룹)
  7. 부트스트랩 스크립트 (EC2 user data)

EC2 User Data

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

그렇다면 부트스트래핑이란 무엇일까?

BootStrapping 

부트스트래핑이란 머신이 시작할 때 명령을 실행하는 것이다. 

 

이 명령은 머신이 처음 시작할 때 한 번 실행되고, 이후 다시 실행되지 않는다. 

 

EC2 user data란 인스턴스가 시작될 때 스크립트나 명령어를 제공하는 기능이다

 

EC2는 이 user data에 지정된 스크립트를 자동으로 실행하여 필요한 작업을 수행한다.

이를 통해 부팅시 필요한 작업을 자동화 할 수 있다. (부트스트래핑과 같은 기능을 하므로 부트스트래핑이라고도 부른다.)

  1. 업데이트
  2. 소프트웨어 설치
  3. 인터넷에서 common files 다운로드
  4. 및 원하는 무엇이든

자동화가 가능하다. 

  • 사용자 데이터 스크립트에 작업을 더 많이 추가할 수록 부팅 시에 인스턴스가 할 일이 많아진다. 
  • EC2 User Data Script는 루트 사용자로 실행된다. (sudo 명령어로 실행됨)

EC2 instance type (예시)

EC2 생성

aws EC2로 들어가 새 인스턴스를 만들면 된다.

 

위에서 설명했던 운영체제, cpu 등등을 선택하다 보면, SSH 라는 것이 나온다.

 

SSH란 인스턴스에 로그인하기 위한 키페어를 의미한다.

 

키페어의 유형은

pem키와 ppk키가 있는데

 

윈도우 7,8이라면 ppk를 그 외의 버전에선 pem키를 선택하면 된다.

 

보안 그룹

이제 보안 그룹을 설정해야 한다.

 

보안 그룹이란 인스턴스에 접근하고 나가는 모든 유형을 제어하는 것이다.

 

말 그대로 http를 허용하고 싶다면 80 포트를 열어두면 되는 것이고, https를 허용하고 싶다면 443,,
을 허용하고 그렇게 포트나 ip주소를 제어하는 것이 보안 그룹이다.

 

 

스토리지

프리티어에서는 최대 30GB의 EBS 범용 SSD 스토리지를 사용할 수 있다. 

 

스토리지는 기본적으로 EC2 종료 시 삭제로 설정돼 있다. 

 

User Data

스크립트를 전달하는 기능이었다.

 

#!/bin/bash
# for script
# install httpd (Linux 2 version)
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "<h1>Hello World from $(hostname -f)</h1>" > /var/www/html/index.html

위와 같은 스크립트를 입력해보겠다.

 

업데이트, 웹 서버 다운로드, html 파일 작성 등등을 수행한다.

 

인스턴스를 생성하면 다음과 같이 public ip 주소를 얻을 수 있다.

 

이는 EC2 인스턴스에 액세스 하는데 사용된다. 

 

private ip 주소도 있는데 이는 AWS 네트워크 내부에서 해당 인스턴스에 액세스 하는데 사용된다.

 

이제 public ip 주소를 통해 EC2에 접근할 수 있다.

 

주의할 점

  1. 우리는 https로 배포한 것이 아니기 때문에 http:// 프로토콜을 앞에 입력해주고
    ip 주소를 입력해야 인스턴스에 접근할 수 있다. 
  2. 인스턴스를 중지했다 다시 재개하면 퍼블릭 ip 주소가 변경될 수 있다.
    private 주소는 변하지 않는다. 

 

EC2 유형

AWS naming 컨벤션

예) m5.2xlarge

위의 유형을 예시로 컨벤션을 설명해 보겠다.

 

맨 첫 글자 m은 instance class를 나타낸다. (m은 범용 인스턴스를 의미한다.)

 

두 번째 5는 세대를 나타한다. (m5를 개선한 모델을 만든다면 m6로 바뀔 것이다.)

 

마지막 . 이후의 2xlarge는 인스턴스 클래스 내에서 size를 나타낸다. 

(small, large, 2xlarge 4xlarge 등등이 있다.) 사이즈가 클 수록 더 많은 메모리와 CPU를 가지게 된다.

 

시험 관련해서는 무엇을 알아야 할까?

 

1. 범용 인스턴스 (General Purpose)

  • 범용 인스턴스는 웹 서버나 코드 저장소와 같은 다양한 작업에 적합하다.  
  • 컴퓨팅, 메모리, 네트워킹 간의 군형도 잘 맞는다.

2. 컴퓨팅 최적화 인스턴스 (Compute Optimize)

  • 컴퓨터 연산 집약적인 작업에 최적화된 인스턴스다.
  • 이 고성능 프로세서는
    1. 일부 데이터의 배치 처리,
    2. 미디어 트랜스 코딩 작업,
    3. 고성능 컴퓨팅 작업이라는 HPC 작업,
    4. 머신 러닝,
    5. 독립적으로 할당 된 게임 서버
      등등의 작업에 사용된다.
  • 컴퓨팅 최적화 인스턴스는 모두 C로 시작하는 이름을 가지고 있다.

3. 메모리 최적화 인스턴스 (Memory Optimize)

  • 메모리에서 대규모 데이터 셋을 처리하는 작업에 빠른 성능을 제공한다.
  • 메모리는 RAM을 뜻하고 사용 사례를 살펴보면 다음과 같다.
    1. 고성능 인 메모리 데이터베이스 
    2. 엘라스틱 캐시를 예로 들 수 있는 분산 웹 스케일 캐시 저장소 
    3. 인 메모리 데이터베이스에 최적화된 BI(business intelligence)
    4. 대규모의 비정형 데이터를 처리하는 애플리케이션 
  • 메모리 최적화 인스턴스는 RAM을 나타내는 R로 시작한다. 
  • 그러나 모두 R로 시작하는 것은 아니고 예외로 X1이나 대용량 메모리 Z1도 존재한다. 

4. 스토리지 최적화 인스턴스

  • 로컬 스토리지에서 대규모의 데이터 처리와 높은 I/O 성능이 필요할 때 적합한 인스턴스다.
    1. 고주파 온라인 트랜잭션 처리인 OLTP 시스템
    2. NOSQL 데이터 베이스
    3. 인메모리 데이터베이스 의 캐시 (Redis)
      데이터베이스의 내용을 캐시에 넣거나, 메모리의 데이터를 디스크에 저장할 때 고성능 스토리지가 필요함
    4. 데이터 웨어 하우징 애플리케이션  
    5. 분산 파일 시스템
  • 스토리지 최적화 인스턴스는 I,G,H1로 이름이 시작한다. 

방화벽 (Security Group)

  • EC2 인스턴스 안팎으로 트래픽이 허용되는 방식을 제어한다.
  • 허용 규칙만 설정하면 되기 때문에 관리가 쉽다.
  • 다른 보안 그룹을 참조하여 설정할 수도 있다.  

다음과 같이 인터넷에서 EC2로 접근할 때 inbound 규칙과 EC2에서 외부로 나가는 outbound 규칙을 정의할 수 있다.

 

  • Security Group은 EC2인스턴스의 방화벽이다. 제어 대상은 다음과 같다.
    1. Ports
    2. IP ranges
    3. inbound network
    4. outbound network
  • SSH는 22번 포트를 이용한다. 

보안 그룹의 장점

  1. 보안 그룹 하나를 만들어 두고 여러 곳에 재사용 할 수 있다.
  2. 보안 그룹은 특정 지역과 VPC 조합으로 이뤄진다. 
    (다른 region으로 전환하는 경우 새 보안 그룹을 생성해야 한다.)
    (다른 VPC를 생성한 경우에도 보안 그룹을 다시 생성해야 한다.)
  3. EC2 외부에 보안그룹이 존재하여 트래픽을 차단하면 EC2에 접근조차 하지 못 한다. 

    • (SSH 액세스를 위한 보안그룹을 하나 따로 만들어 놓는 것이 좋다.)
      (타임 아웃이 발생한다면 보안 그룹에 의한 접근 제어일 확률이 높다.)
      (연결 거부는 타임 아웃이 아닌 연결 거부 메세지가 나타난다.)
      (기본 설정은 모든 인바운드 차단, 모든 아웃 바운드 허용이다.)

보안 그룹을 공유할 때의 장점

위와 같이 같은 보안그룹을 사용하는 EC2가 있다면 해당하는 두 EC2는 IP 주소나 port 넘버를 허용하지 않아도 연결을 할 수 있다.

 

맨 마지막의 보안 그룹 3을 이용하는 EC2는 연결하지 못하는 것을 볼 수 있다.

 

 알아야 할 포트 번호

  1. 22 = SSH (Secure Shell) 22번 포트를 통해 리눅스에서 EC2 인스턴스에 연결할 수 있다.
  2. 21 = FTP(File Transfer Protocol) 파일 공유, 업로드에 사용되는 포트다.
  3. 22 = SFTP (Secure File Transfer Protocol) SSH를 통해 파일을 업로드 한다. 
  4. 80 = HTTP 보안되지 않은 웹사이트 접속
  5. 443 = HTTPS 보안된 웹사이트 접속
  6. 3389 = RDP(Remote Desktop Protocol) 원격 데스크탑 프로토콜용 포트 윈도우 인스턴스에 로그인하는데 사용된다.

SSH 로 인스턴스 연결하기

내 컴퓨터의 운영체제에 따라 연결 방법이 다르다.

  • putty는 SSH와 동일한 역할을 수행하는 윈도우용 SSH 라고 생각하면 된다.
  • EC2 Instance Connect는 웹 브라우저에서 연결하는 방법으로 모든 운영체제에 사용이 가능하다.

필자는 윈도우 10을 사용하니 SSH를 이용하여 접속해보겠다.

 

보안 그룹에 22포트가 열려있는지 잘 확인하고, 위의 명령어를 입력하면 ec2 인스턴스에 접속할 수 있다. 

 

EC2 Instance Connect로 연결하기

다음과 같이 EC2 -> 인스턴스 -> 연결을 클릭하면 다음 화면으로 이동할 수 있다.

 

사용자 이름은 Linux 기준으로 ec2-user을 입력하면 된다. 

 

이 연결을 사용할 때는 SSH키를 만들 필요가 없다. 

 

연결 시 AWS에서 임시 SSH 키를 업로드하는 방식으로 연결해주기 때문이다. 

 

연결만 누르면 바로 브라우저에서 EC2 인스턴스에 연결할 수 있다.

 

EC2 인스턴스를 위한 IAM Role 활용 예시

EC2 인스턴스 커넥트를 활용해보겠다.

 

AWS CLI를 사용하여 AWS 서비스에 접근할 건데, 

 

EC2 인스턴스 커넥트는 기본적으로 AWS CLI가 설치돼있다.

 

기억을 되돌려보자. 우선 AWS CLI로 접근하려면 aws configure을 통해 액세스 키를 입력해주면 됐었다.

 

그런데 EC2 인스턴스 커넥트를 사용할 때 aws configure을 사용하는 건 절대 안 된다고 한다.

 

  • 상세 정보를 입력해 두면, 계정 상의 누구라도 다시 EC2 인스턴스 커넥트를 통해
     configure에 입력된 정보로 AWS 서비스에 접근할 수 있기 때문이다. 
  • 따라서 절대 EC2 인스턴스 커넥트에서 액세스 키를 입력하지 말도록 하자.

그 대신에 사용할 수 있는 것이 IAM Role이라 한다.

 

저번에 만들어둔 EC2DemoIAMRole을 사용해보겠다. (모든 서비스에 대한 읽기 권한을 부여한 Role)

 

이 룰은 EC2 전용 Role로 만들어 뒀었다.

 

이 룰을 지금 사용 중인 EC2에 적용시켜 보자.

 

위와 같은 경로로 이동해서 역할을 부여하고 다시 접속해 보겠다.

 

aws configure 없이도 성공적으로 aws 서비스에 접근할 수 있다.

 

이렇게 IAM Role을 통해 EC2 인스턴스에 AWS credentials를 제공할 수 있다.

 

EC2 인스턴스에서 구매할 수 있는 것

  • on demand 인스턴스
    • 지끔까지 사용한 인스턴스다. 요청에 따라 언제든 인스턴스를 실행할 수 있어서,
      단기 작업에 어울리고, 가격을 예측할 수 있다. (사용한 만큼만 요금을 지불한다)
  • Reserved 인스턴스 (1~3년)
    • 장기 작업에 어울린다. 
    • 예약을 할 경우 더 저렴한 요금이 적용된다.
    • Convertible Reserved Instance:
      유연성이 있는 인스턴스가 필요할 경우, 시간에 따라 인스턴스의 유형을 변경할 경우 사용한다.
  • Savings Plans (1~3년)
    • 특정 사용량을 정해두고 사용하는 인스턴스다. 장기 작업에 어울린다.
    • 사용량에 따라 요금을 지불하지만 장기 계약이므로 가격이 저렴해진다. 
  • Spot Instances
    • 아주 짧은 단기용 인스턴스로 매우 저렴하다. 
    • 그러나 언제든 인스턴스가 손상될 위험이 있다.
  • Dedicated Hosts
    • 물리적 서버 전체를 예약하여 사용할 수 있다.
    • 서버의 하드웨어 리소스를 독점으로 사용할 수 있다.
    • CPU, 메모리, 스토리지 등등을 자기 입맛에 맞게 모두 제어할 수 있다.
      이게 가능한 이유는 한 사람이 독점적으로 인스턴스를 사용한다는 가정하에 있기 때문이다.
    • 다른 인스턴스 유형들은 모두 여러 명의 사용자를 기반으로 설계된 것이기 때문에 하드웨어의 조정이 불가능하다.
  • Capacity Reservations
    • 용량 예약을 통해 특정 AZ(가용 영역)의 용량을 원하는 기간 동안 예약할 수 있다. 
    • 미래에 서버 용량이 부족할 것을 대비해 특정 용량을 보장받고자 할 때 사용한다.

EC2  On Demand

  • 사용한 만큼 지불함
  • 윈도우나 리눅스를 사용하면 1분이 지난 이후부터 비용이 청구된다.
  • 그 외 운영체제는 시간당 비용이 청구된다.
  • 가격은 제일 높지만 선결제가 없고, 장기 약정도 필요하지 않다.
  • 연속적인 단기 작업에 추천한다.

EC2 Reserved 인스턴스

  • 온디맨드 방식에 비해 72퍼센트까지 비용을 절약할 수 있다.
  • 인스턴스 속성을 미리 다 정해놓고 시작한다. (인스턴스 타입, region, tenancy , OS ,,)
  • 예약 기간을 1년에서 3년 사이로 정할 수 있다. (당연히 3년이 할인률이 가장 높다)
  • 전체 선결제나 부분 선결제도 가능하고 후불도 가능하다. (전체 선결제가 할인률이 가장 높다.)
  • 인스턴스 적용 범위 : 특정 Region을 골라 범위를 제한 할 수 있고, AZ(가용 영역)의 용량을 예약할 수도 있다.
  • 애플리케이션이 안정된 상태로 사용되는 데이터베이스 등에 사용할 수 있다.
  • 마켓 플레이스에서 살 수 있다.

Convertible Reserved Instance

  • 인스턴스 유형, 운영체제, 범위, 테넌시 등등을 변경할 수 있다. 
  • 유연성이 높기 때문에 할인률은 줄어든다. 최대 66%까지 할인받을 수 있다.

EC2 Savings Plans

  • 온디맨스에 비해 70% 가까이 할인받을 수 있다.
  • 대신 시간당 10$ 정도의 비용을 1년에서 3년 동안 약정한다.
  • 특정 사용량을 정해두고 사용하는 것이기 때문에, 특정 사용량을 벗어나면
    해당 사용량은 온디맨드 가격으로 청구된다.
  • 세이빙 플랜은 특정 인스턴스 제품과 특정 리전에서만 사용할 수 있다.
    • us-east-1의 M5 dbgud ,,
    • 인스턴스 사이즈에 구애받지 않으므로 Xlarge, 2Xlarge 모두 가능하다.
    • 운영체제는 리눅스와 윈도우간 전환이 가능하다.
    • Tenancy의 경우 호스트, 전용 호스트로 전환이 가능하다. 

EC2 Spot Instance

  • 90%로 가장 파격적인 할인률이다.
  • 언제든지 중단될 수 있다.
  • 서비스가 중단되어도 복구하기 쉬운 작업에 큰 도움이 된다.
    • 배치 작업
    • 데이터 분석
    • 이미지 처리
    • 분산 작업
    • 시작 종료가 유동적인 작업
  • 물론 중요한 데이터 베이스 같은 작업에는 적합하지 않다.

Dedicated Hosts

  • 유저 맞춤형인 물리적 서버다. 
  • 전용 호스트가 필요한 경우
  • 라이센스 요구사항에 맞춰야 하는 경우
    • 오라클이나 마이크로소프트 라이센스는 서버의 CPU, 소켓, 코어에 따라 비용이 부과된다.
      이러한 조건을 충족시키기 위해 dedicated Host가 유용하다.
    • 또한 일부 기업 규제 요구사항에 따라, 특정 고객만 물리적 서버를 사용해야 하는 경우에도 적합하다.
  • 비용은 온디맨드로 지불하거나 1년 또는 3년으로 기간을 예약할 수도 있다.
  • AWS에서 가장 비싼 인스턴스 옵션이다.
  • 라이센스 모델과 함께 제공되는 소프트웨어 또는
    강력한 규제와 규정 준수가 필요한 경우에 사용해라

Dedicated Instance

  • dedicate Host의 간소화 버전이다.
  • 독점적으로 서버를 사용하는 것은 동일하나, 서버에 대한 직접적인 제어 권한은 없다.
  • 인스턴스 배치를 제어할 수 없다. (인스턴스가 어떤 것인지, 어떤 위치에 있는지에 대해 알 수 없다.)

dedicate 인스턴스는 사용자 하드웨어(서버)에 고유한 인스턴스를 갖는 것이고, 

dedicate 호스트는 물리적 서버 자체에 액세스 하여, 하드웨어에 대한 가시성 즉, 모든 통제권을 얻는 것이다.

 

EC2 Capacity Reservations

  • 원하는 기간동안 특정 가용 영역에 온디맨드 인스턴스를 예약할 수 있다.
  • 이후 필요할 때마다 해당 EC2에 접근할 수 있다.
  • 시간 약정이 없기 때문에 언제든지 예약하거나 취소할 수 있다.
  • 요금 할인은 없다. 오로지 용량 예약만을 위해 사용된다.
  • 요금을 할인 받으려면 다른 유형 (Saving plans같은)것과 연결시켜야 한다.
  • 인스턴스 실행 여부와 관계 없이 온디맨드 요금이 청구된다. 
  • 특정 Region에서 단기적인 작업을 수행할 때 적합하다. 

문제: 특정 상황에서 어떤 플랜을 사용해야 할지