コンテンツへスキップ
ホーム » Cloudflare の DNS(サブドメ) をAPI経由で全消しする

Cloudflare の DNS(サブドメ) をAPI経由で全消しする

何だ、あの使い勝手の悪いGUI

自分用メモみたいなもんです。
最近技術的なもん書いてないなーと思いまして。

Cloudflare でキャッシュする際、NS を Cloudflare にする必要がありますが、何かドメイン取得のタイミングか何かで、元の登録したDNS情報を引っ張ってくる際に、謎な挙動をする事があります。

登録してないはずのDNS情報がやたらついてきたりするんです。自分の時は最大300ものサブドメインが登録されまして。で、これをGUIでちまちま消そうとすると、本当に厄介です。1項目をクリック → 画面を開いて削除ボタン -> 削除、という不愉快極まりない方法を取る必要があります。

チェック入れて削除ボタン作れよ!!と思いましたが、まぁ仕方がないのでAPIのリファレンス見て対応する事にしました。

APIトークンの取得

まず、[マイプロフィール]から[APIトークン]を選択してください。

ここで、[トークンを作成する]をクリックします。

[ゾーンDNSを編集する] の [テンプレートを使用する] をクリック。

勝手に色々と作ってくれるので、[ゾーンリリース] の [特定のゾーン] から操作対象のドメインを選択する。そうしたら、[概要に進む] をクリック。

確認画面が出るので、対象のドメインに間違いがなければ [トークンを作成する] をクリック。

APIトークンが作成されました。

動作確認

画面の下にあるトークンのテストを curl がインストールされたサーバで実行してみましょう。

curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \
-H "Authorization: Bearer ※APIトークン" \
-H "Content-Type:application/json"

success が表示されれば、APIトークンが設定されたと判ります。
上記の実行結果は、6/25 – 6/30 で期限が切れるように設定しています。

さて、これでDNSの操作が可能になったので、APIを叩いて消します。が、めんどくさいので全てのサブドメインを消すシェルスクリプトを作りました。

全てのサブドメインを消す

まず、ドメインのゾーンIDを調べる必要があります。ドメインのダッシュボードから確認ができます。

これです。このゾーンIDをメモりましょう。
そうしたらサーバのコンソールで適当なファイル名で、シェルスクリプトを作ります。中身はこんな感じ。
(cloudflare API v4)

#!/bin/bash

for dns_record in $(curl -X GET "https://api.cloudflare.com/client/v4/zones/※ゾーンID※/dns_records?page=1&per_page=300" -H "Authorization: Bearer ※APIトークン※" -H "Content-Type: application/json" | jq -r ".result [] .id")
do
	curl -X DELETE "https://api.cloudflare.com/client/v4/zones/※ゾーンID※/dns_records/$dns_record" -H "Content-Type: application/json" -H "Authorization: Bearer ※APIトークン※"
done

jqコマンドを使っているので、もし無かったら以下のコマンドを実行。(確か要epel)

(centos 7)
# yum -y install jq

(centos 8)
# dnf -y install jq

あとは作成した、シェルスクリプトに実行権限つけてコマンド叩くなり、bash ./*****.sh で実行するなりご自由にどうぞ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください