code

AWS S3에서 캐시 제어를 추가하는 방법은 무엇입니까?

codestyles 2020. 12. 14. 08:13
반응형

AWS S3에서 캐시 제어를 추가하는 방법은 무엇입니까?


s3cmd 명령으로 20000 개의 파일을 AWS S3로 옮겼습니다. 이제 모든 이미지 (.jpg)에 대한 캐시 제어를 추가하고 싶습니다.

이러한 파일은 (s3 : // bucket-name / images /)에 있습니다. s3cmd로 모든 이미지에 대해 캐시 제어를 추가하려면 어떻게해야합니까? 아니면 헤더를 추가하는 다른 방법이 있습니까?

감사


현재 업스트림 마스터 브랜치 ( https://github.com/s3tools/s3cmd )를 사용해보십시오. 이제 modify다음과 같이 사용되는 명령이 있습니다.

./s3cmd --recursive modify --add-header="Cache-Control:max-age=86400" s3://yourbucket/

또한 AWS의 자체 클라이언트와 함께 :

aws s3 sync /path s3://yourbucket/ --recursive --cache-control max-age=604800

다시 업로드하지 않고 타사 도구를 사용하지 않고도 S3의 객체에 대한 캐시 제어와 같은 메타 데이터를 조정하려면 AWS CLI를 사용하여 다음을 수행 할 수 있습니다. 선택한 설정으로 메타 데이터를 재정의하면서 개체를 자체로 복사합니다.

aws s3api copy-object --copy-source <bucket-name>/<file> --bucket <bucket-name> --key <file> --metadata-directive REPLACE --cache-control "max-age=3600"

언급 한대로 버킷에 이미 존재하는 기존 파일 세트에서 수행하려면 find에서이 명령을 처리하십시오.

find . -type f -exec aws s3api copy-object --copy-source <bucket-name>/{} --bucket <bucket-name> --key {} --metadata-directive REPLACE --cache-control "max-age=3600"

대체 <bucket-name>당신의 버킷의 이름으로

경고 : 이것은 acl과 같은 파일에있는 기존의 모든 메타 데이터를 덮어 씁니다. 명령에 추가 플래그를 추가하여 필요한 것을 설정합니다 (예 : --acl public-read전체 공개 액세스 권한 부여). (@jackson에게 감사드립니다)


내 버킷에는 mp4, jpg 및 기타 파일이 있습니다. 업데이트하려는 파일은 "하위 버킷"(예 : https://s3.amazonaws.com/my.bucket/sub-directory/my-video.mp4 )에 저장됩니다. 제 경우에는 mp4 파일의 캐시 컨트롤 만 업데이트하고 싶었습니다.

aws s3 cp \
   s3://my.bucket/sub-directory/ s3://my.bucket/sub-directory/ \
   --exclude '*.jpg' --exclude '*.png' \
   --cache-control 'max-age=31104000' \
   --recursive

이것이 무엇을하는지 테스트하기 위해 --dryrun플래그를 사용할 수 있습니다 .

aws s3 cp --dryrun \
   s3://my.bucket/sub-directory/ s3://my.bucket/sub-directory/ \
   --exclude '*.jpg' --exclude '*.png' \
   --cache-control 'max-age=31104000' \
   --recursive

PUT / ObjectName HTTP/1.1 
Host: BucketName .s3.amazonaws.com 
Date: date 
x-amz-meta-Cache-Control : max-age= <value in seconds> 
Authorization: signatureValue 

모든 메타 데이터 설정에는 키-값 쌍이 포함됩니다. 캐시 제어 메타 데이터 키는 "Cache-Control"이고 값은“max-age=<time for which you want your object to be accessed from cache in seconds>”

두 가지 방법으로 적절한 헤더와 함께 Amazon S3 서버에 HTTP PUT 요청을 전송하여 Amazon S3 객체에 대한 캐시 제어 사용자 지정 헤더를 설정할 수 있습니다.

Amazon S3 REST API PUT 객체 요청을 사용하여 캐시 제어 메타 데이터 설정-프로그래머 인 경우 자체 소프트웨어 프로그램을 작성하여 Amazon S3 REST 또는 SOAP API를 사용하여 PUT 객체 요청으로 사용자 지정 헤더를 설정할 수 있습니다. 이 웹 사이트는 Amazon S3 REST API만을 참조합니다. SOAP API 사용 방법에 대한 자세한 내용은 AWS 설명서 웹 사이트를 참조하십시오. Bucket Explorer 사용자 인터페이스를 사용하여 캐시 제어 메타 데이터 설정-소프트웨어 프로그램을 작성하는 대신 마우스 클릭을 사용하여 캐시 제어와 같은 사용자 지정 HTTP 헤더를 설정하려면 Bucket Explorer의 사용자 인터페이스를 사용할 수 있습니다. 이 사용자 지정 HTTP 헤더를 사용하면 요청 / 응답 체인을 따라야하는 캐싱 동작을 지정하고 캐시가 요청 또는 응답을 방해하지 않도록 할 수 있습니다.

for more information please check How to Set Cache Control Header for Amazon S3 Object?`


If you want to avoid third party tools, and this is a one-time task, you can use the AWS console.

  1. Browse to your s3 bucket
  2. Select all of the objects you want to change
  3. Click Actions -> Change metadata
  4. Select Cache-Control for the key, input whatever control you want as the value
  5. Save

Just upgrade the s3cmd to version 1.5.1 and the issue will resolve.


(Since the OP asked for any other way)

You can also do it via aws-cli, e.g. (v: aws-cli/1.8.8 Python/2.7.2 Darwin/12.5.0):

aws s3api put-object \
--bucket mybucket \
--key my/key \
--cache-control max-age=1 \
--body myfile.txt

Although please note that you will rewrite any existing object.


Another really simple way to do this is to use S3 Browser: http://s3browser.com/ You can simply just shift click or ctrl+a to select all the images you want; then just go to the 'Http Headers' tab and click - 'Add new header' & then 'Apply changes'. It automatically kept all my other permissions and headers.

If you use S3 alot; its a sweet app anyways esp if you have enormous uploads (there's nothing better in the world of ftp, dropbox or otherwise!)

참고URL : https://stackoverflow.com/questions/22501465/how-to-add-cache-control-in-aws-s3

반응형