1.S3 란?
Single Storage Service
(EC2는 컴퓨팅 서비스로 하나의 컴퓨터 받는 거면 이건 저장소개념)
객체 수준 스토리지 즉, 객체 단위로 수정변경이 가능하다
용량에 상관없이 파일 저장가능, HTTP 프로토콜로 파일접근가능
EC2안에서 EBS로 구축 하는 것보다 더 저렴
S3자체가 웹서버로 구성되어 있음, 확장이나 부하분산 일일이 신경쓸 필요X
자동으로 오토스케일링, 로드밸런싱 가능
웹하드랑 비슷한 용도지만 HTTP프로토콜로 처리함
별도의 액티브X없이 웹브라우저에서 바로 사용 가능
2. 구성요소
객체: S3에 저장되는 최소단위
파일과 메타데이터로 구성됨
키가 객체이름이고 값이 객체의 데이터들
메타데이터는 HTTP의 Content-type형식들
버킷 : s3에 생성할 수 있는 최상위데이터를 저장하는 공간, 디렉토리,
버킷안에 객체가 생성됨
버킷안에서 세부 디렉토리 지정할 수 있음
버킷에 URL이 할당됨, 이 주소로 버킷에 접근할 수 있는 것
버킷이름 고유값이여야 됨
버킷은 리즌별로 생성해야됨
생성 할 수 있는 객체 수 무제한, 저장가능한 용량도 무제한
3. 사용사례
1)정적 웹 콘텐츠 및 미디어 저장 배포
*동적 웹서비스 : JSP, PHP, ASP로 구성된 사이트
*정적 웹서비스 : HTML이나 javaScript로만 구성된 사이트
둘다 같이 섞여 있는 웹사이트면 정적인 웹서비스를 S3서비스를 사용
즉, 읽기위주로 사용되는 내용을 저장하는데 효과적
- 파일이 하나의 관리대상 : 파일의 일부를 변경하려면 파일 변경하고 다시 파일전체 업로드
- 원하는 만큼 데이터 저장가능
2) 정적웹호스팅기능
정적컨텐츠나 미디어 저장하고 배포하는 서비스
거의 변경이 없는 데이터들 à 정적컨텐츠 웹서버로 가능
엔드포인트주소 : 버킷이름.S3.amazoneaws.com (URL주소이기 때문에 버킷이름 유니크해야됨)
웹URL주소 : 객체 연결하려면 주소/video.mp4처럼 뒤에 붙임
버킷안에 파일을 넣어놓고 바로 열어볼 수 있음
특정 사용자만 권한을 줄려면 IAM그룹에게 권한설정가능
기본적으로 버킷,객체 및 관련 하위 리소스 비공개
3) 대규모 데이터분석 스토어용
수평확장성 때문에 동시 트랜잭션 가능
4) 백업도구
*S3로 데이터를 이동하는 방법
콘솔 웹브라우저 내로 드래그앤드롭으로 파일이동(대신 용량제한)
CLI나 SDK이용해서 대량의 데이터 이동
객체수나 용량은 무제한
만약 객체 용량이 크면? 전송하는데 오래걸려서 네트워크 장애가 걸리면?
기본적으로 재전송. 하지만 이게 오래걸림 -> 이때 멀티파트 업로드 사용
- 멀티파트업로드기능
대용량 객체를 관리가능한 파트로 분할해서 일관되게 업로드가능
업로드 시작/객체파트 업로드/ 모든 파트 업로드/ 멀티파트 업로드 완료
-SDK이용해서 전송할 때
전송타임제한이 없음, 해당하는 업로드에서 과금형태
하나의 단일파일로 서비스 이루어짐
강제로 중지하거나 업로드하는 방식 가능해짐
-S3 Transfer Acceleration
성능상 이슈가 엣지로케이션 210개, CF가 배치되어 있는곳에
빠르고 간편하게 데이터를 S3 버킷로 전송가능
엣지에서 AWS로 이동하는 건 미국내 클라우드 프론트로 이동
성능차이 보는 사이트 : 리전에서 멀수록 전송 속도 느린거
https://s3-accelerate-speedtest.s3-accelerate.amazonaws.com/en/accelerate-speed-comparsion.html
데이터 이전의 속도, 정해진 기간에 빨리 이동해야한다면 확인가능
aws Snowball
해당 어플라이언스(?)를 연결하고 데이터를 옮겨서 데이터를 전송해주는 서비스
페타바이트 규모의 데이터를 빠르게 전송 가능
aws snowmobile
엑사바이트 규모의 데이터전송
4. 세부설정
1)액세스 제어기능(권한관리)
S3는 버킷과 객체를 어떻게 설정하느냐에 따라서 기능이 달라짐
버킷에 올라간 객체마다 접근권한 설정할 수 있음
객체를 public으로 접근권한 설정하면 이 객체를 가진 url주소를 외부에서 볼 수 있음
많은 객체를 하나하나 퍼블릭으로 설정하거나, 버킷 전체를 퍼블릭으로 설정하거나
디폴트는 파일을 입력한 소유자만 접근가능하고 다른 유저는 접근불가
그래서 퍼블릭엑세스 권한차단하고 EVERYONE으로 해야 다른 사용자가 접근할 수 있음
*리소스기반정책 ->버킷정책
해당하는 자원자체에 권한 설정해서 해당자원을 액세스 할 때
그 안에 저장된 객체에 액세스 하도록 허용, 권한을 평가하는 거
json코그의 정책을 입력 -> aws안에서 정책을 생성해주는 코드제공
어떤 요청에 대해서 어떤 리소스(S3)에 어떤 대상의 접근을 허용할지 거부할지
항상 권한을 줄때는
버킷에 대한 리소스에 권한지정, 버킷하위에 대한 리소스에 대한 권한지정
(버킷리스트 생성자가 있음, 원하는거 선택하면 자동으로 JSON코드 생성)
대부분 자주 사용하는 요구사항에 대해서 샘플파일이 있음(구글링)
어떤정책의 타입을 허용/거부할지
어떤 권한을 적용할지 (IAM계정)
어떤 액션으로 적용할지
ex)
버킷에 bucket polict에서 s3 object를 allow한다고 권한설정하면
이 버킷 전체를 가진 url주소를 외부에서 볼 수 있음
2) 버전관리
전체 버전이 있어서 원하는 버전으로 롤백 가능함
대신, 백업할 내용들을 저장하는 것도 다 과금 대상
원본데이터 유지하면서 버저닝, 삭제마크를 지우면 삭제된 데이터를 다시 복원가능
5. 결론: 그럼 언제 s3사용이 적합한가?
한번 쓰고 여러 번 읽어야하는 경우,
데이터 액세스가 일시적으로 급증하는 경우
사용자가 매우 많고 콘텐츠가 다양한 경우
데이터 세트가 계속 증가하는 경우
객체스토리지 : 한번 저장하고 읽기 위주 작업을 하는데 효과적 ->웹호스팅 서비스\
하지만, 언제 부적합한가?
데이터가 자주 변경될떄(EBS추천)
어쩔 수 없이 보관만 해야할 때(글레셔 추천)
S3는 스토리지에 저장하면 기가바이트당 월 요금
다른이전으로전송하는 비용
출처 : 4. S3사용하기필기, 모듈2 가장간단한 아키텍쳐 필기
'🌴 DevOps > Cloud' 카테고리의 다른 글
Aws 서비스별 명칭정리 (0) | 2020.02.23 |
---|---|
[CloudFront] CloduFront란? 동작방식 알아보기 (0) | 2020.02.06 |
[S3] 스토리지서비스3-S3 사용해서 정적 웹 호스팅 (0) | 2020.02.05 |
[Glacier] 스토리지 서비스2-Glacier란? 스토리지클래스 (0) | 2020.02.04 |
[EC2] EC2 인스턴스 접속하기 (Putty/mobaXterm) (0) | 2020.02.02 |
[EC2] EC2 생성/유형/AMI/EBS/볼륨/EFS/ FSx (1) | 2020.02.01 |