[amazon-web-services] CloudFront 배포 / 파일 업데이트 강제

Amazon CloudFront를 사용하여 웹 앱의 정적 파일을 제공하고 있습니다.

Cloudfront 배포에서 파일을 새로 고치거나 새로 고쳐야하는 단일 파일을 가리켜 야한다고 말할 방법이 없습니까?

Amazon 은이 문제의 해결 방법으로 logo_1.gif, logo_2.gif 등과 같은 파일의 버전을 권장하지만 매우 어리석은 해결책 인 것 같습니다. 다른 방법은 없습니까?



답변

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

이것은 API Reference의 샘플 요청입니다.

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 Web Panel => S3 => Edit Properties => Metadata로 이동 한 다음 “Cache-Control”값을 “max-age = 0″으로 설정하면됩니다.

이것은 API 문서 에서 나온 것입니다 .

CloudFront가 객체를 캐시할지 여부와 기간을 제어하려면 max-age = 지시문과 함께 Cache-Control 헤더를 사용하는 것이 좋습니다. CloudFront는 지정된 시간 (초) 동안 객체를 캐시합니다. (최소값은 0 초입니다.)


답변

무효화 API를 사용하면 몇 분 안에 업데이트됩니다. PHP Invalidator를
확인하십시오 .


답변

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

알았어 이제 자동 CloudFront 업데이트 (무효화)를 수행하는 가장 좋은 방법은 파일이 S3 버킷 (새 파일 또는 다시 작성)에 업로드 될 때마다 트리거되는 Lambda 함수를 만드는 것입니다.

이전에 람다 함수를 사용한 적이 없어도 정말 쉽습니다. 단계별 지침을 따르면 5 분 정도 걸립니다.

1 단계

https://console.aws.amazon.com/lambda/home으로 이동하여 람다 함수 생성을 클릭 하십시오.

2 단계

빈 기능 (사용자 정의)을 클릭하십시오

3 단계

빈 상자를 클릭하고 콤보 에서 S3 을 선택하십시오.

4 단계

버킷 선택 (CloudFront 배포와 동일)

5 단계

설정 이벤트 유형을 “개체 생성 (전체)”에

6 단계

접두사와 접미사를 설정 하거나 모르는 경우 비워 두십시오.

7 단계

확인 트리거 활성화 확인란을 클릭 다음을

8 단계

함수 이름을 지정하십시오 ( YouBucketNameS3ToCloudFrontOnCreateAll 등 ).

9 단계

선택 파이썬 2.7 로 (또는 그 이상) 런타임

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 을 열고 다음 단계에서 사용할 CloudFront 배포 ID를 복사하십시오.

12 단계

람다 탭으로 돌아가서 _YOUR_DISTRIBUTION_ID_ 대신 배포 ID를 Python 코드에 붙여 넣으십시오. 인용 부호를 유지하십시오.

13 단계

핸들러 설정 : lambda_function.lambda_handler

14 단계

역할 콤보 상자를 클릭 하고 사용자 정의 역할 작성을 선택 하십시오 . 브라우저의 새 탭이 열립니다.

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 위치에서 평가됩니다.

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

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


답변

버킷 익스플로러 는 이제 이것을 쉽게 할 수있는 UI를 가지고 있습니다. 방법은 다음과 같습니다.

버킷을 마우스 오른쪽 버튼으로 클릭하십시오. “배포 관리”를 선택하십시오.
배포판을 마우스 오른쪽 버튼으로 클릭하십시오. “Cloudfront 무효화 목록 가져 오기”를 선택한 다음 “생성”을 선택하여 새 무효화 목록을 만듭니다. 무효화 할 파일을 선택하고 “유효하지 않음”을 클릭하십시오. 5-15 분 기다립니다.


답변

boto가 설치되어 있다면 (파이썬뿐만 아니라 많은 유용한 명령 줄 유틸리티도 설치합니다) 특별히 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 Refresh’의 첫 번째 결과)에게 사용하기 쉬운 액세스 권한이 있음을 알리기 위해 게시 swook.net에서 가능한 온라인 무효화 기가 있음을

이 새로운 무효 기는 다음과 같습니다.

  • 완전 온라인 (설치 없음)
  • 연중 무휴 (Google에서 호스팅)로 사용할 수 있으며 멤버십이 필요하지 않습니다.
  • 파일을 쉽게 무효화 할 수 있도록 기록 지원 및 경로 확인이 있습니다. (처음 무효화 한 후 몇 번의 클릭만으로도 종종 발생합니다!)
  • 릴리스 게시물을 읽을 때 알 수 있으므로 매우 안전 합니다.

전체 공개 : 나는 이것을했다. 즐기세요!