초보 개발자

AWS S3 고급 본문

AWS SAA

AWS S3 고급

taehyeki 2023. 2. 9. 07:56

스토리지 클래스간 데이터 이동

자신보다 아래에 있는 모든 수준으로 이동이 가능하다.

standard -> standard IA -> inteligent Tiering -> One-Zone IA -> Glacier Instant Retrieval -> Glacier Flexible Retrieval -> Glacier Deep Archive

 

한번에 Deep Archive로 보낼 수도 있다. 보내는 방법에는 수동으로 보내는 방법이 있고, 수명 주기 규칙을 이용해서 자동활 할 수도 있다

 

라이프사이클 룰

transition actions  : 60일 후에 standard IA로 이동하도록 설정하거나, 6개월 후에 Glacier에 아카이빙 되도록 설정할 수 있다.

Expiration actions : 또 일정시간이 지나면 객체가 삭제 또는 만료되게 할 수 있다. 버저닝을 활성화 한 경우에는 이전 버전의 파일을 삭제하도록 설정할 수도 있다. 혹은 완료되지 않은 멀티파트 업로드는 삭제하도록 구성할 수 있다. 

 

규칙은 모든 s3에 적용하지 않고 일부 특정 prefix에만 적용할 수도 있다.

또 특정 객체 태그에만 지정할 수도 있다. 

 

그럼 언제 스토리지 클래스를 변경해야 하는지 알 수 있을까

Amazon S3 Analytics를 이용해서 결정하면 된다. standard와 standard IA용 권장 사항을 제공하고 One-Zone IA, Glacier는 해댱되지 않는다. 리포트를 생성하면 24~48시간 뒤에 csv파일로 나오는데, 이걸 보고 개선방향을 찾아내면 된다.

 

S3 requester pays

버킷 소유자가 버킷 객체 스토리지 비용을 지불한다. 그리고

버킷 소유가 데이터 전송 비용을 지불하는 방법이 일반적이지만

하지만 큰 파일이라면 네트워크 비용도 만만치 않을 것이다.

이 때에 버킷소유자가 네트워크 비용을 담당하는 것이 아니라, 클라이언트측에서 

부담할 수도 있다. 그렇게 하려면 요청자가 익명이어서는 안된다. 요청자( 클라이언트 )는 AWS에서 

인증을 받아야 한다.

 

S3 이벤트 알림

Amazon S3에서 이벤트가 발생한다/.

이벤트란 객체가 생성된 경우이거나, 객체가 삭제되거나 복원된 경우일 수 있다. 혹은 복제

예를들어  .jpg로 끝나는 객체들을 필터링 할 수 있다.

 

만약 s3에 업로드되는 사진의 섬네일을 생성하려고 한다면 이에 대한 이벤트 알림을 만들어서

몇가지 수신지로 보낼 수 있다. SNS SQS lamda func, Amazon Event bridge

s3버킷에 이벤트가 가면 모든 이벤트를 아마존 이벤트 브릿지로 가게되고 거기에서 18개가 넘는 aws서비스에 이벤트 알람을 보낼 수 있다. 

 

 

         
Principal Resource Action Effect Condition
이대상에대해서 이 Resource 에 대한 특정 행동을 불허하거나 허용한다. 조건에 따라서

 

principal : 리소스 기반 JSON 정책의 Principal 요소를 사용하여 리소스에 대한 액세스가 허용되거나 거부되는 보안 주체를 지정합니다.

 

You can specify any of the following principals in a policy:

  • AWS account and root user
  • IAM roles
  • Role sessions
  • IAM users
  • Federated user sessions
  • AWS services
  • All principals

 

 

sqs를 생성하고 s3에 그 sqs를 등록해주는데 액세스에 문제가 있었다.

sqs policy를 수정해줘야 한다고 하는데 principal에 나는 당연히 s3가 적혀야 된다고 생각했는데 s3를 적으니까 안된다.

근데 *를 적으니까 되는데 principal에는 무조건 유저아이디가 들어와야하는것인가?.. 

 

"Principal": {
    "Service": [
        "s3.amazonaws.com"
   ]
}

이걸 적으면 s3에서 보내지긴하는데 s3하나를 특정하지는 못하는 것 같다.

S3 baseline performance

 버킷 내에서 접두사 별로 초당 3500개의 put, copy, post, delete와 초당 5500개의 get/head 요청이 가능하다.

접두사가 4개가 있다고 가정해보자

bucket/forder1/sub1/file ->  bucket/forder1/sub1/

bucket/forder1/sub2/file -> bucket/forder1/sub2/

bucket/1/file -> /1/

bucket/2/file -> /2/

 

이렇게 4개의 접두사가 있고, 네 개의 접두사에 읽기 요청을 균등하게 분산하면 초당 22000개의 get head요청을 할 수 있다.

 

S3 performance

Multi-part upload

100m가 넘는 파일은 멀티파트 업로드를 사용하는 것이 좋고

5gb가 넘는 파일은 무조건 멀티파트 업로드를 사용해야 한다. 

업로드를 병렬화 함으로 전송속도를 높여 대역폭을 최대화 할 수 있다. 

하나의 큰 파일이 있으면 그걸 3개로 나눈뒤 병렬로 s3에 업로드를 한다 업로드가 되고나면

자동으로 모든 파트를 합쳐 다시 하나의 큰 파일로 만든다. 

 

S3 Transfer Acceleration

업로드와 다운로드를 위한 S3 전송 가속화를 알아보자

파일을 AWS 엣지 로케이션으로 전송해서 전송 속도를 높이고 데이터를 대상 리전에 있는 S3 버킷으로 전달한다.

멀티파트 업로드와 같이 사용가능하다. 

 

미국에 있는 파일을 오스트리아에있는 s3버킷에 전송하려고 한다.

미국에 있는 엣지 로케이션을 통해 파일을 업로드하면 아주 빠를 것이다. ( 퍼블릭 네트워크 )

그런 다음 엣지 로케이션에서 호주에있는 s3버킷으로 바른 프라이빗 AWS네트워크를 통해 데이터를 전송한다.

 

퍼블릭 인터넷의 사용량을 최소화하고, 프라이빗 aws 네트오쿼의 사용량을 최대화 하는 것이다. 

 

S3 Byte Range Fetches 

파일을 수신하고 읽는 가장 효율적인 방법이다.

 

can be used to speed up downloads

파일에서 특정 바이트 범위를 가져와서 get 요청을 병렬화한다.

특정 바이트 범위를 가져오는 데 실패한 경우에도 더 작은 바이트 범위에서 재시도하므로

실패의 경우에도 복원력이 높다. 다운로드 속도를 높일 때 사용하다.

 

can be used to retrieve only partial data ( for example the head of a file )

s3에 있는 파일의 첫 50 바이트가 헤더라는 것을 알고, 파일에 대한 정보를 안다면 첫 50바이트를 사요해서

헤더에 대한 바이트 범위요청을 보내면 된다. 그럼 해당 정보를 빠르게 수신할 수 있다.

 

S3 Select & Glacier Select

s3에서 파일을 검색할 때 검색한 다음 필터링 하면 너무 많은 데이털르 검색하게 된다. 대신 서버 측 필터링을 사용하면 어떨까

sql 문에서 간단히 행과 열을 사용해 필터링 할 수 있다고 한다. 
네트워크 전송이 줄어들기에 데이터 검색과 필터링에 드는 클라이언트 측 cpu비용도 줄어든다.

s3 select 이전에는 모든 데이터를 검색한 다음 애플리케이션 측에서 필터링을 통해 필요한 것을 찾았다.

많은 데이터를 가져와서 약간의 데이터만 사용했다. 하지만 s3 select를 사용하면 S3가 대신 파일을 필터링 해주고

필요한 데이터만 검색할 수 있습니다. Amazon S3 select를 사용하면 속도는 400% 빨라지고 비용은 80%줄어든다.

 

클라이엉ㄴ트가 s3에 csv파일을 달라고 요청하면 s3가 자체적으로 파일을 필터링해서 필터링 된 데이터 세트만을 보내게 할 수도 있다

이렇게 하면 데이터 크기가 훨씬 작아 저렴해지게 된다.

 

S3 batch operations

단일 요청으로 기존 S3객체에서 대량 작업을 수행하는 서비스이다. 

한번에 많은 s3객체의 메타데이터와 프로퍼티를 수정할 수 있고,

배치 작업으로 s3버킷 간에 객체를 복사할 수 있다. 

s3버킷 내 암호화 되지 않은 모든 객체를 암호화할 수 있다. 

acl이나 태그를 수정할 수 있고.

s3 glacier에서 한 번에 많은 객체를 복원할 수 있다, 

lamda 함수를 통해 s3 batch operations의 모든 객체에서 사용자 지정 작업도 할 수 있다.

객체 목록에서 원하는 작업은 무엇이든할 수 있다.

 

s3 inventory라는 기능을 사용해 객체 목록을 가져오고

가져온 목록을 s3 select를 사용해 필터링을 하고.

s3 batch operations에 수행할 작업, 매개 변수와 함께 객체 목록을 전달한다. 

그러면 s3가 배치 작업을 수행하고 객체를 처리한다.

 

주요 사례는 s3 inventory를 사용해 암호화 되지 않은 모든 객체를 찾은 다음

s3 batch operations를 사용해 한번에 모두 암호화 하는 것이다. 

 

 

 

 

 

 

'AWS SAA' 카테고리의 다른 글

AWS CloudFront  (0) 2023.02.10
AWS 보안  (0) 2023.02.10
AWS CLI SDK IAM role, policy  (0) 2023.02.08
AWS S3  (0) 2023.02.07
AWS 솔루션 아키텍쳐  (0) 2023.02.06