본문 바로가기

메가존 클라우드 2기 교육/AWS

AWS - 비용, VPC, EC2, VPC Peering, EBS, EBS Snapshot

AWS란?

Amazon Web Services(AWS)는 전 세계적으로 분포한 데이터 센터에서 175개가 넘는 완벽한 기능의 서비스를 제공하는, 세계적으로 가장 포괄적이며, 널리 채택되고 있는 클라우드 플랫폼이다.

빠르게 성장하는 스타트업, 가장 큰 규모의 엔터프라이즈, 주요 정부 기관을 포함하여 수백만 명의 고객이 AWS를 사용하여 비용을 절감하고, 민첩성을 향상시키고, 더 빠르게 혁신하고 있다.

 

AWS의 특장점

  • 초기 비용 없이 사용한 만큼만 지불하는 종량 과금제 방식
  • 온프레미스 서버 구축 기간과 비교하여 빠른 인프라 구축 속도
  • 온프레미스 서버 환경의 리소스 확장 시와 달리 사전 리소스 확보 불필요
  • 인스턴스(가상 서버) 라이프사이클의 손쉬운 관리
  • 고가용성 및 무정지 장애허용 시스템 구축에 필요한 서비스 제공
  • API 제공으로 서비스 관리 자동화 용이

 


AWS 비용

  • 온 디맨드 인스턴스: 짧은 워크로드, 예측 가능한 가격
  • 예약 : (최소 1년)
    • 예약 인스턴스: 긴 워크로드
    • 가변 예약 인스턴스: 유연한 인스턴스가 있는 긴 워크로드
    • 스케쥴 예약 인스턴스: ex) 매주 목요일 오후 3시에서 6시 사이
  • 스팟 인스턴스: 짧은 워크로드, 저렴하지만 인스터스를 잃을 수 있음.
  • 전용 호스트: 전체 물리적 서버를 예약하고 인스턴스 배치를 제어해야함.

온 디맨드 인스턴스

  • 사용한 만큼 요금 지불 (첫 번째 1분후 초당 청구)
  • 비용은 가장 높지만 선불 결제는 없다.
  • 장기 약정이 없다.
  • 애플리케이션의 작동 방식을 예측할 수 없는 단기 및 중단 없는 워크로드에 권장

예약 인스턴스

  • 주문형에 비해 최대 75% 할인
  • 장기 약정으로 사용한 것에 대해 선결제
  • 예약 기간은 1년 또는 3년
  • 특정 인스턴스 유형을 예약
  • 정상 상태 사용 응용 프로그램 (데이터베이스)에 권장
  • 가변 예약 인스턴스
    • EC2 인스턴스 유형을 변경할 수 있다.
    • 최대 54% 할인
  • 스케쥴된 예약 인스턴스
    • 예약 한 시간 내에 시작

스팟 인스턴스

  • 주문형에 비해 최대 90% 할인
  • 최대 가격이 현재 스팟 가격보다 낮은 경우 언제든지 "손실"할 수 있는 인스턴스
  • AWS에서 가장 비용 효율적인 인스턴스
  • 장애에 탄력적인 워크로드에 유용
    • Batch 작업
    • 데이터 분석
    • 이미지 처리
  • 중요한 작업이나 데이터베이스에는 적합하지 않음
    • 그레이트 콤보: 기준선 + 예약 주문형 및 피크에 대한 스팟 예약 인스턴스

전용 호스트

  • 한 사용자를 위한 물리적 전용 EC2 서버
  • EC2 인스턴스 배치를 완전히 제어
  • 3년 동안 사용자의 계정에 할당
  • 비용이 비싸다
  • 복잡한 라이선싱 모델 (BYOL - Bring Your Own License: 기존 보유 라이센스 사용)이 있는 소프트웨어에 유용
  • 또는 강력한 규제 또는 규정 준수 요구가 있는 회상의 경우.
가격 비교표

 


Amazon VPC

VPC란?

사용자가 정의한 가상 네트워크로 AWS 리소스를 시작할 수 있다. 이 가상 네트워크는 AWS의 확장 가능한 인프라를 사용한다는 이점과 함께 고객의 자체 데이터 센터에서 운영하는 기존 네트워크와 매우 유사하다.

  • Virtual Private Colud (VPC): 사용자의 AWS 계정 전용 가상 네트워크. 전체 네트워크 주소 범위는 172.31..0.0./16 (리전 단위)

  • 서브넷: 각자의 AZ에 1개씩 네트워크 주소가 할당된 VPC의 IP 주소 범위. ( ex. 172.31.0.0./20, 172.31.16.0/20, 172.31.32.0/20, 172.31.48.0/20 .....)

VPC 생성

이름 태그와 IPv4 네트워크 주소를 기입한다.

 

'DNS 호스트 이름 활성화'를 해주는 것이 좋다.

'my-vpc' 생성 완료.

서브넷 생성

 '서브넷 추가'를 눌러 다음 서브넷들을 추가한다. (이름에 맞는 가용영역을 고른다.)

  • my-pub-2a: 10.31.0.0/20
  • my-pub-2b: 10.31.16.0/20
  • my-pub-2c: 10.31.32.0/20
  • my-pub-2d: 10.31.48.0/20
  • my-pvt-2a: 10.31.64.0/20
  • my-pvt-2b: 10.31.80.0/20
  • my-pvt-2c: 10.31.96.0/20
  • my-pvt-2d: 10.31.112.0/20
20비트로 서브넷팅을 한다. (아직 라우팅을 안해서 이름처럼 public은 아니지만 곧 할것이다.)

총 8개의 서브넷 생성 완료.

Public 서브넷들만 해야할 설정 편집이 있다.

'퍼블릭 IPv4 주소 자동 할당 활성화'를 통해크게 신경 안써도 무료로 주는 변동 가능한 공인 아이프를 받는다.

인터넷 게이트웨이 생성

인터넷 게이트웨이가 있어야지 라우팅 테이블을 통해 퍼블릭 서브넷들을 진짜로 'Public'으로 만들 수 있다.

이름만 설정하면 생성 끝.

게이트웨이와 vpc는 1:1로만 연결된다. (그래서 목록에 새로 생성한 게이트웨이만 나타난다.)

라우팅 테이블 편집

내부 말고도 외부의 아이피에 대해서 인터넷 게이트웨이로 연결되도록 라우팅.

'서브넷 연결 - 명시적 서브넷 연결'을 통해 다음 서브넷들을 퍼블릭하게 설정.

이제 프라이빗을 위한 라우팅 테이블을 생성한다.

프라이빗 전용 라우팅 테이블 'my-pvt-rtv' 생성

프라이빗이므로 내부 아이피에 대해서만 라우팅하면 된다.(디폴트값 그대로)
프라이빗 서브넷들을 연결

 


EC2 (Elastic Compute Cloud)

EC2란?

안전하고 크기 조정이 가능한 컴퓨팅 자원을 클라우드에서 제공하는 웹 서비스.

개발자가 더 쉽게 웹 규모의 클라우드 컴퓨팅 작업을 할 수 있도록 설계.

Amazone EC2의 간단한 웹 서비스 인터페이스를 통해 간편하게 필요한 용량을 얻고 구성할 수 있다.

컴퓨팅 리소스에 대한 포괄적인 제어권을 제공하며, Amazon의 검증된 컴퓨팅 환경에서 실행할 수 있다.


EC2 인스턴스 생성

#!/bin/bash
yum install -y httpd
systemctl enable --now httpd
echo "<h1>seoul</h1>" > /var/www/html/index.html

 

 


VPC Peering

VPC Peering이란?

VPC 피어링 연결은 프라이빗 IPv4 주소 또는 IPv6 주소를 사용하여 두 VPC 간트래픽을 라우팅할 수 있도록 하기 위한 두 VPC 사이의 네트워킹 연결이다.

  • 동일한 네트워크에 속하는 경우와 같이 VPC와 인스턴스가 서로 통신할 수 있다. (서로의 프라이빗 끼리 통신 가능)
  • 사용자의 자체 VPC 또는 다른 AWS 계정의 VPC와 VPC 피어링 연결을 만들 수 있다. (ex: 거래처와의 연결)
  • VPC는 다른 리전에 있을 수 있다.(리전 간 VPC 피어링 연결이라고도 함)
  • AWS는 VPC의 기존 인프라를 사용하여 VPC 피어링 연결을 생성한다. 이는 게이트웨이도, VPN 연결도 아니며 물리적 하드웨어 각각에 의존하지 않는다.

도쿄 EC2 생성

리전을 '도쿄'로 이동.
키는 리전별로 있으므로, 키 페어를 새로 생성해야한다.
#!/bin/bash
apt update
apt install -y apache2
echo "<h1>tokyo</h1>" > /var/www/html/index.html

이제 MobaXterm으로 접속한다.

seoul 접속
tokyo 접속

두 리전들은 인터넷을 통한 퍼블릭 접속은 잘 된다. 하지만, 프라이빗 주소로는 아직 통신이 안된다. (VPC가 다르기 때문)

서울 리전에서 도쿄 리전으로 퍼블릭 주소로 연결은 되나 프라이빗은 안된다.
반대로 도쿄에서 서울로 퍼블릭 주소는 연결되나, 프라이빗은 안된다.

피어링 연결 생성

이제, VPC 피어링을 통해 두 리전 끼리 퍼블릭이 아닌 프라이빗 주소로도 통신이 되도록 해줄 것이다.

먼저 서울 리전에서 피어링 연결 요청을 보낸다.

VPC가 나의 계정인지 남의 계정인지, 또 같은 리전인지 다른 리전인지 택할 수 있다.
피어링 연결 성공.

이제 도쿄 리전에서 피어링 연결을 수락한다.

수락 대기 중.
요청 수락

아직 VPC가 연결이 됐을 뿐, 서로 다른 네트워크 주소인데 라우팅 테이블 세팅이 안됐으므로, 아직 트래픽 송수신이 안된다.

그러므로 라우팅 테이블을 설정해준다.

도쿄의 라우팅 정보를 보면 도쿄 리전의 네트워크 주소만 가지고 있고 서울의 정보가 없다..
서울 리전의 라우팅 정보를 추가한다. (도쿄에서 서울로)

트래픽은 양방향이므로, 반대쪽인 서울에서도 라우팅 정보를 해야한다.

마찬가지로 서울은 도쿄의 라우팅 정보가 없다.
도쿄 리전의 라우팅 정보를 추가한다. (서울에서 도쿄로)

이제 서로의 프라이빗 주소끼리 통신이 된다.

서울에서 도쿄로
도쿄에서 서울로

Route 53

Route 53이란?

Amazon Route 53을 도메인의 DNS 서비스 (예: example.com)로 사용할 수 있다.

Route 53이 DNS 서비스인 경우, www.example.com과  과 같은 친숙한 도메인 이름을 컴퓨터 간 연결에 사용되는 192.0.2.1 등 숫자 IP 주소로 변환하여 인터넷 트래픽을 웹 사이트로 라우팅합니다.

사용자가 브라우저에 도메인 이름을 입력하거나 이메일을 보내면 DNS 쿼리가 Rotue 53에 전달되며 이에 따라 적절한 값으로 응답한다. 예를 들어 Route 53은 example.com 웹 서버의 IP 주소를 사용하여 응답할 수 있다.

 


EBS (Elastic Block Store)

EBS (Elastic Block Store)이란?

인스턴스에 사용할 수 있는 블록 수준 스토리지 볼륨을 제공한다.

EBS 볼륨은 형식이 지정되지 않은 원시 블록 디바이스처럼 동작한다. 이러한 볼륨을 인스턴스에 디바이스로 마운트할 수 있다.

동일한 인스턴스에 여러 볼륨을 탑재하고 한 번에 여러 인스턴스에 볼륨을 탑재할 수 있다. 이러한 볼륨 위에 파일 시스템을 생성하거나 하드 드라이브와 같은 블록 디바이스를 사용하는 것처럼 볼륨을 사용할 수 있다.

인스턴스에 연결된 볼륨의 구성을 동적으로 변경할 수 있다.

스토리지 확장에 용이하며, 미리 준비할 필요 없이 서비스 중에도 필요할 때 마다 추가 가능하다.


EBS 생성 및 불륨 마운트


## 불륨 마운트
# 포멧
sudo mkfs -t ext4 /dev/xvdf

# 마운트
sudo mount /dev/xvdf /mnt
마운트 성공.

루트 불륨 확장

콘솔 창에서 볼륨 수정을 통해 불륨 크기를 늘린다.
루트 불륨 확장된 것처럼 보이나, 더 해줘야 할 작업이 있다.
실제로 10G인거 처럼 보이지만, 파티션이 된 'xvda1'가 실질적인 불륨이다. 즉, 표면상으론 10G지만 실질적으론 8G이다.

## 루트 불륨 확장
# xvda의 1번 파티션의 용량을 늘려줌.
sudo growpart /dev/xvda 1
1번 파티션의 용량도 똑같이 10G로 늘어났다.

 

하지만 실제로 사용되는 디스크 공간은 아직 8G 그대로이다.

# xvda1가 마운트된 '/'의 크기도 수정한다.
sudo xfs_growfs -d /
10G로 늘어났다.

다시 정리하자면, 

1. 콘솔창에서 불륨의 크기를 늘린다.

2. 파티션의 용량도 크기를 늘린다.

3. 마운트된 디렉토리의 크기도 늘린다.

이 세개의 과정을 거쳐야 루트 불륨의 크기를 확장할 수 있다.

 


EBS Snapshot

EBS Snapshot이란?

EBS 볼륨의 특정 시점 스냅샷을 생성하여 새 볼륨이나 데이터 백업의 기준으로 사용할 수 있다.

볼륨의 스냅샷이 주기적으로 생성되는 경우 스냅샷은 증분식이어서 새 스냅샷은 마지막 스냅샷 이후 변경된 블록만 저장한다.

연결되어 사용 중인 볼륨의 스냅샷을 만들 수 있다. 하지만 스냅샷은 snapshot 명령을 실행할 때 Amazon EBS 볼륨에 기록된 데이터만 캡처한다. 이때 애플리케이션이나 운영 체제에 의해 캐시된 데이터가 제외될 수 있다.


스냅샷 생성

 테스트를 위한 파일을 'seoul' 서버에 MobaXterm으로 업로드한다.

# food.tar파일을 다음 경로에 풀기
sudo tar xvf food.tar -C /var/www/html
이러한 페이지를 스냅샷으로 남기고 스냅샷을 이용해 다시 만들 계획이다.

태그를 추가한다.
스냅샷 생성 완료.

스냅샷으로 이미지 생성

스냅샷 자체로 인스턴스를 만들 수 없으므로, 이미지를 생성해야한다.

이름만 정해주고 이미지 생성

스냅샷으로 생성한 이미지를 다른 리전으로 전송

도쿄 리전으로 복사

도쿄 리전으로 전송된 것을 확인 가능
스냅샷도 따라 전송됐다. (스냅샷은 꼭 이미지를 따라 다닌다.)

 복사한 AMI로 인스턴스 시작


스냅샷으로 생성한 이미지가 그대로 적용됐다.

mumbai 인스턴스 생성 완료.
전에 만들었던 페이지도 이미지에 잘 저장됐다.