13
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-11-10

はじめに

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

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?