[amazon-s3] 전체 S3 버킷에 대한 캐시 제어를 자동으로 설정 (버킷 정책 사용?)

기존 파일과 향후 파일 모두에 대해 전체 s3 버킷에 대해 캐시 제어 헤더를 설정해야하며 버킷 정책에서이를 수행하려고했습니다. 기존 파일을 편집 할 수 있다는 것을 알고 있으며 직접 업로드하면 파일을 지정하는 방법을 알고 있지만 안타깝게도 파일을 업로드하는 앱은 s3fs를 사용하여 파일을 복사하므로 헤더를 설정할 수 없습니다.



답변

이제이 작업을 수행하는 3 가지 방법이 있습니다. AWS 콘솔 , 명령 줄 또는 s3cmd 명령 줄 도구를 통해 .


AWS 콘솔 지침

이제 이것이 권장되는 솔루션입니다. 간단하지만 시간이 좀 걸릴 수 있습니다.

  • AWS Management 콘솔에 로그인
  • S3 버킷으로 이동
  • 경로별로 모든 파일 선택
  • 메뉴에서 “더보기”를 선택하십시오
  • “메타 데이터 변경”을 선택합니다.
  • “키”필드의 드롭 다운 메뉴에서 “Cache-Control”을 선택합니다. max-age = 604800 값을 입력합니다 (7 일).
  • “저장”버튼을 누릅니다.

( @biplob 덕분에-아래에서 그에게 사랑을주십시오 )


AWS 명령 줄 솔루션

원래이 버킷 정책을 만들었을 때 아무 문제가 없었기 때문에 aws-cli를 사용하여 수행하는 방법을 생각했고 매우 매끄 럽습니다. 조사 할 때 야생에서 어떤 예도 찾을 수 없었기 때문에 도움이 필요한 사람들을 돕기 위해 몇 가지 솔루션을 게시 할 것이라고 생각했습니다.

참고 : 기본적으로 aws-cli는 새 메타 데이터를 지정하더라도 파일의 현재 메타 데이터 만 복사합니다.

명령 줄에 지정된 메타 데이터를 사용하려면 ‘–metadata-directive REPLACE’플래그를 추가해야합니다. 다음은 몇 가지 예입니다.

단일 파일의 경우

aws s3 cp s3://mybucket/file.txt s3://mybucket/file.txt --metadata-directive REPLACE \
--expires 2034-01-01T00:00:00Z --acl public-read --cache-control max-age=2592000,public

전체 버킷의 경우 (–recursive 플래그 참고) :

aws s3 cp s3://mybucket/ s3://mybucket/ --recursive --metadata-directive REPLACE \
--expires 2034-01-01T00:00:00Z --acl public-read --cache-control max-age=2592000,public

내가 찾은 약간의 문제는 특정 파일 유형에만 적용하려면 모든 파일을 제외하고 원하는 파일을 포함해야합니다.

jpg 및 png 만 :

aws s3 cp s3://mybucket/ s3://mybucket/ --exclude "*" --include "*.jpg" --include "*.png" \
--recursive --metadata-directive REPLACE --expires 2034-01-01T00:00:00Z --acl public-read \
--cache-control max-age=2592000,public

추가 정보가 필요한 경우 설명서에 대한 링크는 다음과 같습니다.

알려진 문제 :

"Unknown options: --metadata-directive, REPLACE"

이것은 오래된 awscli로 인해 발생할 수 있습니다- 아래 @eliotRosewater의 답변 참조


S3cmd 도구

S3cmd는 “Amazon S3 및 CloudFront 서비스를 관리하기위한 명령 줄 도구”입니다. 이 솔루션에는 git pull이 필요하지만 더 간단하고 포괄적 인 솔루션이 될 수 있습니다.

전체 지침은 아래 @ ashishyadaveee11의 게시물을 참조하십시오.


도움이 되었기를 바랍니다.


답변

이제 AWS 콘솔에서 쉽게 변경할 수 있습니다.

  • AWS Management 콘솔에 로그인
  • S3 버킷으로 이동
  • 경로별로 모든 파일 선택
  • 메뉴에서 “더보기”를 선택하십시오
  • “메타 데이터 변경”을 선택합니다.
  • “키”필드의 드롭 다운 메뉴에서 “Cache-Control”을 선택합니다.
  • max-age = 604800 값에 (7 일) 입력
  • “저장”버튼을 누릅니다.

실행하는 데 시간이 걸리는 것은 버킷 파일에 따라 다릅니다. 실수로 브라우저를 닫은 경우 처음부터 다시 실행하십시오.


답변

단계

  1. git clone https://github.com/s3tools/s3cmd
  2. 실행 s3cmd --configure
    (확인 이메일 또는 Amazon 계정 페이지에서 키를 복사하여 붙여 넣으라는 메시지가 표시됩니다. 복사 할 때주의하십시오! 대소 문자를 구분하고 정확하게 입력해야합니다. 그렇지 않으면 유효하지 않은 오류에 대한 오류가 계속 발생합니다. 서명 또는 유사합니다. s3:ListAllMyBuckets키 에 권한 을 추가해야합니다. 그렇지 않으면 AccessDenied액세스를 테스트하는 동안 오류가 발생합니다.)
  3. ./s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/

답변

내 평판 점수가 50 점을 넘었다면 그냥 언급하겠습니다. 그러나 (아직) 아니므로 여기에 또 다른 완전한 대답이 있습니다.


나는 잠시 동안이 문제에 대해 머리를 두드렸다. 문서를 찾아서 읽을 때까지. 다른 사람에게 도움이되는 경우 여기에 공유 :

나를 위해 안정적으로 작동하게 된 것은이 명령이었습니다. 예상 결과를 확인하기 위해 테스트를 위해 1 초의 만료 시간을 선택했습니다.

aws s3 cp \
  --metadata-directive REPLACE \
  --cache-control max-age=1,s-maxage=1 \
  s3://bucket/path/file \
  s3://bucket/path/file
  • --metadata-directive REPLACEcpS3의 기존 파일에서 메타 데이터를 ” “수정할 때 필요합니다.
  • max-age 브라우저 캐싱 기간을 초 단위로 설정합니다.
  • s-maxage CloudFront 캐싱 설정 (초)

마찬가지로 S3에 업로드하는 동안 파일에 이러한 Cache-Control 헤더 값을 설정하면 명령은 다음과 같습니다.

aws s3 cp \
  --cache-control max-age=1,s-maxage=1 \
  /local/path/file \
  s3://bucket/path/file


답변

버킷 수준에서 지정할 수 없다고 생각하지만 몇 가지 해결 방법이 있습니다.

  1. 복사cache-control 작업에 적합한 헤더를 설정하여 S3 에서 객체를 자신 에 복사합니다.

  2. 파일에 대한 URL에 응답 헤더를 지정합니다 . 이 작업을 수행하려면 미리 서명 된 URL을 사용해야하지만 cache-control및을 포함하여 쿼리 문자열에 특정 응답 헤더를 지정할 수 있습니다 expires. 사용 가능한 옵션의 전체 목록은 http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html?r=5225를 참조하십시오.


답변

S3의 PUTOBJECT에서 트리거로 람다를 항상 구성 할 수 있으며, 람다는 방금 놓인이 특정 객체의 헤더를 변경합니다.

그런 다음 위에서 언급 한 복사 명령을 마지막으로 실행하면 모든 새 개체가 람다에 의해 수정됩니다.

최신 정보:

시작하기에 좋은 곳은 다음과 같습니다. https://www.aaronfagan.ca/blog/2017/how-to-configure-aws-lambda-to-automatically-set-cache-control-headers-on-s3-objects /


답변

Dan의 대답을 사용하고 오류를 얻으려는 사람들에게 :

“알 수없는 옵션 : –metadata-directive, REPLACE”

문제가 발생했고 문제는 다음을 사용하여 awscli를 설치했다는 것입니다.

sudo apt-get 설치 awscli

이로 인해 –metadata-directive 명령이 누락 된 이전 버전의 awscli가 설치되었습니다. 그래서 sudo apt-get remove awscli를 사용하여 제거했습니다.

그런 다음 Amazon의 절차에 따라 다시 설치했습니다.
http://docs.aws.amazon.com/streams/latest/dev/kinesis-tutorial-cli-installation.html

유일한 차이점은 다른 사람들도 발생할 수있는 권한 문제 때문에 sudo -H를 사용해야한다는 것입니다.