2017년 6월 13일 화요일

[AWS] AWS S3를 Origin으로 설정한 CloudFront의 컨텐츠 갱신

AWS S3를 Origin으로 설정한 CloudFront의 컨텐츠 갱신

이전 포스팅에서 AWS S3를 Origin으로 설정해서 CloudFront의 distribution을 생성하는 방법을 정리해보았습니다.
(링크 : https://walkinpcm.blogspot.kr/2017/06/aws-aws-s3-static-website-hosting.html)
그런데 해당 포스팅을 공유했던 페이스북 게시글을 통해서 S3의 파일을 갱신했을 때 CloudFront에는 어떻게 갱신(재배포)하는지 질문을 주셨습니다.
해당 질문에 관해서 감사하게도 여러 분들께서 좋은 답변을 주셔서 저도 도움이 많이 되었습니다.
그래서 이번 포스팅에서 그 S3의 파일이 갱신되었을 때, CloudFront에 어떻게 갱신하는지 정리해보려합니다.

1. CloudFront의 기본 캐싱 기간

CloudFront에 배포된 컨텐츠는 기본적으로 24시간 동안 캐싱된다고 합니다.
그래서 S3의 원본 파일을 갱신하면 24시간 후에는 갱신한 파일로 변경됩니다.

2. 즉시 CloudFront 배포의 캐시를 지우기

이 방법은 CloudFront의 배포(distribution)에 저장되어 있는 캐시를 즉시 지워버려서 클라이언트의 요청이 들어왔을 때, 새롭게 Origin에서 컨텐츠를 가져오도록 하는 방법입니다.
배포된 캐시를 지우려면 Invalidations 기능을 이용합니다.
배포의 Invalidations 탭에서 Create Invalidation을 클릭합니다.
Object Paths에 친절하게 입력 예시가 나오는데, 예시처럼 특정 파일을 입력하거나 와일드카드(*)를 이용하여 경로를 입력하고 Invalidate를 클릭하면 입력한 파일들이 바로 배포에서 지워집니다.

입력 예시는 공식 문서에 자세하게 나와있습니다.
(링크('무효화 경로'를 찾으세요) : http://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html#invalidation-specifying-objects )
Invalidate를 하자마자는 Status가 'In Progress'라고 표시되는데, 모든 엣지에서 지워지면 'Completed'로 변경됩니다.

3. 배포된 전체 컨텐츠 캐싱 시간 변경

CloudFront 배포(distribution)의 설정에서 전체 컨텐츠에 대한 갱신 주기를 설정할 수 있습니다.
해당 배포의 Behaviors 탭으로 갑니다.
배포를 생성할 때 설정된 항목이 하나 있습니다. 체크박스를 선택하고 Edit을 클릭합니다.

그러면 설정 변경화면이 나오는데, 여기서 Object Caching항목을 Customize로 선택합니다.
Customize를 선택하면 아래 3개 칸(Minimum TTL, Maximum TTL, Default TTL)이 활성화됩니다.
(각각에 대한 자세한 설명 : http://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesObjectCaching)

Default TTL은 특정 객체에 HTTP Header를 지정하지 않은 오리진 객체에만 적용되는 값이고, Maximum TTL은 HTTP Header를 지정한 오리진 객체에만 적용되는 값입니다.
그래서 전체 컨텐츠에 대한 캐싱 시간을 변경하려면 Default TTL을 수정합니다. 초단위로 수정하시면 됩니다.
수정 완료하시면 배포의 상태가 In Progress가 되고 배포가 완료되면 Deployed로 변경됩니다.

4. S3에 저장된 특정 객체의 캐싱 시간 변경

S3의 특정 객체의 갱신주기만 따로 설정하려면 해당 객체에 metadata를 설정하면 됩니다.
S3에서 갱신주기를 설정할 객체를 선택합니다. 객체의 이름 부분을 선택하면 해당 객체에 대한 Overview가 나타나는데,
바로 옆에 Properties 탭을 선택합니다.

Properties 중에 Metadata를 클릭합니다.
그러면 Add Metadata 버튼이 있는데 여기를 클릭합니다.
Key 목록에서 Cache-Control 또는 Expires를 선택합니다.
Cache-Control로 선택하면 CloudFront 캐시에 머무르는 시간을 초단위(형식 : max-age=초)로 입력해주시면 되고,
Expires를 선택하면 캐시에 머무를 특정 날짜를 입력하시면 됩니다.(형식 : Sat, 27 Jun 2015 23:59:59 GMT)
(날짜 포맷 : https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)



지금까지 S3를 Origin으로 한 CloudFront의 배포 즉시갱신/갱신 주기 설정 방법을 정리해보았습니다.
4가지 방법을 다 해보니.. 캐싱 시간을 변경하는 방법은 조금 부정확한 감이 있습니다. 캐싱 주기 시간이 지나고 최신 파일을 읽어왔다가 새로고침하면 다시 예전 파일을 읽어오더라구요.. 아마 모든 엣지마다 다시 배포되는 시간이 달라서 그런가 싶습니다..
혹시 본문 내용중 틀린 부분을 댓글로 남겨주시면 감사히 바로 수정하도록 하겠습니다.
감사합니다.

참고링크

댓글 없음:

댓글 쓰기