문제

웹 앱의 정적 파일을 제공하기 위해 Amazon의 Cloudfront를 사용하고 있습니다.

Cloudfront 배포판에 파일을 새로 고쳐야한다고 말하거나 새로 고침 해야하는 단일 파일을 지적해야한다고 말할 방법이 없습니까?

Amazon 은이 문제의 해결 방법으로 logo_1.gif, logo_2.gif 등과 같은 파일을 버전 할 것을 권장하지만 꽤 어리석은 솔루션처럼 보입니다. 다른 방법이 전혀 없습니까?

도움이 되었습니까?

해결책

좋은 소식. 아마존은 마침내 무효 기능을 추가했습니다. API 참조를 참조하십시오.

API 참조의 샘플 요청입니다.

POST /2010-08-01/distribution/[distribution ID]/invalidation HTTP/1.0
Host: cloudfront.amazonaws.com
Authorization: [AWS authentication string]
Content-Type: text/xml

<InvalidationBatch>
   <Path>/image1.jpg</Path>
   <Path>/image2.jpg</Path>
   <Path>/videos/movie.flv</Path>
   <CallerReference>my-batch</CallerReference>
</InvalidationBatch>

다른 팁

3 월 19 일 현재 Amazon은 이제 CloudFront의 캐시 TTL이 0 초가되므로 이론적으로는 오래된 객체를 볼 수 없습니다. 따라서 S3에 자산이있는 경우 AWS 웹 패널 => S3 => 속성 편집 속성 => 메타 데이터로 이동 한 다음 "Cache-Control"값을 "max-age = 0"으로 설정할 수 있습니다.

이것은 바로에서 나옵니다 API 문서:

Cloudfront가 객체를 캐시하는지 여부와 시간이 얼마나되는지 제어하려면 Max-Age = Directive와 함께 캐시 제어 헤더를 사용하는 것이 좋습니다. Cloudfront는 지정된 초의 객체를 캐시합니다. (최소값은 0 초입니다.)

무효화 API를 사용하면 몇 분 안에 업데이트됩니다.
체크 아웃 PHP Invalidator.

5 분 안에 자동 업데이트 설정

좋아요. 자동 CloudFront Update (Invalidation)를 수행하는 가장 좋은 방법은 파일이 S3 버킷 (새 제품 또는 재 작성)에 업로드 될 때마다 트리거 될 LAMBDA 기능을 작성하는 것입니다.

Lambda 기능을 한 번도 사용한 적이 없어도 정말 쉽습니다. 단계별 지침을 따르면 5 분만 소요됩니다.

1 단계

이동 https://console.aws.amazon.com/lambda/home 그리고 클릭 람다 함수를 만듭니다

2 단계

클릭 빈 기능 (사용자 정의)

3 단계

빈 (스트로크) 상자를 클릭하고 선택하십시오 S3 콤보에서

4 단계

당신을 선택하십시오 버킷 (클라우드 프론트 분포와 동일)

5 단계

설정을 설정하십시오 이벤트 유형 "개체 생성 (모두)"으로

6 단계

세트 접두사와 접미사 또는 그것이 무엇인지 모르면 비워 두십시오.

7 단계

확인하다 트리거를 활성화합니다 확인란 및 클릭 다음

8 단계

기능의 이름을 지정하십시오 (같은 것 : YourBucketNames3TocloudFrontonCreateAll)

9 단계

고르다 파이썬 2.7 (또는 나중에) AS 실행 시간

10 단계

기본 파이썬 코드 대신 다음 코드를 붙여 넣습니다.

from __future__ import print_function

import boto3
import time

def lambda_handler(event, context):
    for items in event["Records"]:
        path = "/" + items["s3"]["object"]["key"]
        print(path)
        client = boto3.client('cloudfront')
        invalidation = client.create_invalidation(DistributionId='_YOUR_DISTRIBUTION_ID_',
            InvalidationBatch={
            'Paths': {
            'Quantity': 1,
            'Items': [path]
            },
            'CallerReference': str(time.time())
            })

11 단계

열려 있는 https://console.aws.amazon.com/cloudfront/home 새 브라우저 탭에서 다음 단계에서 사용할 클라우드 프론트 배포 ID를 복사하십시오.

12 단계

Lambda 탭으로 돌아가서 Python 코드에서 _your_diptribution_id_ 대신 배포 ID를 붙여 넣습니다. 주변 인용문을 유지하십시오.

13 단계

세트 매니저: lambda_function.lambda_handler

14 단계

클릭하십시오 역할 Combobox 및 선택 사용자 정의 역할을 만듭니다. 브라우저의 새 탭이 열립니다.

15 단계

딸깍 하는 소리 정책 문서를 봅니다, 클릭 편집하다, 클릭 확인 역할 정의를 다음 (그대로)으로 바꾸십시오.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "arn:aws:logs:*:*:*"
    },
    {
      "Effect": "Allow",
      "Action": [
          "cloudfront:CreateInvalidation"
      ],
      "Resource": [
          "*"
      ]
    }
  ]
}

16 단계

딸깍 하는 소리 허용하다. 이것은 당신을 람다로 돌려 줄 것입니다. 방금 만든 역할 이름을 두 번 확인하면 기존 역할 콤보 박스.

17 단계

세트 메모리 (MB) 128과 시간 초과 5 초

18 단계

딸깍 하는 소리 다음, 그런 다음 클릭하십시오 기능을 만듭니다

19 단계

당신은 가기 좋다! 이제 모든 파일을 S3에 업로드/다시 업로드 할 때마다 모든 CloudFront Edge 위치에서 평가됩니다.

추신 - 테스트 할 때 브라우저가 로컬 캐시가 아닌 Cloudfront에서 이미지를로드하는지 확인하십시오.

PSS- 한 달에 처음 1000 파일의 파일 만 무효화되며, 각 제한에 대한 무효화 비용은 $ 0.005 USD입니다. 또한 Lambda 기능에 대한 추가 요금이 적용될 수 있지만 매우 저렴합니다.

버킷 익스플로러 지금 매우 쉽게 만드는 UI가 있습니다. 방법은 다음과 같습니다.

버킷을 마우스 오른쪽 버튼으로 클릭하십시오. "분배 관리"를 선택하십시오.
배포를 마우스 오른쪽 버튼으로 클릭하십시오. "Cloudfront Invalidation List 가져 오기"를 선택한 다음 "Create"를 선택하여 새 무효화 목록을 작성하십시오. 무효화 할 파일을 선택하고 "무효화"를 클릭하십시오. 5-15 분 기다리십시오.

당신이 가지고 있다면 보토 설치 (파이썬뿐만 아니라 유용한 명령 줄 유틸리티를 설치하는 것도 설치)에 따라 특별히 호출되는 명령 줄 Util을 제공합니다. cfadmin 또는 다음 기능을 제공하는 'Cloud Front Admin'

Usage: cfadmin [command]
cmd - Print help message, optionally about a specific function
help - Print help message, optionally about a specific function
invalidate - Create a cloudfront invalidation request
ls - List all distributions and streaming distributions

실행하여 물건을 무효화합니다.

$sam# cfadmin invalidate <distribution> <path>

이 페이지를 방문하는 사람에게 알리기 위해 게시하는 것만으로 게시합니다 ( 'Cloudfront File Fromphent'의 첫 번째 결과)는 사용하기 쉬운+액세스가 있음을 알 수 있습니다. Swook.net에서 온라인 Invalidator를 사용할 수 있습니다

이 새로운 Invalidator는 다음과 같습니다.

  • 완전히 온라인 (설치 없음)
  • 24x7 (Google에서 호스팅)을 사용할 수 있으며 멤버십이 필요하지 않습니다.
  • 역사 지원과 경로 점검을 통해 파일을 쉽게 무효화 할 수 있습니다. (처음으로 무효화 후 몇 번의 클릭만으로 종종!)
  • 당신이 읽을 때 알 수 있듯이 그것은 매우 안전합니다. 릴리스 게시물.

전체 공개 : 나는 이것을 만들었다. 재미있게 보내세요!

이를 수행하는 매우 쉬운 방법 중 하나는 폴더 버전화입니다.

예를 들어 정적 파일이 수백 개의 파일 인 경우, 모든 파일을 연말+버전으로 불리는 폴더에 넣으십시오.

예를 들어 2014_v1이라는 폴더를 사용합니다. 여기서 내부에는 모든 정적 파일이 있습니다 ...

그래서 내 html 내부에 나는 항상 폴더를 참조합니다. (물론 PHP가 폴더 이름을 설정 한 위치가 포함되어 있습니다.) 1 파일로 변경하면 실제로 모든 PHP 파일에서 변경됩니다.

완전한 새로 고침을 원한다면 폴더의 이름을 2014_v2로 바꾸고 PHP 내부의 변경 사항을 2014_v2로 변경합니다.

모든 HTML은 자동으로 변경하고 새 경로를 요청하고 Cloudfront Miss Cache를 요청하여 소스에 요청합니다.

예 : source.mydomain.com은 내 소스, cloudfront.mydomain.com은 cloudfront 배포판에 cname입니다.

따라서 PHP는이 파일을 Cloudfront.mydomain.com/2014_v1/javaScript.js라고 불렀고 전체 새로 고침을 원할 때 폴더를 "2014_V2"로 소스로 바꾸고 폴더를 "2014_V2"로 설정하여 PHP를 변경합니다. .

이와 같이 무효화에 대한 지연이없고 비용이 없습니다!

이것은 stackoverflow의 첫 번째 게시물입니다. 잘했으면 좋겠어요!

TTL = 1 시간을 설정하고 교체하십시오

http://developer.amazonwebservices.com/connect/ann.jspa?annid=655

루비에서 안개 보석을 사용합니다

AWS_ACCESS_KEY = ENV['AWS_ACCESS_KEY_ID']
AWS_SECRET_KEY = ENV['AWS_SECRET_ACCESS_KEY']
AWS_DISTRIBUTION_ID = ENV['AWS_DISTRIBUTION_ID']

conn = Fog::CDN.new(
    :provider => 'AWS',
    :aws_access_key_id => AWS_ACCESS_KEY,
    :aws_secret_access_key => AWS_SECRET_KEY
)

images = ['/path/to/image1.jpg', '/path/to/another/image2.jpg']

conn.post_invalidation AWS_DISTRIBUTION_ID, images

무효화 중에도 모든 Amazon Edge 서버를 처리하고 새로 고치는 데 여전히 5-10 분이 걸립니다.

현재 AWS CLI는 미리보기 모드에서 무효화를 지원합니다. 콘솔에서 다음을 한 번 실행하십시오.

aws configure set preview.cloudfront true

NPM을 사용하여 웹 프로젝트를 배포합니다. 나는 다음 스크립트가 있습니다 package.json:

{
    "build.prod": "ng build --prod --aot",
    "aws.deploy": "aws s3 sync dist/ s3://www.mywebsite.com --delete --region us-east-1",
    "aws.invalidate": "aws cloudfront create-invalidation --distribution-id [MY_DISTRIBUTION_ID] --paths /",
    "deploy": "npm run build.prod && npm run aws.deploy && npm run aws.invalidate"
}

위의 스크립트를 제자리에두면 다음과 같이 사이트를 배포 할 수 있습니다.

npm run deploy

AWS를 사용하는 경우 공식 CLI 도구 (조만간)를 사용할 수도 있습니다. AWS CLI 버전 1.9.12 또는 위는 파일 이름 목록을 무효화하는 것을 지원합니다.

전체 공개 : 나는 이것을 만들었다. 재미있게 보내세요!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top