[AWS] CloudFront Cache 삭제하기

반응형

이번 글에서는 Invalidation을 사용해 CloudFront 콘텐츠를 강제로 갱신해보도록 하겠습니다.

0. CloudFront란?

전 세계에 파일을 빠른 속도로 배포하는 CDN 서비스입니다.

전 세계를 대상으로하는 서비스를 준비한다면, 세계 곳곳에 서버를 구축하는것은 현실적으로 불가능합니다. AWS를 사용하더라도, 모든 리전에 EC2 인스턴스와 S3버킷을 생성하는것은 비효율적이며, 비용도 많이 들게 됩니다. 이때 CloudFront를 이용해 EC2 인스턴스, ELB, S3 버킷의 내용을 에지 로케이션(Edge Location)에 캐시(Cache)하면 효율적으로 글로벌 서비스를 구축 할 수 있습니다.

자세한 내용은 아래의 책을 참고하시길 바랍니다.

 

아마존 웹 서비스를 다루는 기술:실무에서 알아야 할 기술은 따로 있다!

COUPANG

www.coupang.com

1. S3, CloudFront 구조

이번 실습에선 이미 S3 버킷과 연결된 CloudFront가 있다고 가정하겠습니다.

CloudFront로 배포되는 파일의 캐시 유지시간은 기본 24시간이며, Origin HTTP Header의 캐시 설정(Cache-Control)을 이용해 캐시가 유지되는 시간을 자유롭게 설정 할 수 있습니다.

즉, S3 버킷의 내용을 변경했다고 하더라도 캐시가 유지되는 시간이내에서는 해당 변경내용이 CloudFront에 반영되지 않습니다. 만약 기본 유지시간을 사용한다면, 24시간이 지나야 해당 변경내용이 반영됩니다.

저는 Origin이 'daily-mission.com.s3.amazonaws.com'인 CloudFront와

image.png

위의 CloudFront와 연결된 'daily-mission' S3버킷을 가지고 실습을 진행하겠습니다.

image.png

현재 S3 버킷에는 index.html 파일이 올라가 있으며

image.png

index.html

<html>

<head>
    <title>Example S3</title>
</head>

<body>
    <p>Hello S3 - Route 53</p>
</body>

</html>

해당 S3 Bucket은 Static web hosting으로 index.html을 Index document로 사용하고 있습니다.

image.png

CloudFront에 S3 Bucket이 연결되어있기 떄문에 CloudFront의 도메인인 'd3adpjrejauudb.cloudfront.net'로 접속하면 아래와 같이 index.html의 내용이 보여지게 됩니다.

image.png

2. index.html 업데이트

다음으로 S3 Bucket의 Index document인 index.html을 아래와 같이 수정하고, 업로드 하겠습니다.

<html>

<head>
    <title>Example S3</title>
</head>

<body>
    <p>Hello S3 - CloudFront</p>
</body>

</html>

업로드 후, index.html의 Object URL을 클릭해보면

image.png

아래와 같이 내용이 변경된것을 확인할 수 있습니다.

image.png

현재는 실습을위해 S3 버킷의 Public Access를 허용가능하게 해놓았습니다. 실제 사용하는 서비스에서는 S3 버킷은 CloudFront에서만 접근가능하도록 변경해야합니다. (만약, CloudFront를 사용한다면)

하지만, CloudFront의 도메인으로 접속하면 아래와 같이 내용이 업데이트 되지 않았습니다.

image.png

앞서 말씀드렸듯이 CloudFront의 캐시 유지 정책에 따라, 캐시 만료전까지는 파일의 내용을 갱신하지 않습니다.

이를 무시하고 강제로 파일의 내용을 갱신하고 싶으면 Invalidation(무효화) 기능을 사용하면 됩니다.

2. Invalidation 사용하기

Invalidation(무효화) 기능을 사용하기위해 해당 CloudFront의 ID를 클릭합니다.

image.png

그리고 Invalidations 탭으로 이동해 'Create Invalidation' 버튼을 눌러 무효화 요청을 생성합니다.

image.png

Object Paths 부분에 무효화할 파일의 목록을 입력하면 됩니다. 저는 index.html 파일의 내용을 수정했으므로, /index.html을 입력합니다. 최상위에 위치한 파일은 파일명만 입력해도 되며 /index.html과 같이 절대경로로 입력해도 됩니다. 하위 디렉토리에 위치한 파일은 /images/hello.png와 같이 절대경로로 입력하면 됩니다.

여러개의 파일은 새 줄로 구분하여 입력하고, 무효화 요청은 한번에 1,000개의 파일까지 처리가 가능합니다.

image.png

'Invalidate' 버튼을 눌러 무효화 규칙을 적용하면, 아래와 같이 무효화가 진행됩니다. Status가 Completed로 바뀌게 되면 무효화 요청이 완료되었습니다.

image.png

이후 다시한번 CloudFront의 도메인에 접속하면, index.html의 업데이트한 내용이 반영되어 있습니다.

image.png

Invalidation 기능은 12장 맨뒤에 나옵니다. 저는 해당 내용을 모르고 앞쪽의 실습을 진행하다 index.html 파일을 분명히 변경했는데 왜 반영이 안되지?.. 라고 한참을 고생했었습니다. 혹시라도 이글을 보시는분들에게 도움이 되기를 바랍니다.

3. 결론

캐시정책 시간 이전에 강제로 CloudFront의 배포내용을 업데이트하고 싶다면?
-> Invalidation(무효화) 기능을 사용한다.


파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음


반응형

댓글

Designed by JB FACTORY