본문 바로가기
[AWS-RDP]/S3

[중요][AWS] S3에 LifeCycle management!!

by METAVERSE STORY 2023. 7. 26.
반응형
728x170

 

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)를 참조하자.

 

출처: https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-transition-general-considerations.html

만료 (Expiration)

저장된 객체를 삭제한다. 특정기간 보관 후 기간이 경과한 object를 삭제하는데 사용한다.

 

S3 Lifecycle configuration rule

S3에 저장되는 객체에는 S3 Lifecycle configuration rule을 지정하여 객체에 대한 작업을 지정할 수 있다. 이러한 예는 다음과 같다.

  • 버킷에 주기적으로 로그를 업로드 하는 경우, 특정 기간동안에만 의미가 있어 해당 기간이후에는 데이터를 삭제하고자 한다.
  • 일부 문서는 제한된 기간 동안 자주 접근되고 이후에는 접근빈도가 떨어지고 실시간 접근의 필요성도 없어진다면 특정기간이후 더 저렴한 저장소로 이전한다.

 

Lifecycle configuration

S3 Lifecycle configuration은 XML 형태로 정의할 수 있으며 객체의 생명 주기 동안 해당 객체에 대해 Amazon S3이 수행하도록 할 사전 정의된 작업을 포함한 일련의 규칙으로 이루어져 있다.

 

Lifecycle configuration은 다음 방법들을 사용하여 생성할 수 있다.

 

S3 bucket에서 Lifecycle 사용하기

콘솔로 설정하기 예시

콘솔을 통해 lifecycle을 설정해보자.

  1. 콘솔(https://console.aws.amazon.com/s3/)으로 이동
  2. bucket을 선택하고 management 탭으로 이동
  3. 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

반응형
그리드형

댓글