CloudFlareでAPIを使って個別や全部のファイルキャッシュを削除させる


はじめに

CloudFlare便利です。
とりあえずの設定を入れておくだけでそこそこ運用できるのですが、もうちょっと突っ込んだ運用ができないか、ということでキャッシュの個別削除を行ってみました。

  1. APIキーの取得
  2. 環境変数の設定
  3. zone idの取得
  4. 実際の削除

という流れになります。
新しいAPIをいじるときはだいたいそうですが、なかなかうまく行かなくて苦労しました。

ちなみにAPIは5分間に1200回のアクセスまでとなっています。お気を付けください。

APIキーの取得

まずはAPIキーを取得します。

ログイン後、アカウント設定>API Keyにあります。
https://www.cloudflare.com/a/account/my-account

この値をメモしておきます。

事前準備

メールアドレスとAPIキーでアクセスするので、変数に取っておきましょう。

$ export API=1234abcdxxxxxxxxxxxxxxxxxx
$ export MAIL=[email protected]

zone idを取得

APIアクセスではzone id (zone identifier)を使います。
アカウントとドメインに対してユニークなIDとなっています。

まずはそれを調べます。

$ export DOMAIN=example.com

curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=${DOMAIN}&status=active&page=1&per_page=20&order=status&direction=desc&match=all" \
-H "X-Auth-Email: ${MAIL}" \
-H "X-Auth-Key: ${API}" \
-H "Content-Type: application/json" 

戻り値にあるidを控えておきます。
jqを使ってidを抜き出す場合にはこうです。

curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=${DOMAIN}&status=active&page=1&per_page=20&order=status&direction=desc&match=all" \
-H "X-Auth-Email: ${MAIL}" \
-H "X-Auth-Key: ${API}" \
-H "Content-Type: application/json" | jq '.result[0].id'

アカウントにある全てのドメイン情報を取得するには次のようにします。

curl -X GET "https://api.cloudflare.com/client/v4/zones" \
    -H "X-Auth-Email: ${MAIL}" \
    -H "X-Auth-Key: ${API}" \
    -H "Content-Type: application/json"

こちらも同じように設定しておきます。

$ export ZONEID=123412342134214321423142134

キャッシュの削除

さていよいよキャッシュの削除です。

curl -X DELETE "https://api.cloudflare.com/client/v4/zones/${ZONEID}/purge_cache" \
     -H "Content-Type:application/json" \
     -H "X-Auth-Key: ${API}" \
     -H "X-Auth-Email: ${MAIL}" \
     --data '{"files":["http://example.com/"]}'

--dataでfilesとして渡す箇所に削除したいファイルのURLを入れてください。
トップページであれば上記のように / で終わらせます。index.html ではうまく消えません。

全部消す

全部を消すにはPOSTで送りつつ、リクエストボディに purge_everythingを記載します。

 curl -X POST "https://api.cloudflare.com/client/v4/zones/${ZONEID}/purge_cache" \
     -H "Content-Type:application/json" \
     -H "X-Auth-Key: ${API}" \
     -H "X-Auth-Email: ${MAIL}" \
     --data '{"purge_everything":true}';

https://api.cloudflare.com/#zone-purge-all-files

最後に

CloudFlare便利ですね!なんでもできるのでファンになりそうです。
もっと色々と使っていきたいです。

おまけ

APIアクセスのときには出力結果について、jqを使うと見易いです。
http://qiita.com/yousan/items/ac83ae06673c6745052b