Amazon S3 및 Cloudfront 캐시, 캐시를 지우거나 캐시를 동기화하는 방법
10 분마다 실행되고 콘텐츠 유형 및 x-amz-meta를 업데이트하는 cron 작업이 있습니다. 그러나 어제 크론 작업이 실행 된 이후로 Amazon은 변경 사항을 선택하지 않습니다 (캐시 새로 고침).
나는 가서 수동으로 변경했지만 변경하지 않았습니다.
동영상이 업로드되면 application/x-mp4
콘텐츠 유형이 있으며 크론 작업 은 동영상 을 video/mp4
.
S3에는 올바른 콘텐츠 유형이 있지만 video/mp4
cloudfront는 application/x-mp4
(이전 콘텐츠 유형) ....
크론 작업은 지난 6 개월 동안 문제없이 작동했습니다.
Amazon 캐싱에 어떤 문제가 있습니까? 캐싱을 어떻게 동기화 할 수 있습니까?
무효화를 사용하여 캐시를 지우거나 지우려는 파일의 경로를 입력하거나 와일드 카드를 사용하여 모든 것을 지울 수 있습니다.
API를 사용하여 수행 할 수도 있습니다! http://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateInvalidation.html
이제 AWS PHP SDK에 메서드가 있지만 더 가벼운 것을 사용하려면 다음 라이브러리를 확인하십시오. http://www.subchild.com/2010/09/17/amazon-cloudfront-php-invalidator/
user3305600의 솔루션은 0으로 설정하는 것이 Origin Cache Headers 사용과 동일하므로 작동하지 않습니다.
실제 코드에 관해서
CloudFront 배포 ID 얻기
aws cloudfront list-distributions
배포의 모든 파일을 무효화하여 CloudFront가 새로운 파일을 가져옵니다.
aws cloudfront create-invalidation --distribution-id=S11A16G5KZMEQD --paths /
내 실제 전체 릴리스 스크립트는
#!/usr/bin/env bash
BUCKET=mysite.com
SOURCE_DIR=dist/
export AWS_ACCESS_KEY_ID=xxxxxxxxxxx
export AWS_SECRET_ACCESS_KEY=xxxxxxxxx
export AWS_DEFAULT_REGION=eu-west-1
echo "Building production"
if npm run build:prod ; then
echo "Build Successful"
else
echo "exiting.."
exit 1
fi
echo "Removing all files on bucket"
aws s3 rm s3://${BUCKET} --recursive
echo "Attempting to upload site .."
echo "Command: aws s3 sync $SOURCE_DIR s3://$BUCKET/"
aws s3 sync ${SOURCE_DIR} s3://${BUCKET}/
echo "S3 Upload complete"
echo "Invalidating cloudfrond distribution to get fresh cache"
aws cloudfront create-invalidation --distribution-id=S11A16G5KZMEQD --paths / --profile=myawsprofile
echo "Deployment complete"
참고 문헌
http://docs.aws.amazon.com/cli/latest/reference/cloudfront/get-invalidation.html
http://docs.aws.amazon.com/cli/latest/reference/cloudfront/create-invalidation.html
S3는 실시간 개발에 사용되지 않지만 새로 배포 된 웹 사이트 사용을 실제로 테스트하려는 경우
http://yourdomain.com/index.html?v=2
http://yourdomain.com/init.js?v=2
마지막에 버전 매개 변수를 추가하면 파일의 캐시 된 버전이 무효화되고 브라우저는 서버 버킷에서 파일의 새 사본을 가져옵니다.
Cloudfront는 캐시가 만료 될 때까지 파일 / 개체를 캐시합니다. 기본적으로 24 시간입니다. 이 값을 큰 값으로 변경하면 더 오래 걸립니다.
캐시를 강제로 지워야하는 경우 무효화를 사용하십시오 . 별도 청구됩니다.
또 다른 옵션은 URL (개체 키)을 변경하여 항상 새 개체를 가져 오는 것입니다.
캐시를 무효화하는 최소한의 솔루션을 찾고 있다면이 편집 된 맨해튼 박사 솔루션 버전이면 충분합니다. 전체 사이트를 새로 고치기를 원한다는 것을 나타 내기 위해 루트 / 디렉토리를 지정하고 있습니다.
export AWS_ACCESS_KEY_ID=<Key>
export AWS_SECRET_ACCESS_KEY=<Secret>
export AWS_DEFAULT_REGION=eu-west-1
echo "Invalidating cloudfrond distribution to get fresh cache"
aws cloudfront create-invalidation --distribution-id=<distributionId> --paths / --profile=<awsprofile>
또한 aws cli를 사용하여 프로필을 생성해야합니다. aws configure --profile
옵션을 사용하십시오 . 아래는 Amazon의 예제 스 니펫입니다.
$ aws configure --profile user2
AWS Access Key ID [None]: AKIAI44QH8DHBEXAMPLE
AWS Secret Access Key [None]: je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
Default region name [None]: us-east-1
Default output format [None]: text
(편집 : 작동하지 않음) 2014 년부터 원할 때마다 캐시를 지울 수 있습니다. 문서를 자세히 살펴 보거나 배포 설정> 행동> 편집으로 이동하십시오.
개체 캐싱 사용 ( 오리진 캐시 헤더 ) 사용자 지정
최소 TTL = 0
http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html
Don't use invalidations. They cannot be reverted and you will be charged. They only way it works for me is reducing the TTL and wait.
Regards
I believe using * invalidate the entire cache in the distribution. I am trying at the moment, I would update it further
Update:
It worked as expected. Please note that you can invalidate the object you would like by specifying the object path.
ReferenceURL : https://stackoverflow.com/questions/22021651/amazon-s3-and-cloudfront-cache-how-to-clear-cache-or-synchronize-their-cache
'programing' 카테고리의 다른 글
vba를 사용하여 현재 작업 디렉토리를 얻는 방법은 무엇입니까? (0) | 2021.01.19 |
---|---|
개체 데이터 소스가있는 ng-options (0) | 2021.01.19 |
보다 크거나 작은 CSS n 번째 하위 (0) | 2021.01.19 |
지도를 복사하는 방법? (0) | 2021.01.19 |
NumPy : 밑이 n 인 로그 (0) | 2021.01.19 |