최근 진행되고 있는 프로젝트에서 AWS S3 와 CloudFront를 사용하여 동영상 서비스를 하고 있는데 CBT중이라 버그 리포팅이 자주 오고 있다.

분명히 테스트때는 정상 작동을 했는데 왜 항상 실제 사용하면 버그가 튀어나올까...?!


Video Thumbnail 파일을 새로 업로드 하였는데 이미지가 바뀌지 않는다는 내용의 문제가 접수되었다. 

Thumbnail 수정 로직은 기존에 사용하던 파일 이름에 확장자만 새로 올린 사진 파일을 따르게 되어있었다. 해서, 사진이 업로드된 S3에는 새로 올려진 파일이 존재하는데, CloudFront에 요청을 하면 캐시되어있는 예전 사진이 보여지는것이었다. 



파일이 새로 올라왔는데 CloudFront는 왜 새로운 파일을 캐시하지 못했을까?


문제 해결을 위해 문서를 찾아보니 다음과 같은 내용을 확인하였다.

CloudFront 배포에서 기존 객체를 업데이트하고 동일한 객체 이름을 사용할 수는 있지만 권장되지는 않습니다. CloudFront에서는 오리진에 새 객체나 업데이트된 객체를 배치할 때가 아닌 객체가 요청된 경우에만 엣지 로케이션에 객체를 배포합니다. 이름이 같은 최신 버전으로 오리진에서 기존 객체를 업데이트한 경우, 다음 두 가지 상황이 모두 발생하기 전까지는 엣지 로케이션에서 오리진으로부터 새 버전을 가져오지 않습니다.

문제에 대한 이유를 찾았으니, 문제 해결을 해보도록 했다.


CloudFront 엣지 캐시에서 객체가 만료되기 전에 이것을 제거하는것, 즉 CloudFront의 객체 무효화를 사용하면 된다. 


1. AWS Console에 접속하여 CloudFront 페이지로 이동한다.


2. 문제가 발생한 Distribution을 선택한다.


3. Invalidations탭을 선택한다.


4. Create Invalidation을 선택한다.



5. Object Paths에 Invalidate할 파일 이름을 적어준다.


이때 Origin Path를 제외하고 난 나머지를 적어주면 된다.

예를 들어, 

Invalidate할 파일이 S3 bucket에 /thumbnail/1234.jpg이고,

CloudFront의 Origin Path가 /thumbnail로 잡혀있다면, 

Create Invalidation의 Object Path에 1234.jpg를 적어주면 된다.



6. Invalidate버튼을 누르고 Status가 Completed가 되길 기다리면 된다. (생각보다 오래 걸린다...)


참고로 Invalidation은 무료 갯수가 제한되어있어서 그 이상 Invalidate을 하게 되면 과금되니 주의해야 한다.


과금 정보는 다음 페이지에서 확인 가능하다.

http://aws.amazon.com/cloudfront/pricing/






참고자료


http://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/ReplacingObjectsSameName.html





Posted by jjangAh
,