Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
9
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@yousan

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 -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'

Screen_Shot_2018-09-24_at_16_32_00.jpg

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

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}';

Screen_Shot_2018-09-24_at_16_38_36.jpg

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

最後に

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

おまけ

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
9
Help us understand the problem. What are the problem?