기존 파일과 향후 파일 모두에 대해 전체 s3 버킷에 대해 캐시 제어 헤더를 설정해야하며 버킷 정책에서이를 수행하려고했습니다. 기존 파일을 편집 할 수 있다는 것을 알고 있으며 직접 업로드하면 파일을 지정하는 방법을 알고 있지만 안타깝게도 파일을 업로드하는 앱은 s3fs를 사용하여 파일을 복사하므로 헤더를 설정할 수 없습니다.
기존 파일과 향후 파일 모두에 대해 전체 s3 버킷에 대해 캐시 제어 헤더를 설정해야하며 버킷 정책에서이를 수행하려고했습니다. 기존 파일을 편집 할 수 있다는 것을 알고 있으며 직접 업로드하면 파일을 지정하는 방법을 알고 있지만 안타깝게도 파일을 업로드하는 앱은 s3fs를 사용하여 파일을 복사하므로 헤더를 설정할 수 없습니다.
답변:
이제이 작업을 수행하는 3 가지 방법이 있습니다. AWS 콘솔 , 명령 줄 또는 s3cmd 명령 줄 도구를 통해 .
이제 이것이 권장되는 솔루션입니다. 간단하지만 시간이 좀 걸릴 수 있습니다.
( @biplob 덕분에-아래에서 그에게 사랑을주십시오 )
원래이 버킷 정책을 만들었을 때 아무 문제가 없었기 때문에 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는 "Amazon S3 및 CloudFront 서비스를 관리하기위한 명령 줄 도구"입니다. 이 솔루션에는 git pull이 필요하지만 더 간단하고 포괄적 인 솔루션이 될 수 있습니다.
전체 지침은 아래 @ ashishyadaveee11의 게시물을 참조하십시오.
도움이 되었기를 바랍니다.
cp
다운로드 및 다시 업로드 모든 것을?
이제 AWS 콘솔에서 쉽게 변경할 수 있습니다.
실행하는 데 시간이 걸리는 것은 버킷 파일에 따라 다릅니다. 실수로 브라우저를 닫은 경우 처음부터 다시 실행하십시오.
단계
git clone https://github.com/s3tools/s3cmd
s3cmd --configure
(확인 이메일 또는 Amazon 계정 페이지에서 키를 복사하여 붙여 넣으라는 메시지가 표시됩니다. 복사 할 때주의하십시오! 대소 문자를 구분하고 정확하게 입력해야합니다. 그렇지 않으면 유효하지 않은 오류에 대한 오류가 계속 발생합니다. 서명 또는 유사합니다. s3:ListAllMyBuckets
키 에 권한 을 추가해야합니다. 그렇지 않으면 AccessDenied
액세스를 테스트하는 동안 오류가 발생합니다.)./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 REPLACE
cp
S3의 기존 파일에서 메타 데이터를 " "수정할 때 필요합니다.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
버킷 수준에서 지정할 수 없다고 생각하지만 몇 가지 해결 방법이 있습니다.
복사cache-control
작업에 적합한 헤더를 설정하여 S3 에서 객체를 자신 에 복사합니다.
파일에 대한 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를 사용해야한다는 것입니다.