본문 바로가기

Cloud/AWS

S3 - Simple Storage Service

공식문서

개요

인터넷 스토리지 서비스. 용량에 관계 없이 파일을 저장할 수 있고 웹(HTTP 프로토콜)에서 파일에 접근할 수 있다.

 

해당 제품을 사용하는 이유는

  • S3는 저장 용량이 무한대이고 파일 저장에 최적화되어 있다. 용량을 추가하거나 성능을 높이는 작업이 필요없다.
  • 비용은 EC2와 EBS로 구축하는 것보다 훨씬 저렴
  • S3 자체가 수천 대 이상의 매우 성능이 좋은 웹 서버로 구성되어 있어서 EC2와 EBS로 구축했을 때 처럼 Auto Scaling이나 Load Balancing에 신경쓰지 않아도 된다.
  • 동적 웹페이지와 정적 웹페이지가 섞여있을 때 동적 웹페이지만 EC2에서 서비스하고 정적 웹페이지는 S3를 이용하면 성능도 높이고 비용도 절감.
  • 웹하드 서비스와 비슷하지만, 별도의 클라이언트 설치나 ActiveX를 통하지 않고 HTTP 프로토콜로 파일 업로드/다운로드 처리
  • S3 자체로 정적 웹서비스 가능

S3 요소

  • 버킷
    • 버킷 주소는 https://s3-리전이름.amazonaws.com/버킷이름
    • Amazon S3에 저장되는 기본 개체
    • 데이터, 키, 메타데이터로 구성된다
    • 버킷 내 고유한 식별자 
    • E.g. https://doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl 중  "doc"은 버킷의 이름 "2006-03-01/AmazonS3.wsdl"은 키이다.

  • Regions
    • Amazon S3에서 사용자가 만드는 버킷을 저장할 지리적 AWS 리전을 선택할 수 있습니다. 
    • 특정 리전에 저장된 객체는 사용자가 명시적으로 객체를 다른 리전으로 전송하지 않는 한 해당 리전을 벗어나지 않습니다.

Amazon S3 데이터 일관성 모델 

  • 단일 키에 대한 업데이트는 원자성이다(오래된 파일을 반환하면 반환하지 절대 손상된 데이터를 반환하지 않는다는 의미인듯 - 업데이트 중이라 해도)
  • S3는 여러 서버로 데이터를 복제함으로 고가용성을 구현한다.
  • 업데이트는 키를 기반으로 진행한다. 그러므로 여러 키에서 원자성 업데이트를 수행할 방법이 없다.
  • Stale Data : 다음버전으로 업데이트는 되었으나 특정시간만큼 유지되는 컨텐츠(버전업데이트 직후 Eventually Consistent Read를 실행 시 오래된 파일을 읽을 수 있다.)
    • 고로 동시에 업데이트가 된다면 아래와 같이 작동될 수있다

 

관련 서비스

  • EC2 (Amazon Elastic Compute Cloud) - Dynamic Content를 EC2에서 Static Content를 S3에서 지원하는 방식으로 사용 가능
  • Amazon EMR - 빅데이터 관련 서비스로, 분석을 위한 대용량의 데이터 저장을 S3에 가능
  • AWS Snowball - 물리적 Data Migration 지원 서비스로 S3파일에 대해 물리적 Data Migration 지원가능

Bucket Rule을 이용해서 S3 콘텐츠 CORS 문제 해결하기

<CORSConfiguration>
 <CORSRule>
   <AllowedOrigin>http://www.example1.com</AllowedOrigin>

   <AllowedMethod>PUT</AllowedMethod>
   <AllowedMethod>POST</AllowedMethod>
   <AllowedMethod>DELETE</AllowedMethod>

   <AllowedHeader>*</AllowedHeader>
 </CORSRule>
 <CORSRule>
   <AllowedOrigin>http://www.example2.com</AllowedOrigin>

   <AllowedMethod>PUT</AllowedMethod>
   <AllowedMethod>POST</AllowedMethod>
   <AllowedMethod>DELETE</AllowedMethod>

   <AllowedHeader>*</AllowedHeader>
 </CORSRule>
 <CORSRule>
   <AllowedOrigin>*</AllowedOrigin>
   <AllowedMethod>GET</AllowedMethod>
 </CORSRule>
</CORSConfiguration>

 

데이터 암호화 (파일에 패스워드를 걸어버리자)

- S3는 데이터 암호화를 지원하는데 이 때 사용되는 암호화 키는 "SSE-S3"라고 한다.

- 데이터 암호화는 대칭 알고리즘인 AES-256를 사용한다.

 

Amazon S3 Transfer Acceleration

Amazon CloudFront를 이용하여 S3 버킷 간에 파일을 빠르고, 쉽고, 안전하게 전송할 수 있게 해준다.

 

사용하는 이유 :

  • 전 세계 각지에서 중앙의 버킷으로 업로드하는 고객이 있는 경우
  • 전 세계에 정기적으로 수 기가바이트에서 수 테라바이트의 데이터를 전송하는 경우
  • Amazon S3에 업로드 할 경우 인터넷을 통해 사용 가능한 대역폭을 충분히 활용하지 못할 수 있음

Storage Class

자주 엑세스하는 객체를 위한 스토리지 클래스

  • S3 Standard - 높은 내구성과 가용성을 보장한다
  • Reduced Redundancy Storage(RRS) - S3 Standard보다 더 저렴하지만 내구성과 가용성은 낮다(그럼에도 일반 디스크 드라이브의 400배에 달하는 내구성을 제공한다). 표준스토리지 만큼 객체를 객체를 많이 복제하지는 않으므로 원본을 복제한 데이터나 가공한 데이터(예: 썸네일)의 저장에 알맞다.

자주 엑세스하는 객체와 자주 엑세스하지 않는 객체를 자동으로 최적화하는 스토리지 클래스

  • S3 Intelligent-Tiering : 성능 영향 또는 운영 오버헤드 없이 가장 비용 효율적인 스토리지 엑세스 계층으로 데이터를 자동으로 이동
    • 엑세스 패턴을 알 수 없거나 예측할 수 없어 수명이 긴 데이터에 대해 스토리지 비용을 자동으로 최적화 하려는 경우 이상적

자주 엑세스하지 않는 객체를 위한 스토리지 클래스

  • IA = 자주 엑세스 되지 않음
  • 백업 또는 자주 엑세스되지는 않지만 밀리초 엑세스가 필요한 오래된 데이터인 경우 적합
  • S3 STandard_IA
    • 지리적으로 분리된 여러 개의 가용 영역에 중복 저장
    • 가용성과 복원성이 좋다
  • S3 One Zone_IA
    • 한 개의 가용 영역에만 저장 
    • 가용성과 복원성이 떨어진다

스토리지 클래스 비교표

CORS

Access-Control-Request-Method = POST, GET, OPTIONS와 같은 HTTP Request Method를 기준으로 허용할지 정한다.

Access-Control-Allow-Origin = Origin Domain 기준으로 허용할지 정한다.

 

Amazon S3의 복원성

  • 수명 주기 구성 - 객체 그룹에 적용되는 작업을 정의하는 규칙 세트이다. 더 저렴한 스토리지 클래스로 전환하거나 보관하거나 삭제하도록 유도할 수 있다.
  • 버전 관리 - 동일 버킷 내에 여러 개의 객체 변형을 보유하는 것을 의미한다. 강제로 삭제하지 않는이상 모든 버전의 객체는 유지된다.
  • S3 객체 잠금 - 객체를 삭제나 덮어쓰지 않도록 방지한다.
  • 스토리지 클래스 - 클래스에 맞게 설계함으로 복원성을 강화할 수 있다(Standard-Ia, Onezone_Ia, Glacier 등)

웹 사이트 엔드포인트와 REST API 엔드포인트 간의 주요 차이점

 

S3 Response Code

HTTP 오류 코드 설명
301 Moved Permanently 사용자가 Amazon S3 웹 사이트 엔드포인트(http://s3website.Region.amazonaws.com/)에 곧바로 요청을 보내는 경우 Amazon S3는 301 Moved Permanently 응답을 반환하고 해당 요청을 https://aws.amazon.com/s3/로 Redirection을 한다.
302 Found http://bucket-name.s3-website.Region.amazonaws.com/x의 x키에 대한 요청이 후행 슬래시 없이 Amazon S3에 수신되는 경우, 키 이름이 x인 객체가 첫 검색 대상이 됩니다. 객체를 찾을 수 없는 경우 Amazon S3은 해당 요청이 하위 폴더 x에 대한 것으로 판단하므로 맨 뒤에 슬래시를 추가하여 요청을 리디렉션하고 302 Found를 반환합니다.
304 Not Modified Amazon S3사용자는 헤더 If-Modified-Since, If-Unmodified-Since, If-Match 및/또는 If-None-Match를 요청하여 클라이언트가 보유하는 캐시된 사본과 요청된 객체가 동일한지 확인합니다. 객체가 동일한 경우 웹 사이트 엔드포인트가 304 Not Modified 응답을 반환합니다.
(If-Match는 응답헤더의 E-tag와 동일한것이 있다면 리소스가 변경되지 않았다는것으로 간주 304를 돌려준다.)
400 Malformed Request 잘못된 리전 엔드포인트를 통해 사용자가 버킷에 액세스하려는 경우 웹 사이트 엔드포인트가 400 Malformed Request로 응답합니다.
403 Forbidden 사용자 요청이 공개적으로 읽기 가능한 객체로 변환되는 경우 웹 사이트 엔드포인트가 403 Forbidden으로 응답합니다. 객체 소유자는 버킷 정책이나 ACL을 사용하여 객체를 공개적으로 읽기 가능하도록 설정해야 합니다.
404 Not Found 웹 사이트 엔드포인트가 404 Not Found로 응답하는 이유는 다음과 같습니다.
1. Amazon S3가 웹 사이트 URL이 존재하지 않는 객체 키를 참조한다고 판단함.
2. Amazon S3가 존재하지 않는 인덱스 문서에 대한 요청이라고 유추합니다.
3. URL에 지정된 버킷이 존재하지 않음
4. URL에 지정된 버킷이 존재하지만 웹 사이트로 구성되지 않음.

404 Not Found에 대해 반환되는 사용자 지정 문서를 만들 수 있습니다. 반드시 웹 사이트처럼 구성된 버킷에 문서를 업로드하고 해당 문서를 사용하는 것으로 웹 사이트 호스팅을 구성해야 합니다.
500 Service Error 내부 서버 오류가 발생하는 경우 웹 사이트 엔드포인트가 500 Service Error로 응답합니다.
503 Service Unavailable 사용자가 요청속도를 줄여야 한다고 Amazon S3가 판단하는 경우 웹 사이트 엔드 포인트가 503 Service Unavailable로 응답합니다.

'Cloud > AWS' 카테고리의 다른 글

AWS 인터뷰 정리  (0) 2020.09.06
Simple Email Service - SES  (0) 2020.09.05
S3 Glacier  (0) 2020.09.04
CloudFront  (0) 2020.09.03
ELB - Elastic Load Balancer  (0) 2020.09.02