s3는 (이론적으로) 무한의 용량을 제공하는 저장소 서비스이다.
하지만 사용하는 양만큼의 비용이 부과되는 만큼 효율적인 관리가 필요하다.
아마존에서는 S3에 LifeCycle manangement라는 기능을 통해 이러한 자동관리기능을 제공하고 있다.
이 글에서는 비용 효율적으로 S3를 사용하기위한 방법을 기술하고자 한다.
배경지식
S3에서 지원하는 Object 대상 작업
변환 (Transition)
저장된 객체를 다른 스토리지 클래스로 변환하는 것으로 S3 Glacier Flexible Retrieval와 같은 더 저렴한 저장소로 데이터를 이동시키는 것이 가능하다.
스토리지 클래스에 대한 자세한 내용은 공식페이지(https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/storage-class-intro.html)를 참조하자.
만료 (Expiration)
저장된 객체를 삭제한다. 특정기간 보관 후 기간이 경과한 object를 삭제하는데 사용한다.
S3 Lifecycle configuration rule
S3에 저장되는 객체에는 S3 Lifecycle configuration rule을 지정하여 객체에 대한 작업을 지정할 수 있다. 이러한 예는 다음과 같다.
- 버킷에 주기적으로 로그를 업로드 하는 경우, 특정 기간동안에만 의미가 있어 해당 기간이후에는 데이터를 삭제하고자 한다.
- 일부 문서는 제한된 기간 동안 자주 접근되고 이후에는 접근빈도가 떨어지고 실시간 접근의 필요성도 없어진다면 특정기간이후 더 저렴한 저장소로 이전한다.
Lifecycle configuration
S3 Lifecycle configuration은 XML 형태로 정의할 수 있으며 객체의 생명 주기 동안 해당 객체에 대해 Amazon S3이 수행하도록 할 사전 정의된 작업을 포함한 일련의 규칙으로 이루어져 있다.
Lifecycle configuration은 다음 방법들을 사용하여 생성할 수 있다.
- Amazon S3 콘솔
- REST API
- AWS SDK
- AWS Command Line Interface(AWS CLI)
S3 bucket에서 Lifecycle 사용하기
콘솔로 설정하기 예시
콘솔을 통해 lifecycle을 설정해보자.
- 콘솔(https://console.aws.amazon.com/s3/)으로 이동
- bucket을 선택하고 management 탭으로 이동
- lifecycle rule 생성하기 버튼을 통해 새로운 규칙을 정의
- 규칙의 적용범위 설정
- 버킷내 모든 객체에 적용
- 특정 필터를 통해 제한: 필터는 prefix, 태그, 객체크기나 이들간의 조합을 통해 설정가능
- 규칙의 작업 설정
- 현재 버전의 객체를 다른 storage class로 변경
- 현재 버전이 아닌 객체를 다른 storage class로 변경
- 객체의 현재버전 만료 (제거)
- 객체의 현재버전 제외하고 영구삭제
- 만료된 삭제 표시된 또는 불완전한 분할된 업로드 객체의 삭제
- 아래 내역은 저장되는 모든 객체를 60일 이후 삭제하도록 설정한 것이다.
- 이외에 작업별로 설정하는 옵션들이 있다.
- 규칙의 적용범위 설정
CLI로 설정하기 예시
CLI를 통한 설정을 지원하기 위한 명령도 제공하고 있다.
- put-bucket-lifecycle-configuration
- get-bucket-lifecycle-configuration
- delete-bucket-lifecycle
cli를 사용하는 경우 구체적인 정책은 json 포맷으로 전달해야 한다. 다음 설정예를 참고하자.
{
"Rules": [
{
"Filter": {
"Prefix": "documents/"
},
"Status": "Enabled",
"Transitions": [
{
"Days": 365,
"StorageClass": "GLACIER"
}
],
"Expiration": {
"Days": 3650
},
"ID": "ExampleRule"
}
]
}
‘documents/’로 시작하는(해당 디렉토리 아래 배치되는) 객체에 대해서 생성이 후 365일이 지나면 glacier 저장소로 이동시키고 3650일 이 지나면 삭제하는 룰이다.
위에서 콘솔로 만든 정책을 확인하면 다음과 같다.
siim@adm:~$ aws s3api get-bucket-lifecycle-configuration --bucket tks-loki
{
"Rules": [
{
"Expiration": {
"Days": 60
},
"ID": "delete_all_after_60days",
"Filter": {},
"Status": "Enabled"
}
]
}
cli로 새로운 정책을 추가하는 방법은 put-bucket-lifecycle-configuration을 사용하면 된다. 위 예시의 정책을 tks-thanos에 적용하는 예시는 다음과 같다.
siim@adm:~$ cat configuration_rule.json
{
"Rules": [
{
"Filter": {
"Prefix": "documents/"
},
"Status": "Enabled",
"Transitions": [
{
"Days": 365,
"StorageClass": "GLACIER"
}
],
"Expiration": {
"Days": 3650
},
"ID": "ExampleRule"
}
]
}
siim@adm:~$ aws s3api put-bucket-lifecycle-configuration --bucket tks-thanos --lifecycle-configuration file://configuration_rule.json
siim@adm:~$ aws s3api get-bucket-lifecycle-configuration --bucket tks-thanos
{
"Rules": [
{
"Expiration": {
"Days": 3650
},
"ID": "ExampleRule",
"Filter": {
"Prefix": "documents/"
},
"Status": "Enabled",
"Transitions": [
{
"Days": 365,
"StorageClass": "GLACIER"
}
]
}
]
}
앞에서 설정한 내용에 의해 tks_thanos 버킷의 documents 디렉토리에 저장되는 객체는 365일 후 glacier로 이동시키고 10년후에 삭제될 것이다.
출처 : https://devocean.sk.com/blog/techBoardDetail.do?page=&boardType=undefined&query=&ID=164910&searchData=&subIndex=#none
'[AWS-RDP] > S3' 카테고리의 다른 글
[참고][AWS] S3 사이트에 HTTPS 적용 방법!! (0) | 2023.05.08 |
---|---|
[참고][Amazon S3] 특정 확장자 파일(Object)만 업로드 하기 (0) | 2023.04.17 |
댓글