Zero To One

S3, EC2, RDS에 관하여 본문

AWS

S3, EC2, RDS에 관하여

Zero_To_One 2022. 3. 14. 12:36

1. 개요

출처 : https://hoonmaro.tistory.com/26

위 그림에서 웹서버는 정적 리소스를 제공하는 nginx,

웹 에플리케이션 서버는 express 혹은 fastify,

데이터베이스는 mongodb를 사용했다. 

 

이제는 AWS에 매치 시켜보자.

AWS

  • nginx -> S3
  • fastify -> EC2
  • DB -> RDS

들어가기 앞서 짧게 요약하겠다.

  • S3 -> Storage
  • EC2 -> Compute
  • RDS -> Relational Datavase Service (관계형 데이터 베이스, SQL)

2. EC2 란?

  • Elastic Compute Cloud의 약자로써 컴퓨터를 하나 빌린다 라고 이해하면 된다.
  • EC2 서비스는 후불제 PC방과 같이 사용한 만큼비용을 지불하기 때문에 '탄력적인'이라는 의미의 Elastic이라는 단어가 붙어있다.
  • Elastic은 비용적인 부분뿐만이 아니라 필요에 따라 성능, 용량을 자유롭게 조절할 수 있다는 의미도 가지고 있다.
  • 정리하자면 EC2 서비스는 AWS에서 비용, 성능, 용량 면에서 탄력적인 클라우드 컴퓨터를 제공하는 서비스이다.

할 수 있는 일

  • 웹서버를 설치하고 웹 서버를 통해서 사용자가 웹 브라우저를 통해 요청하는 서비스를 제공하는 것

Instance?

  • 1대의 컴퓨터를 의미하는 단위
  • AWS에서 컴퓨터를 빌리는 것을 인스턴스를 생성한다는 뜻

AMI?

  • AMI(Amazon Machine Image)는 소프트웨어 구성이 기재된 템플릿
  • AWS에서 빌릴 PC를 사용용도에 맞게 운영체제, 런타임 등이 구성된 setting을 할 수 있다.
  • Instance는 선택한 AMI를 토대로 구성된다.

EBS?

  • EC2 인스턴스를 위한 영구 스토리지로, EC2의 수명주기(중단, 시작 등의 lifecycle)와 무관하게 데이터의 보관이 가능하다.

보안그룹?

    • 보안 그룹은 같은 리전, VPC에 속해있는 여러 개의 EC2 인스턴스에 적용할 수 있다.
    • 보안 그룹은 EC2 인스턴스에 대한 수신 및 발신 트래픽을 제어하는 가상 방화벽 역할을 합니다. 인바운드 규칙은 인스턴스로 들어오는 트래픽을 제어하고 아웃바운드 규칙은 인스턴스에서 나가는 트래픽을 제어합니다. 인스턴스를 시작할 때 하나 이상의 보안 그룹을 지정할 수 있습니다. 보안 그룹을 지정하지 않을 경우 Amazon EC2에서 기본 보안 그룹이 사용됩니다. 연결된 인스턴스에서 트래픽을 주고 받을 수 있도록 하는 규칙을 각 보안 그룹에 추가할 수 있습니다. 언제든지 보안 그룹에 대한 규칙을 수정할 수 있습니다. 새 규칙 및 수정된 규칙은 보안 그룹에 연결된 모든 인스턴스에 자동으로 적용됩니다. Amazon EC2는 트래픽이 인스턴스에 도달하도록 허용할지 여부를 결정할 때 인스턴스와 연결된 모든 보안 그룹에서 모든 규칙을 평가합니다.

보안 그룹의 규칙이 지닌 특징은 다음과 같습니다.

    • 기본적으로 보안 그룹은 모든 아웃바운드 트래픽을 허용합니다.
    • 보안 그룹 규칙은 언제나 허용 여부만 정할 수 있고 거부 여부는 정할 수 없습니다.
    • 보안 그룹은 스테이트풀(Stateful) 속성을 지닙니다. 인스턴스에서 요청을 보내면, 해당 요청에 대한 응답 트래픽은 보안 그룹의 인바운드 규칙과 무관하게 전달이 허용됩니다.
    • 보안 그룹 규칙은 언제든 추가 또는 삭제 할 수 있습니다. 변경 사항은 짧은 시간 내에 해당 시큐리티 그룹에 연결된 모든 인스턴스에 적용됩니다.
    • 하나의 인스턴스에 여러 개의 시큐리티 그룹을 연결할 경우 각 시큐리티 그룹의 규칙은 단일 규칙 세트로서 인스턴스에 적용되고 사용자는 이 규칙 세트를 통해 트래픽의 허용 여부를 결정할 수 있습니다.
  • https://docs.aws.amazon.com/ko_kr/ko_kr/AWSEC2/latest/UserGuide/ec2-security.html
 

Amazon EC2의 보안 - Amazon Elastic Compute Cloud

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

키페어?

  • 퍼블릭 키와 프라이빗 키로 구성되는 키 페어는 Amazon EC2 인스턴스에 연결할 때 자격 증명 입증에 사용하는 보안 자격 증명 집합입니다. Amazon EC2는 퍼블릭 키를 인스턴스에 저장하며 프라이빗 키는 사용자가 저장합니다. Linux 인스턴스의 경우 프라이빗 키를 사용하여 인스턴스에 안전하게 SSH로 연결할 수 있습니다. 프라이빗 키를 소유하는 사람은 누구나 인스턴스에 연결할 수 있으므로 보안된 위치에 프라이빗 키를 저장해 두는 것이 중요합니다.
  • https://docs.aws.amazon.com/ko_kr/ko_kr/AWSEC2/latest/UserGuide/ec2-key-pairs.html
 

Amazon EC2 키 페어 및 Linux 인스턴스 - Amazon Elastic Compute Cloud

안전한 장소에 프라이빗 키 파일을 저장합니다. 인스턴스를 시작할 때 퍼블릭 키의 이름을 제공하고, 인스턴스에 연결할 때마다 해당 프라이빗 키를 제공해야 합니다.

docs.aws.amazon.com

 

네트워킹?

프라이빗 IPv4

  • 프라이빗 IPv4 주소는 인터넷을 통해 연결할 수 없는 IP 주소입니다. 프라이빗 IPv4 주소는 동일 VPC에서 인스턴스 간의 통신을 위해 사용합니다. 인스턴스를 시작할 때 인스턴스에 기본 프라이빗 IPv4 주소와 내부 DNS 호스트 이름이 할당됩니다.

퍼블릭 IPv4

  • 퍼블릭 IP 주소는 인터넷을 통해 연결할 수 있는 IPv4 주소입니다. 퍼블릭 주소는 인스턴스와 인터넷의 상호 통신을 위해 사용될 수 있습니다.

인스턴스에서 퍼블릭 IP 주소(IPv4)를 수동으로 연결하거나 연결 해제할 수 없습니다. 어떤 경우에는 Amazon에서 귀하의 인스턴스로부터 퍼블릭 IP 주소를 해제하거나 새 인스턴스에 할당합니다:

  • 인스턴스가 중지되거나 최대 절전 모드로 전환되거나 종료되면 인스턴스의 퍼블릭 IP 주소는 릴리스됩니다. 중지되거나 최대 절전 모드로 전환된 인스턴스가 시작되면 새 퍼블릭 IP 주소가 할당됩니다.
  • 탄력적 IP 주소를 인스턴스와 연결하는 경우 인스턴스의 퍼블릭 IP 주소가 릴리스됩니다. 사용자가 인스턴스에서 탄력적 IP 주소의 연결을 해제하면 새 퍼블릭 IP 주소가 할당됩니다.
  • VPC 인스턴스의 퍼블릭 IP 주소가 해제되고 인스턴스에 1개 이상의 네트워크 인터페이스가 연결된 경우 새 퍼블릭 IP 주소가 할당되지 않습니다.
  • 인스턴스의 퍼블릭 IP 주소가 릴리스된 가운데 탄력적 IP 주소와 연결된 보조 프라이빗 IP 주소를 보유한 경우 인스턴스는 새 퍼블릭 IP 주소를 수신하지 않습니다.

Elastic IP?

  • 탄력적 IP 주소는 동적 클라우드 컴퓨팅을 위해 고안된 정적 IPv4 주소입니다. 탄력적 IP 주소는 AWS 계정에 할당되며 릴리스할 때까지 할당된 상태로 유지됩니다. 탄력적 IP 주소를 사용하면 주소를 계정의 다른 인스턴스에 신속하게 다시 매핑하여 인스턴스나 소프트웨어의 오류를 마스킹할 수 있습니다. 또는 도메인이 인스턴스를 가리키도록 도메인에 대한 DNS 레코드에 탄력적 IP 주소를 지정할 수 있습니다.
  • 탄력적 IP 주소의 효율적인 사용을 위해 탄력적 IP 주소가 실행 중인 인스턴스와 연결되어 있지 않거나 중지된 인스턴스 또는 연결되지 않은 네트워크 인터페이스와 연결된 경우 소액의 시간당 요금이 부과됩니다. 인스턴스가 실행 중인 동안에는 이와 연결된 탄력적 IP 주소 하나에 대해서는 요금이 부과되지 않지만 해당 인스턴스와 연결된 추가 탄력적 IP 주소에 대해서는 요금이 부과됩니다.
  • https://docs.aws.amazon.com/ko_kr/ko_kr/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html
 

탄력적 IP 주소 - Amazon Elastic Compute Cloud

탄력적 IP 주소 탄력적 IP 주소는 동적 클라우드 컴퓨팅을 위해 고안된 정적 IPv4 주소입니다. 탄력적 IP 주소는 AWS 계정에 할당되며 릴리스할 때까지 할당된 상태로 유지됩니다. 탄력적 IP 주소를

docs.aws.amazon.com

 

 

즉, EC2 인스턴스를 생성한다는 것은 AMI를 토대로 운영체제, CPU, RAM 혹은 런타임 등이 구성된 컴퓨터를 빌리는 것이다.

 

 

인스턴스 수명 주기

 

 

인스턴스 상태 인스턴스 설명 사용요금
pending 인스턴스는 running 상태로 될 준비를 하고 있습니다. 인스턴스를 처음 시작하거나 pending 상태의 인스턴스를 다시 시작하면 stopped 상태가 됩니다. 미청구
running 인스턴스를 실행하고 사용할 준비가 되었습니다. 청구
stopping 인스턴스가 중지 또는 중지-최대 절전 모드로 전환할 준비를 하고 있습니다. 중지 준비 중인 경우 미청구
최대 절전 모드로 전환 준비 중인 경우 청구
stopped 인스턴스가 종료되고 사용이 불가합니다. 언제든지 인스턴스를 다시 시작할 수 있습니다. 미청구
shutting-down 인스턴스가 종료할 준비를 하고 있습니다. 미청구
terminated 인스턴스가 영구적으로 삭제되었으며 시작할 수 없습니다. 미청구

자세한 내용은 하단 링크 참조.

https://docs.aws.amazon.com/ko_kr/ko_kr/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html

 

인스턴스 수명 주기 - Amazon Elastic Compute Cloud

인스턴스를 재부팅해도 running 상태로 남아있기 때문에 새 인스턴스 청구 기간이 시작되지 않습니다.

docs.aws.amazon.com

 

3. S3란?

1. 클라우드 스토리지 개념

  • 인터넷 공간에 데이터를 저장하느 저장소
  • Goole Drive, Onedrive...
  • 웹 환경이라면 어느 기기든 저장된 데이터에 접속 가능

2. S3

  • Simple Storage Service, AWS에서 제공하는 클라우드 스토리지 서비스
  • 높은 확장성 (많은 시간과 수고를 들이지 않고 스토리지의 규모를 확장/축소 가능)
  • 스토리지 용량 무한 확장 가능(사용한 만큼만 비용 지불)
  • 강력한 내구성 보장 (저장된 파일 유실 가능성 적음, 99.999999999% 내구성 보장)

3. 높은 가용성과 내구성 보장 가능 이유?

  • 주황색 동그라미 : 리전(Reion), AWS에서 클라우드 서비스를 제공하기 위해 운영하는 물리적인 서버의 위치
  • 동그라미 안 숫자 : 리전에 위치한 가용 영역의 수
    • 가용영역(Availability Zone)이란? 각 리전안에 존재하는 데이터 센터(IDC)
  • 한 곳의 가용 영역이 재난이나 사고로 가동불가 -> 다른 가용 영역에 백업해 놓기 때문에 문제 없음

4. 스토리지 클래스

 

Amazon S3 스토리지 클래스 사용 - Amazon Simple Storage Service

S3 Glacier Flexible Retrieval 또는 S3 Glacier Deep Archive 스토리지 클래스를 선택하면 객체가 Amazon S3에 그대로 유지됩니다. 별도의 Amazon S3 Glacier 서비스를 통해 객체에 직접 액세스할 수 없습니다.

docs.aws.amazon.com

5. 정적 웹 사이트 호스팅 가능

  • 정적파일 : 서버의 개입 없이 클라이언트에 제공될 수 있는 파일
  • 웹 호스팅 : 서버의 한 공간을 빌려주어 웹 사이트의 배포, 운영이 가능하게 해주는 서비스
  • S3에서는 버킷을 통해 정적 웹 사이트 호스팅이 가능
    • 버킷?
      • 버킷은 파일을 담는 바구니(최상위 디렉토리)
      • 무한히 많은 파일 저장 가능
      • 버킷의 이름은 각 리전에서 고유해야함
      • 버킷의 정책을 생성하여 액세스 권한 부여 가능
    • 객체?
      • S3에서 버킷에 담기는 파일을 객체라 부름(key-value 형식)
      • 객체는 파일과 메타데이터로 구성
        • 메타데이터? - 객체의 생성일,크기,유형과 같은 객체의 정보가 담긴 데이터
      • 모든 객체는 고유한 키를 가짐
      • URL 주소를 통해서 객체에 접근 가능
      • http://[버킷 이름].S3.amazonaws.com/[객체의 키]

 

액세스 정책 권한을 특정 스토리지 클래스로 제한

Amazon S3 작업에 대한 액세스 정책 권한을 부여할 때는 s3:x-amz-storage-class 조건 키를 사용하여 업로드된 객체를 저장할 때 사용할 스토리지 클래스를 제한할 수 있습니다. 예를 들어 s3:PUTObject 권한을 부여하면 객체 업로드를 특정 스토리지 클래스로 제한할 수 있습니다.

 

EBS?

Amazon Elastic Block Store(Amazon EBS)는 EC2 인스턴스에 사용할 수 있는 블록 수준 스토리지 볼륨을 제공합니다. EBS 볼륨은 형식이 지정되지 않은 원시 블록 디바이스처럼 동작합니다. 이러한 볼륨을 인스턴스에 디바이스로 마운트할 수 있습니다. 인스턴스에 연결된 EBS 볼륨은 스토리지 볼륨으로 표시되며, 인스턴스 수명에 관계없이 지속됩니다. 이러한 볼륨 위에 파일 시스템을 생성하거나 하드 드라이브와 같은 블록 디바이스를 사용하는 것처럼 볼륨을 사용할 수 있습니다. 인스턴스에 연결된 볼륨의 구성을 동적으로 변경할 수 있습니다.

데이터에 빠르게 액세스하고 장기적으로 지속해야 하는 경우 Amazon EBS를 사용하는 것이 좋습니다. EBS 볼륨은 세분화된 업데이트가 필요하고 형식이 지정되지 않은 블록 수준의 원시 스토리지에 액세스해야 하는 파일 시스템, 데이터베이스 또는 애플리케이션의 기본 스토리지로 사용하기에 특히 적합합니다. Amazon EBS는 임의 읽기 및 쓰기에 의존하는 데이터베이스 스타일의 애플리케이션과 장시간의 지속적인 읽기 및 쓰기를 수행하는 처리량 집약적 애플리케이션에 모두 적합합니다.

 

EFS?

Amazon Elastic File System (Amazon EFS) 은 다음과 같이 사용할 수 있는 간단한 서버리스 Elastic File SystemAWS 클라우드서비스 및 온프레미스 리소스. 애플리케이션을 중단하지 않고 온디맨드 방식으로 페타바이트 규모까지 확장되도록 구축되어, 사용자가 파일을 추가하고 제거할 때 자동으로 확장/축소되므로 데이터 증가에 맞춰 용량을 프로비저닝 및 관리할 필요가 없습니다. Amazon EFS에는 파일 시스템을 빠르고 쉽게 만들고 구성할 수 있는 간단한 웹 서비스 인터페이스가 있습니다. 이 서비스에서 모든 파일 스토리지 인프라를 관리해 주므로 사용자는 복잡한 파일 시스템 구성을 배포, 패치 및 유지 보수하는데 따르는 복잡성에서 벗어날 수 있습니다.

 

4) RDS란?

RDS는 Relational Database Service의 약자로 AWS에서 제공하는 관계형 데이터베이스 서비스 이다.

 

사용이유?

  • EC2 인스턴스를 사용하면 데이터베이스와 관련해서 자동으로 관리를 담당하는 부분이 매우 적기 때문에, 사용자가 일일이 시간을 투자하여 데이터베이스 엔진의 설치와 버전 관리, 데이터 백업을 해야 한다.
  • 가용성과 내구성이 확보되지 않기 때문에 데이터베이스에 저장된 데이터가 유실되거나 정상적으로 사용하지 못할 확률이 커지며, 후에 필요에 따라 데이터베이스의 규모를 확장하기 어렵다.
  • 그러나, RDS를 이용하면 데이터베이스 유지 보수와 관련된 일들을 RDS에서 전적으로 자동 관리한다. 사용자가 해야 할 일은 초기 설정을 제외하고 데이터베이스에 저장된 데이터를 관리하는 일 밖에 없기에 큰 편의성을 느낄 수 있다.
  • 다양한 데이터베이스 엔진 선택지를 제공하고 있어 필요와 목적에 맞게 데이터베이스 엔진을 선택하여 효율성을 높일 수 있다.

AWS는 관계형 데이터베이스 호스팅 및 관리 서비스인 Amazon Relational Database Service(RDS)를 제공하며, 다음과 같은 RDBMS 엔진을 사용할 수 있다.

  • Aurora MySQL
  • Aurora PostgreSQL
  • Oracle
  • SQL Server
  • MySQL
  • PostgreSQL
  • MariaDB

관계형 데이터베이스를 호스팅하기 위한 주요 시나리오

시나리오1 : 온프레미스 데이터 센터에 데이터베이스 호스팅

사용자의 데이터 센터에 데이터베이스를 호스팅하면 전원, 네트워크 환경설정, 서버 환경설정부터 애플리케이션 최적화, 데이터베이스 소프트웨어 업그레이드 등까지 데이터 센터 운영을 위한 제반 업무를 모두 수행해야 합니다.

시나리오2 : Amazon EC2 서버에 데이터베이스 호스팅

EC2 서버에 데이터베이스를 호스팅하면 사용자는 DB 소프트웨어 설치, 패치, 데이터베이스 백업, 앱 최적화등을 관리하고, AWS는 OS설치, 서버유지 보수, 서버 랙 관리, 네트워크 관리 등의 업무를 처리합니다.

시나리오3 : Amazon RDS를 이용해 데이터베이스 호스팅

Amazon RDS를 이용해 데이터베이스를 호스팅 하면, AWS가 데이터베이스 설치부터 업그레이드 등, 데이터베이스 호스팅과 관련된 모든 복잡한 업무를 대신 처리합니다. 사용자는 애플리케이션 최적화에만 집중하면 됩니다. RDS의 주요 장점은 다음과 같습니다.

  • 인프라 관리 불필요 : 사용자는 데이터베이스와 관련된 어떤 인프라도 직접 관리할 필요가 없습니다. AWS가 데이터베이스와 관련된 모든 업무를 대신 처리합니다.
  • 즉각적 프로비저닝 : RDS에서 데이터베이스 프로비저닝은 거의 즉시 이루어집니다. 클릭 몇 번만으로 원하는 사양의 RDBMS를 배포할 수 있습니다.
  • 확장성 관리 : RDS는 매우 간단하게 스케일업 및 스케일다운 할 수 있으며, 사용자가 원하는 내용대로 환경을 설정할 수 있습니다. 언제든 컴퓨팅 또는 메모리 리소스의 확장성을 조절할 수 있습니다.
  • 애플리케이션 호환성 : RDS는 다양한 데이터베이스 엔진을 지원하므로 업계에서 널리 사용되는 데이터베이스 애플리케이션, 커스텀 코드, 기업에서 이미 사용 중인 데이터베이스 도구 등과 완벽하게 호환됩니다.
  • 고가용성 : RDS를 이용해 멀티 AZ 환경에 데이터를 프로비전하면, RDS는 동기적으로 데이터를 복제해 다른 AZ의 대기 인스턴스에 저장합니다.
  • 보안 유지 : RDS는 대기 상태 데이터 및 이동 상태 데이터의 암호화를 지원하며, 이를 이용해 대기 상태의 데이터를 암호화 할 수 있고, SSL 기법을 이용해 전송 상태의 데이터를 암호화 할 수 있습니다.