AWS CloudFront 배포 소스 파일(S3)이 업데이트되면 캐시를 자동으로 지우는 메커니즘을 만듭니다.

깨진 일



이런 느낌의 앱 구성으로

CloudFront를 통해 S3에 저장된 콘텐츠를 게재하는 경우,
CloudFront의 CloudFront 에지 위치 (캐시 서버)에서 콘텐츠를 클라이언트에 전달하기 때문에,
클라이언트는 종종 최신 콘텐츠가 넘어가지 않는 사건이 종종 발생합니다.

CloudFront에 캐시를 남기지 않으려면?



설정에 따라 할 수 있지만,
그렇다면 CloudFront는 의미가 없습니다.
그것과 매번, 전달원의 S3에 액세스 가게 되기 때문에 S3의 액세스수가 증가해 버립니다. (돈이 든다)

해결 방법



CloudFront의 배포 원본 파일(S3)이 업데이트되면 자동으로 CloudFront의 캐시를 클리어(Invalidation)해 주는 구조를 만듭니다.

전달하는 파일에도 클라이언트가 캐시하지 않도록 메타 정보를 부여합니다.
방법은 이쪽의 기사를 참고로
htps : // 코 m / 안쵸오 r / ms / 2dc6 아 b8347c940 에 4648

그 구조 어떤 식으로 만드는거야?



배포 소스 파일(S3) 업데이트를 트리거로 실행하는 LambdaFunction을 만듭니다.
그 LambdaFunction 내에서 CloudFront의 캐시를 클리어(Invalidation) 해 줍니다.

이렇게 만드는 거야




S3의 객체 업데이트를 트리거로 발화
LambdaFunction을 만듭니다.

※자세한 것은, 이쪽의 기사로 기재하고 있습니다.
AWS S3 객체 업데이트를 트리거로 발화하는 LambdaFunction 생성

LambdaFunction의 내용



이번에는 Go로 썼습니다.
AWS API(AWS SDK for Go)에 CloudFront 캐시를 지우는 API가 있기 때문에
그 녀석을 킥 해줄 뿐입니다.
htps : // / cs. 아 ws. 아마존. 이 m/sdk-후-r-고/아피/세 rゔぃせ/cぉうdf ロンt/#CぉうF んt. C Retain ゔ ぃ

※자세한 것은, 이쪽의 기사로 기재하고 있습니다.
AWS S3 버킷 이름에서 CloufFront 캐시를 지우는 API 호출

구현에 고생한 점



롤 주위나 권한 문제로 실제로 작동하기까지 시간이 걸렸습니다.
이것은 에러 메시지가 정중하게 출력되기 때문에 하나하나 대응해 가면 문제 없습니다만,

S3 객체의 업데이트 트리거에 대해서는 그렇게 되지 않았습니다.
나는 S3 버킷의 모든 객체를 업데이트 체크 대상으로하고 있기 때문에,
오브젝트 갱신하면 갱신한 수의 오브젝트의 수분, 발화해 버립니다.

즉, 대상 S3 버킷의 내용 20개의 파일을 저장, 갱신하면 20회 발화합니다.

힘든 점의 대응



Go 구현 내에서 API(CloudFront.CreateInvalidation)를 실행할 때 고유한 ID를 지정합니다.
그 ID에는 현재 연월일시분초를 지정하고 있었습니다만,
그것을 현재 연월 일시분을 지정하는 것으로 1분에 1회 밖에 CreateInvalidation를 실행하지 않게 했습니다. 이벤트 발화의 최초의 1회만 실행되어, 후의 발화는 모두 ID가 중복하고 있기 (위해)때문에, 에러가 되기 때문에 1분에 1회 밖에 실행되지 않습니다.

따라서 S3 버킷의 내용 20개의 파일을 저장, 갱신하면 20회 발화합니다만, 1회만 정상적으로 CreateInvalidation을 실행해, 19회는 에러가 됩니다.

소감



이제 클라이언트는 항상 CloudFront 엣지 로케이션(캐시 서버)을 보러 가고, 보러 가는 CloudFront 엣지 로케이션(캐시 서버)은 최신 콘텐츠가 넘어갑니다.

CloudFront 표준의 기능으로 준비해 주어도 좋다고 생각하는 기능이었습니다.

이 기능을 구현한 직후에 이런 기사가 ...
「【낭보】Amazon CloudFront의 캐시 삭제(Invalidation)가 빨라졌습니다【5초로 90%】」
htps : //에서 v.ぁsss d. jp / c ぉ d / 아 ws / c ぉ df long t fu st - an ゔ ぃ 다치 온 /

※구성도는 이쪽의 기사를 참고로 작성했습니다.
htps : // 이 m / 나 ょ m / ms / 68425f476b254 아 1 아 47b0

좋은 웹페이지 즐겨찾기