Amazon CloudFrontのキャッシュファイルを削除する
CloudFrontなんかをなんか使っています
Amazon CloudFrontはいわすと知れたコンテンツ配信サービス。Contents Delivery Networkってやつ。オリジナルファイルをAmazon S3などのストレージサーバー(オリジンサーバー)に格納すると、そこからデータを持ってきて、最良のパフォーマンスで配信できるようにしてくれる。まあなんか、いくつかのエッジロケーションを持ってて、ユーザーが最もストレスなくデータのやり取りができるところに自動的にルーティングしてくれたり、いい感じにやってくれる。リクエスト数がハンパないコンテンツ運用に便利!ってことらしい。転送量に応じて課金される。
詳しくはこちら。
Amazon CloudFront
私が運用しているサイトはAmazon S3とCloudFrontを組み合わせて使っていて、S3にオリジナルファイルをのっけると、CloudFrontが勝手にファイルを持ってってくれて、配信readyな感じになる。
キャッシュは24時間保持される
ところが、このオリジンサーバーを見てファイルをキャッシュする期間(失効期間というらしい)がデフォルトでは24時間に設定されている。
参照:
Q: Amazon CloudFront はどのぐらいの期間ファイルをエッジロケーションに保管しますか?
もちろんこれはファイルをアップするときに「キャッシュコンロールヘッダー」なるものを設定して「失効期間」を決めてあげると、任意にコントロールできるらしい(やったことないけど)。たとえば、「失効期間1時間ね」ってしておくと、1時間経ったら失効しちゃうので、おもむろにオリジンサーバーを見に行って、バージョン変わってたらファイルを再びとってくる。
しかしながら、デフォルトの失効期間が24時間なために、あまり予備知識なく使っていると「あんれー?ファイル更新したのに、いつまで経っても反映されないの、なんで?」ってことになる。設定をいじってない限り「はい、前のバージョンをアップしてから、ほぼ1日後です」ってことになるんだけど、それでは困る!というケースも多々ある。特に更新が頻繁に行われるサイトの場合「今すぐに!」ってこともあるかも(そういう性質のサイトがこのサービスを利用するのは正しいか否かという問いは、おいといて)。
今すぐに!キャッシュを削除したい
でこの「失効期間」前に、CloudFrontのキャッシュを削除してしまって、すぐオリジンサーバーを見に行ってほしい場合は、Cyberduckというあひるさんにお願いする。高機能FTPアプリ。Mac OS X用です。
このあひるさんで「Object Invalidation」をするといいらいしいことが書いてある。
http://trac.cyberduck.ch/wiki/help/en/howto/cloudfront#ObjectInvalidation
Invalidation is one way to remove a distribution object from an edge server cache before the expiration setting on the object's header. Invalidation clears the object from the edge server cache, and a subsequent request for the object will cause CloudFront to return to the origin to fetch the latest version of the object.
Use the Invalidate option File → Info → Distribution (CDN) to invalidate files from edge locations.
このあひるさんでS3に接続して、キャッシュファイルを削除したいファイルを選び、command+Iで「情報を見る」を実行。上部のタブで「ディストリビューション(CDN)」を選択。転送方法を「Website Configuration(HTTP)CDN」にした上で、右下の「Invalidation」ボタンを押す。これでしばらくするとinvalidations in process→invalidations completedになる。Invalidationしたら接続切って待ってた。これでdistribution cacheが削除されて、最新バージョンをすぐに見に行ってもらえるようになる。
私はとりあえずこれでできたっぽいです。あともっと単純に素直にやるのであれば、バージョンが変わったのなら「ファイル名」を変えてしまうことです。