개요
인터넷 스토리지 서비스. 용량에 관계 없이 파일을 저장할 수 있고 웹(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 |