AWS

[AWS] Lambda로 CloudFront 무효화 기록 - S3 트리거, 와일드카드

폭풍저그김탁구 2022. 8. 4. 21:29

CF를 본격적으로 사용하기 시작하면서 문제가 생겼다.

바로 캐싱된 이미지가 24시간 동안 유지된다는 것이었다.

 

내가 개발하는 어플은, 유저가 이미지를 수정할 수 있다. 그래서 새로 이미지를 수정할 때엔 똑같은 key로 버킷에 업로드하며 overwrite하였다.

(S3는 기본적은 동일한 key에 대해 overwrite 한다.)

하지만, 이렇게 하면 S3에서 원본 이미지는 바뀌었지만 CF의 캐시 이미지는 그대로 있다는 것이다. 

 

이런 문제를 해결하기 위해 AWS가 방법 2가지를 제공해주고 있다.

 

1.key 자체에 버전을 명시해 관리하기

ex) image_20220804 등 key에 시간/uid 등을 붙여 관리

2. CF 무효화 기능 사용하기

 

AWS에서도 1번을 추천하고 있고, 나도 관리 면에서는 1번이 좋은 것 같다. 근데 이미 다른 모든 부분은 동일한 key로 돌아가게끔 수정을 해놔서... 그냥 2번으로 가게 됐다.

가장 문제는 무효화에 비용이 든다는 것이다. 만약에 이미지 수정이 많은 경우라면 1번으로 가는 게 좋을 듯 하다.

 

그래서...

 

https://charming-kyu.tistory.com/8

 

AWS Lambda를 사용한 CloudFront 무효화 자동화 설정하기

CloudFront Cache Amazon CloudFront를 사용하면 사용자의 요청을 Edge Location에서 캐시 값을 검사하여 24시간 동안에는 사용자에게 다시 파일을 제공하지 않고 캐시 된 값을 빠르게 제공..

charming-kyu.tistory.com

 

이 블로그를 참고해 수정을 하려고 했는데... 여기서 무효화 경로가 문제였다.

나는 이미지 리사징을 실시간으로 해서 url경로에 이미지 사이즈를 넣어줬는데 그러니 그 이미지 사이즈마다 무효화를 해줘야 한다는 것이다. 그러니까 이미지 사이즈마다 다 무효화 경로로 넣어줘야 한다는 것...

 

이대로 실패인 줄 알았는데 와일드 카드(*)로 해결할 수 있었다.

만약 url이 https://****.cloudfront.net/key.png?w=300&f=webp&q=90 라면 무효화 경로를/key.png* 로 하면 된다.