programing

Amazon S3 및 Cloudfront 캐시, 캐시를 지우거나 캐시를 동기화하는 방법

projobs 2021. 1. 19. 21:06
반응형

Amazon S3 및 Cloudfront 캐시, 캐시를 지우거나 캐시를 동기화하는 방법


10 분마다 실행되고 콘텐츠 유형 및 x-amz-meta를 업데이트하는 cron 작업이 있습니다. 그러나 어제 크론 작업이 실행 된 이후로 Amazon은 변경 사항을 선택하지 않습니다 (캐시 새로 고침).

나는 가서 수동으로 변경했지만 변경하지 않았습니다.

동영상이 업로드되면 application/x-mp4콘텐츠 유형이 있으며 크론 작업 은 동영상 video/mp4.

S3에는 올바른 콘텐츠 유형이 있지만 video/mp4cloudfront는 application/x-mp4(이전 콘텐츠 유형) ....

크론 작업은 지난 6 개월 동안 문제없이 작동했습니다.

Amazon 캐싱에 어떤 문제가 있습니까? 캐싱을 어떻게 동기화 할 수 있습니까?


무효화를 사용하여 캐시를 지우거나 지우려는 파일의 경로를 입력하거나 와일드 카드를 사용하여 모든 것을 지울 수 있습니다.

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html#invalidating-objects-api

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

invalidate request screenshot

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

반응형