cdn
cloudflare

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

Screen Shot 2016-11-11 at 7.32.35.png

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

事前準備

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

$ export API=1234abcdxxxxxxxxxxxxxxxxxx
$ export MAIL=user@example.com

zone idを取得

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

まずはそれを調べます。

$ export DOMAIN=example.com

curl -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 -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"

https://api.cloudflare.com/#getting-started-resource-ids

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

$ 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 ではうまく消えません。

最後に

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

おまけ

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