S3를 사용할 때 알아둬야 할 기능들.
Storage classes
- 다른 사용 케이스별로 storage class를 관리할 수 있다.
예를 들어 자주 액세스하는 데이터는 S3 standard, s3 One Zone 등
데이터 아카이브이면 S3 Glacier, flexible retireval, Deep Archive 등등…
- 저장된 데이터를 변경하거나 알 수 없는 패턴의 데이터라면 S3 Intelligent-Tiering 을 통해서 자동으로 옵티마이징 해 주는 경우도 있다 함.
- 4 access tier, 2 low-latency access tier로 나뉘어진다. 하위 2 low-latency access tier 는 조회가 잦지 않은 async access용으로 디자인 되었다는 듯.(비용은 싸겠지)
참고:
Using Amazon S3 storage classes
Storage management
비용을 아끼고 latency를 줄이는 등 매니징을 위한 기능들이 있다고 함
- S3 Lifecycle : 오브젝트의 life policy를 정할 수 있다. 위에서 설명한 Storage class의 변경 등을 지원하기 위한 기능으로 보임. 로그성 DB의 retention policy나 partition table 관리 등의 기능과 비슷한 맥락이라고 할 수 있을 듯. 마찬가지로 expire도 된다고 함.
- S3 Object Lock : 말 그대로 오브젝트를 잠궈 delete, overwrite 등을 막을 수 있다. 한번 쓰고 읽기가 자주 일어나는 파일 등을 관리할때 유용할 것.
- S3 Replication : 단순 파일 복제 뿐만 아니라 ‘메타데이터’까지 복제해 주는 Replication 기능이다. 단순히 보존 용도 뿐만 아니라 리전을 변경, 복제해서 latency를 줄이는 용도로도 사용할 수 있음. 물론 리전을 분리해 놓으면 데이터 손실 또한 방지될 것이다.
- S3 Batch Operation : 한번의 API request로 벌크성 작업을 수행할 수 있게 해준다고 한다. 단순 복사, Lambda function, Restore 등등… 수십 수백만 object도 관리할 수 있다고 한다. 배치 명령을 만들고 수행하는 식인지, 아니면 조건식에 걸리는 object를 배치 수행하는 것인지에 대해서는 명확하지 않지만, Operation이라 했으니 단순 수행만을 논하는 것은 아닐 듯.
은근히 많이 사용할 만한 기능으로 보여 따로 리서치를 해야 할 것 같다.
Access management
Audit, grant와 와 같은 기능을 수행하는 Access management 기능
당연한 부분이지만 퍼미션 관리를 통해서 특정 bucket만 접근한다던지..하는 기능이 가능하다.
- S3 Block Public Access : 공공 액세스를 막는 기능…이건 너무 당연해서… 특정 계정, bucket level 등으로 기본 세팅이 가능.
- AWS IAM : 아마존이 생태계를 쉽게 사용할 수 있도록 만들어 놓은 기능이라 생각하는데, 그만큼 사용하니 편했다. IAM 그룹을 만들어서 해당 기능 퍼미션을 등록하고, IAM 그룹에 속한 유저에게 할당해 주면 되는 기능이다. API 접근시에도 키나 로그인 토큰 등이 필요가 없고, 단순히 클라이언트 오브젝트만 생성해도 되는 수준으로 (등록만 된다면) 편한 기능. S3 뿐만 아니라 다른 기능들도 다 같이 적용시킬 수 있으므로 내부 인원들에게 편의성을 상당히 극대화 시킬 수 있다.
- Bucket policies : IAM-based policy language(arn같은거?)를 통해서 bucket과 오브젝트 퍼미션 관리가 가능.
- Amazon S3 access points : named network endpoint를 통해서 엑세스를 관리할 수도 있다고 한다.
- ACL : user 별로 개별 bucket이나 오브젝트를 사용할 수 있도록 퍼미션 기반으로 관리. 상기된 것들을 보면 유추가 가능하지만 IAM이나 bucket policy 등을 통해서 관리하기 이전 시점에 만들어진 것이라 추천하지 않는다고 한다. 개별 설정을 하고 관리하는 것 자체가 까다롭기 때문에 굳이 사용은 할 것 같진 않다.
- s3 Object Ownership : 뭐…이쪽도 간단한 개념인 듯. Owner는 기본적으로 모든 퍼미션을 가지고 이는 Ownership이라 따로 칭한 것으로 생각할 수 있겠다. 퍼미션과 owner 개념이 혼용될 수 있어 구분한 듯.
- Access Analyze for S3 : access policy에 따라 제대로 퍼미션이 작동하는지 모니터링 할 수 있는 기능이라고 한다. 퍼미션으로 인한 실패도 기록되는걸까? 그런 게 된다면 로직 체크나 관리에도 유용할 수 있겠다.
Data processing
어느 정도의 ETL 기능을 제공하는 듯.
- S3 object Lambda : 자체 코드를 작성해서 먼저 data processing을 수행하여 Get request로 받아올 수 있는 기능. 리서치할때 종종 Lambda code라는 걸 봤었는데 이 기능인 것 같다.
가능한 기능 예시 :
- row Filtering
- 이미지 파일 리사이징(!)
- 특정 데이터 검열
- etc…
- Event notifications : SQS, SNS, Lambda 등을 통해 S3 자원의 변경 등을 모니터링 할 수 있다. 이건 S3만의 기능은 아님.
Storage logging and monitoring
리소스가 있으면 모니터링도 있다.
이런 거 까지 전부 제공하는 아마존도 참 대단함…
위에 두개는 자동 모니터링 툴이고, 직접 설정 가능한 모니터링 툴(Manual)
- Server access logging : 말 그대로 엑세스 로깅이 가능한 기능으로 보인다. audit, server access log, security 등의 기능…어떻게 하는지는 또 따로.
- AWS Trusted Advisor : 아무래도 사용량 기반으로 만든 서비스다 보니 해당 기능을 좀 더 싸고 유용하게 사용할 수 있는 어드바이저를 제공한다. 비용 뿐만 아니라 보안, 성능 등도 조언을 해 준다고 함.
근데 이것들이 실제 모니터링이 가능한 수준인건지, 그냥 제공만 하는 건지는 좀 봐야 할 듯.
자원 사용량 등의 통계 정보로 추출한다는 말이 별로 보이지가 않는다. 필요하다면 access logging 등으로 직접 가시화 하란 걸 수도..
Analytics and insights
모니터링도 있고 분석 툴도 있고.
자꾸 동의어를 반복하는 것 같지만 스토리지 리소스는 Lens, class는 class analysis, 오브젝트 레벨에서의 분석은 Inventory reports 정도의 차이점으로 구분하는 것 같다.
대강 S3와 연관된 기능은 여기까지.
그 외에 뭐 consistency가 확보된다…이런 부분은 서비스 입장에선 당연하므로 패스.
consistency 참조 :
What is Amazon S3?