데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      AWS S3 효율적으로 사용하기

      sungil 23.05.18
      4,205 21 0

      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 탭으로 이동

        s3.bucket.png스크린샷 2023-05-10 오후 3.50.46.png

      3. lifecycle rule 생성하기 버튼을 통해 새로운 규칙을 정의

        스크린샷 2023-05-10 오후 3.53.40.png

        • 규칙의 적용범위 설정

          • 버킷내 모든 객체에 적용

          • 특정 필터를 통해 제한: 필터는 prefix, 태그, 객체크기나 이들간의 조합을 통해 설정가능

        • 규칙의 작업 설정

          • 현재 버전의 객체를 다른 storage class로 변경

          • 현재 버전이 아닌 객체를 다른 storage class로 변경

          • 객체의 현재버전 만료 (제거)

          • 객체의 현재버전 제외하고 영구삭제

          • 만료된 삭제 표시된 또는 불완전한 분할된 업로드 객체의 삭제

        • 아래 내역은 저장되는 모든 객체를 60일 이후 삭제하도록 설정한 것이다.

          스크린샷 2023-05-10 오후 4.15.15.png

        • 이외에 작업별로 설정하는 옵션들이 있다.


      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년후에 삭제될 것이다.


      마치며

      이번 글을 통해 s3의 버킷 lifecycle 기능을 알아보았고 이를 사용하는 구체적인 예시를 보였다.

      이 글이 s3를 비용 효율적으로 사용하는데 도움이 되길 바란다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      sungil 님의 최신 블로그

      더보기
      동영상 기고하기