Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

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"

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

全部消す

全部を消すには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

yousan
自動化が好きです。CI/CDのCDが好きです。
https://floatingweed.com
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした