AWS

[AWS] aws 강의 섹션 13 (S3 수명주기 규칙, S3 Event Notifications, S3 성능과 최적화 방법, S3 메타데이터와 태그)

대기업 가고 싶은 공돌이 2024. 10. 1. 21:08

S3 Moving between Storage Classes

  • 위의 그래프와 같이 객체를 다른 클래스로 보낼 수 있다.
  • 객체에 자주 액세스 하지 않을 것을 알고 있다면, 표준 IA로 보내고
  • 객체를 아카이브할 예정이라면 Glacier나 Archive 클래스로 객체를 보내면 된다.
  • 객체는 수동으로 이동할 수도 있지만, 수명 주기 규칙을 사용해 자동화할 수도 있다.

Lifecycle Rules

  • 수명 주기 규칙은 다양한 요소로 구성되어 있다.
  • Transition Actions - 객체를 다른 클래스로 옮기기 위한 작업
    • 예) 60일 동안 액세스 하지 않았다면 해당 객체를 IA로 옮겨라
  • Expiration actions - 일정 기간이 지나면 객체를 삭제하는 작업
    • 예) 로그 파일의 경우 365일 이후 삭제해라 
    • 예) 멀티파트 업로드가 2주 이상 완료되지 않았다면 삭제해라 (멀티파티 업로드는 2주 안에 완료돼야함)
  • 특정 접두사에 규칙을 적용할 수 있다.
    이를 통해 특정 버킷 단위로 규칙을 설정할 수도 있고,
    특정 url 단위로 규칙을 설정할 수도 있다.
  • 혹은 특정 객체 태그에 규칙을 적용할 수도 있다.

수명 주기 시나리오 1

EC2에 썸네일 이미지를 생성하는 애플리케이션이 있다.

해당 애플리케이션은 S3에 이미지가 올라오면 썸네일을 만든다.

이 썸네일은 쉽게 다시 만들 수 있고 60일 동안만 썸네일을 보관하면 된다.

source 이미지는 60일간 즉시 접근이 가능해야 하며, 60일 이후에
유저는 최대 6시간까지 이미지가 불러와지는 걸 기다릴 수 있다.

 

  • S3 원본 이미지는 standard에 둔다
    수명 주기 설정을 통해 60일 후 Glacier로 전환되도록 설정한다
    (Glacier는 이미지를 불러오는데 6시간이 소요된다.)
  • 썸네일 이미지는 One-Zone IA에 두고 (쉽게 다시 만들 수 있으므로) 60일 이후에 삭제되도록 한다.

S3 Analytics - 스토리지 클래스 분석

  • 객체를 어느 클래스로 옮길지 분석을 도와준다.
  • Standard나 Standard IA 클래스에서 사용하는 것을 추천한다.
    • One-Zone IA와 Glacier에서는 사용할 수 없다.
  • S3 Analytics는 권장 사항과 통계를 제공하는 CSV 파일을 생성한다. 
  • 보고서는 매일 업데이트 되며, 보고서에서 나온 데이터 분석을 보기 위해선
    24~48시간을 기다려야 한다.
  • Analytics를 바탕으로 타당한 사유로 수명 주기 규칙을 바꿀 수 있다. 

S3 Event Notifications

여기서 말하는 이벤트란

객체가 생성되거나, 삭제되거나 복원 또는 복제가 일어나는 것을 의미한다.

이런 이벤트가 발생했을 때 알림을 제공하거나, 특정 작업을 수행하는 것을 S3 Event notification이라한다.

  • 이런 이벤트들을 필터링할 수 있다. (jpg 파일만 보게 해달라)
  • S3에 업로드 되는 모든 이미지의 썸네일을 생성할 수도 있다.
  • 원하는 만큰 S3 이벤트를 생성할 수 있다.
    • 그리고 원하는 대상으로 보낼 수 있다.
    • 생성된 이벤트는 목적지로 바로 전달되나 몇 분이 소요될 수도 있다.

IAM Permissions

  • 이벤트 알림이 작동하기 위해서는 IAM 권한이 필요하다.
  • 예를 들어 S3에서 SNS에 데이터를 보낸다고 하면
    • SNS 리소스 접근 권한을 허용해줘야 한다.

  • 다른 리소스들도 마찬가지다.
  • S3에 권한을 설정하는 것이 아닌
  • SQS나 람다 함수의 허용 리소스에 S3를 추가하면 된다

이벤트 알림 대상으로 위의 3가지가 존재한다는 것을 기억하자

Amazon EventBridge

  • 이벤트는 모두 S3 버킷으로 가서 모두 Amazon EventBridge를 거치게 된다.
  • 이벤트 브릿지에서는 규칙을 설정할 수 있다.
    • 해당 규칙을 기반으로 18 종류의 AWS 서비스를 목적지로 이벤트를 보낼 수 있다.
  • 이벤트 브릿지를 사용하면 훨씬 더 많은 고급 필터링 옵션을 사용할 수 있다.
    • 메타데이터나 객체 크기 , 이름 등등으로 필터링이 가능해진다.
  • 보낼 수 있는 목적지가 늘어난다.
    • Step fuction, Kinesis Streams, Firehose ,,

정리

  • S3 Event Notification에서 이벤트를 보낼 수 있는 대상은 4가지다.
    1. SQS
    2. SNS
    3. Lambda Function
    4. Amazon EventBridge

S3 - Baseline Performance

  • 기본적으로 아마존 S3는 자동 스케일링 기능이 있다.
    • S3에서 첫 번째 바이트를 가져오는데 100~200ms의 매우 짧은 지연 시간을 갖는다.
  • 버킷 내 한 prefix당 초당 3500개의 put,copy,post,delete 를 수행할 수 있고,
  • 초당 5500의 get, head 요청을 처리할 수 있다.
  • 버킷의 prefix 수는 제한이 없다.
  • prefix란?
    • bucketname/folder1/sub/파일
    • 이라는 경로가 존재할 때 여기서 prefix는 버킷이름과 파일 사이의 모든 항목을 의미한다.
      • 즉 /folde1/sub가 prefix다
      • /folder1/sub에서 초당 3,500개의 넣기와 5,500개의 가져오기를 얻을 수 있다는 의미다.
    • 만일 /forder1/sub2 라는 prefix가 존재한다면 여기서도 초당 3,500개의 넣기와 5,500개의 가져오기를 얻을 수 있다.
  • 따라서 접두사를 다르게 설정하여 각각 다른 4개의 접두사에 고르게 부하를 분산한다면
    • get,head의 성능은 초당 22,000까지 향상될 수 있다.

S3 성능과 최적화 방법

  • Multi-part upload: 100MB가 넘는 파일에는 멀티파트 업로드를 사용하는 것이 좋다.
    • 5GB가 넘는 파일에는 반드시 사용해야 한다.
    • 멀티파트 업로드는 업로드를 병렬로 처리한다.
    • 따라서 전송 속도를 높여 대역폭을 최대화하는 데 도움이 된다.

  • S3 Transfer Acceleration
    • 업로드 및 다운로드 속도를 증가시키는 기능이다.
    • 파일을 AWS 엣지로 전송하여 전송 속도를 높이는 것이다.
      • 해당 데이터는 대상 지역의 S3 버킷으로 전달된다.
      • 현재 200개가 넘는 엣지 위치가 있다.
    • 전송 가속화는 멀티파트 업로드와 호환된다.
    • 특정 지역의 AWS 엣지에서 다른 지역의 S3 버킷까지 private 네트워크를 통해
      이동하기 때문에 공공 인터넷의 사용량을 최소화 하여 속도를 증가 시킬 수 있다.
    •  물론 USA의 edge 까지는 공공 네트워크를 사용하여 전송된다.

S3 Byte-Range Fetches

  • S3는 병렬식으로 파일을 가져와 get 요청의 처리 속도가 빠르다.
    • 특정 바이트 범위를 병렬 식으로 가져오는 방법이다.
  • 특정 바이트 범위를 가져오는데 실패해도, 특정 범위만 다시 가져오면 되기 때문에 복원력이 높다.
  • 따라서 다운로드 속도를 높일 수 있다.

  • 파일의 일부만 검색하는 식으로도 활용될 수있다.
  •  만약 파일의 첫 50 바이트가 헤더라면 
    • 첫 50 바이트만 가져와 헤더를 처리할 수 있다. 

S3 Select & Glacier Select

  • S3에 저장된 객체에서 특정 데이터를 SQL 쿼리를 통해 추출하는 기능이다.
  • 객체 하나를 통으로 다운로드 하지 않고 객체 내부에서 특정 부분만 가져올 수 있기에 성능이 좋다.
  • 네트워크 전송량을 줄이고 CPU 사용량도 줄일 수 있다.
  • S3 Select를 사용하는 것이 최대 400% 빠르고 비용은 80% 더 저렴하다고 한다.

S3 User Defined Object Metadata & S3 Object Tags

S3 User Defined Object Metadata 

  • 객체를 만들고 객체를 업로드 할 때 메타데이터도 할당할 수 있다.
  • 메타 데이터는 객체에 연결된 key-value를 의미한다.
  • 시스템 정의 메타데이터는 S3에서 자동으로 생성하는 메타데이터로
    • Content-type, Content-Length, Last-Modified 같은 속성을 갖고 있다.
  • 사용자 정의 메타데이터는 x-amz-meta-의 이름으로 시작하는 키를 사용해야 한다.
    • S3는 이 메타 데이터의 키를 소문자로 저장한다.
  • 메타 데이터는 객체에 대한 부가정보를 얻을 때 사용한다.

S3 Object Tags

  • S3 객체에 대한 key-value 쌍이다.
  • 태그를 사용해 특정 그룹만이 특정 태그가 달린 객체에 접근하게 하는 등
    • 권한을 세분화 할 수 있다.
  • 또한 S3 Analytics를 사용할 때 태그를 기준으로 검색 결과를 그룹화 할 수도 있다.

S3에서 메타데이터와 태그를 검색할 수 없다는 점을 기억하자

메타데이터로 필터링 하거나 태그로 특정 데이터를 필터링 할 수 없다. 

 

  • S3 버킷에서 검색을 사용하려면 데이터베이스에서 외부 인덱스를 구축해야 한다. 
    • 모든 메타데이터와 태그를 DynamoDb의 검색할 수 있는 인덱스에 넣은 다음
    •  DynamoDB에서 검색을 수애하면 검색 결과는 S3의 객체로 추출된다.