TIL/AWS
고급 Amazon S3
초집중
2023. 5. 28. 14:50
스토리지 클래스간 데이터 이동
- 스토리지 클래스 간에 객체를 이동시킬 수 있다
- 자신보다 아래있는 계층으로 이동할 수 있다
- 수동으로 옮기거나 라이프사이클을 활용하여 자동으로 옮길 수 있다
각 클래스가 무슨 역할을 하는지 이해하면 됨
Lifecycle Rules
- Transition Actions(전환 작업) - 다른 스토리지 클래스로 객체를 전환하도록 구성
- 60일 후에 Standard IA로 옮기도록 설정 등
- Expiration Actions(만료 작업) - 일정 시간이 지나면 객체가 삭제 또는 만료되도록 설정
- 365일 후에 로그 파일을 삭제
- 한달 후 이전 버전의 파일을 삭제
- 완료되지 않은 멀티파트 업로드 부분을 삭제
특정 접두사를 사용해 Rules를 전체 혹은 일부 경로에만 적용할 수 있고 특정 객체 태그에만 지정 가능
가상의 시나리오 → 이런식으로 문제가 출제된다는 사실을 인지하면 된다
썸네일 이미지는 엑세스가 많지 않고 재생성이 쉬움
소스 이미지는 액세스가 많고 재생성이 어렵다
- 소스 이미지를 스탠다드로 설정하다가 라이프 사이클 설정을 통해60일 뒤해 Glacier로 전환
- 썸네일은 One Zone IA로 두고 60일 이후 만료 혹은 삭제 시킨다
- 썸네일과 소스 이미지는 접두사를 통해 구분시킬 수 있음
30일 이내엔 객체 삭제시 즉시 복구, 365 이내에는 48시간내에 복구할 수 있도록 설계
- 우선 S3 Versioning을 통해 삭제 마커를 활용해야 한다
- 객체의 이전 버전을 Standard IA로 옮김 → 최상위 버전엔 두지 않는다
- 그런 다음 Glacier Deep Archive로 옮겨야 함
Storage Class Analysis
객체를 전환하는데 최적의 기간을 정하는 방법
- S3 Analytics를통해 적합한 스토리지 클래스로 전환할 때 사용할 수 있음
- Standard와 Standard IA용 권장사항을 제공
- One Zone IA or Glacier은 해당 없다
- S3 Analytics를 사용하면 권장사항과 통계를 csv 파일로 제공한다
- 보고서는매일 업데이트 되며 24~48시간까지 데이터 분석 시간이 걸림
이를 통해 개선 방안을 찾을 수 있다
S3 - Requester Pays (요청자 지불)
버킷 소유자가 버킷과 관련된 모든 Amazon S3 스토리지 및 데이터 전송 비용을 지불한다
- 요청자가 데이터 다운로드 비용을 지불
- 대량의 데이터셋을 다른 계정과 공유하려는 경우 유용하다
- 요청자가 익명이어서는 안되며 AWS 인증을 받아야함
S3 Event Notifications
- 객체가 생성된 경우, 삭제, 복원, 복제가 발생된 경우 이벤트가 발생함
- 이벤트 필터링 가능(.jpg로 발생한 이벤트)
- S3 특정 이벤트에 자동으로 반응하게 할 수 있다
- 예시) 업로드 되는 사진의 섬네일을 만드려고 하면 이벤트 알림을 만들어서 설정 가능
- 원하는 만큼의 이벤트 생성과 어디로든 보낼 수 있다
S3 Event Notifications with Amazon EventBridge
위 3개 말고도 최근 Amazon EventBridge와 통합됐다
- 이벤트가 S3 버켓으로 이동하면 종류와 상관없이 모든 이벤트는 EventBridge를 거친다
- 여기서 Event Rule을 설정할 수 있고 룰에 따라 18개가 넘는 AWS 서비스에 알람을 보낼 수 있다
- 고급 필터링 옵션을 더 많이 설정 가능하고 더 많은 목적지, 많은 기능을 활용 가능
중요한 점은 Amazone S3에서 발생하는 모든 이벤트에 반응할 수 있다
실습
S3의 이벤트 알림을 받는다는 설정을 SQS, Lamda 등 각 AWS 서비스에서 허용 설정을 해야 한다
Baseline Performance (기준 성능)
- S3는 요청이 아주 많을 때 자동으로 확장된다
- S3로부터 첫 번째 바이트를 수신하는데 지연시간도 100~200밀리초 사이로 아주 빠르다
- 버킷 내 접두사(prefix)당 초당 적어도 3,500개의 PUT/COPY/POST/DELETE 요청 또는 5,500개의 GET/HEAD 요청을 지원한다
- 버킷 내에서 접두사 수에 제한은 없다
- prefix 예시
- file이라는 객체와 bucket사이에 모든 것이 접두사가 된다
- bucket/folder1/sub1/file → /folder1/sub1/
- bucket/folder1/sub2/file → /folder1/sub2/
- bucket/1/file → /1/
- bucket/2/file → /2/
- 위 접두사 예시에 읽기 요청을 균등하게 처리할 수 있으면 GET/HEAD 요청을 초당 22,000개를 처리할 수 있다
S3 Performance - 성능과 최적화 방법
- 100MB를 넘는 파일은 멀티-파트 업로드 하는게 좋고 5GB가 넘으면 필수
- 멀티파트 업로드는 업로드를 병렬화하기 떄문에 전송 속도를높여 대역폭을 최대화 할 수 있다
S3 Transfer Acceleration - 업로드와 다운로드를 위한 전송 가속화
- 공용 인터넷으로 연결되는 경우 AWS 엣지 로케이션으로 전송하여 전송속도를 높이고 이후 데이터를 프라이빗 aws 네트워크를 통해 대상 리전에 있는 S3 버킷으로 전달
- 엣지 로케이션은 리전보다 훨씬 많다 약 200개로 계속 증가하고 있다
- 멀티파트 업로드와 같이 사용할 수 있다
- 공용 인터넷을 최소화하고 프라이빗 AWS 네트워크 사용량을 늘림으로써 전송속도 최적화
S3 Byte-Range Fetches 파일을 수신하고 읽는 효율적인 방법
- 특정 바이트 범위를 요청하여 Get 요청을 병렬화
- 특정 바이트 범위를 가져오는데 실패한 경우 더 작은 단위로 재시도
- 실패 한다고 해도 복원력이 높다
- 다운로드 속도를높일 수 있다
파일의 일부분만 가져와 파일의 정보를 읽을 수 있다
S3 Select & Glacier Select
s3에서 파일을 검색할 때 검색한 다음 필터링하면 너무 많은 데이터를 검색하게 된다
- Server-side filtering을 통해 더 적은 수의 데이터를 검색할 수 있고 이는 성능 향상을 가져옴
- SQ문에서 간단히 행과열을 사용해 필터링 가능
- 네트워크 전송이 줄기 때문에 데이터 검색과 필터링에 드는 클라이언트 측의 CPU 비용도 줄어든다
- S3 Select 이전에는 모든 데이터를 검색한 후 애플리케이션에서 필터링을 통해 필요한 찾음
- S3 select를 사용하면 Amazon S3가 대신 파일을 필터링 해주고 필요한 데이터만 검색할 수 있다
간단한 필터링에 S3 Select & Glacier Select를 사용하면 좋다
S3 Batch Operations
- 단일 요청으로 기존 S3 객체에서 대량 작업을 수행하는 서비스
- 많은 S3 객체의 메타데이터와 프로퍼티 수정
- S3 버킷간 객체 복사
- 암호화되지 않은 모든 객체 암호화 가능
- ACL, 태그 수정
- S3 Glacier에서 한 번에 많은 객체 복원
- 람다 함수를 호출하여 배치 연산의 각 객체에서 커스텀한 작업 수행 가능
- 객체 목록에서 원하는 작업은 무엇이든지 수행할 수 있다.
- 작업은 객체의 목록, 수행할 작업과 작업에 대한 옵션 매개 변수로 구성
- 직접 스크립트를 짜지 않고 배치 연산을 사용하는 이유
- 재시도 관리
- 진행사항 추적, 작업 완료 알림
- 보고서 생성
- S3 Inventory라는 기능을 사용해 객체 목록을 불러오고 Select를 사용해 객체를 필터링
- S3 배치 작업에 수행할 작업, 매개변수와 함께 객체 목록 전달
- 배치작업 수행
유스케이스
- S3 Inventory를 사용해 암호화되지 않은 모든 객체를 찾는다
- Batch 연산을 통해 한 번에 모두 암호화