Cloudflare API を使うと、複数サイトを一度に効率よく Cloudflare へ追加できます。
複数サイトの追加が役立つのは、次のような場合です。
- 複数ドメインが 1 つの正規ドメインに対応している(国別ドメイン(
.com.au、.co.ukなど)を Cloudflare で保護したい場合によくあります)。 - パートナー ↗、代理店、IT コンサルティングとして、顧客に代わって複数ドメインを管理している。
- 既存のサイト群を Cloudflare へ移行している。
API を使うと、複数サイトをすばやく効率よく追加できます。ネームサーバーの変更方法 や DNS レコードの追加 をすでに把握している場合は特に有効です。
このチュートリアルでは、ドメインを プライマリ DNS セットアップ(フル) で追加することを前提とします。
自動化で複数サイトを Cloudflare に追加するには、次が必要です。
-
既存の Cloudflare アカウント
-
curlを使えるコマンドライン -
次のいずれかの権限を持つ Cloudflare API トークン
- ゾーンレベルの
Administrator - ゾーンレベルの
Zone: EditとDNS: Edit - アカウントレベルの
Domain Administrator
- ゾーンレベルの
-
各ドメインについて、レジストラ(ドメインを購入した場所)で DNSSEC を無効にしていること
プロバイダー別の DNSSEC 手順
網羅的な一覧ではありませんが、次のリンクが参考になる場合があります。
- 追加するドメインの一覧を、1 行に 1 ドメイン(改行区切り)で作成し、
domains.txtなどのファイルに保存します。 - bash スクリプト
add-multiple-zones.shを作成し、次の内容を追加します。domains.txtを同じディレクトリに置くか、パスを合わせて更新します。
for domain in $(cat domains.txt); do
printf "Adding ${domain}:\n"
curl https://api.cloudflare.com/client/v4/zones \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"account": {
"id":"<ACCOUNT_ID>"
},
"name": "'"$domain"'",
"type": "full"
}'
printf "\n\n"
done- コマンドラインを開き、次を実行します。
bash add-multiple-zones.shドメインを追加したあと、そのドメインは Pending Nameserver Update 状態になります。
jq ↗ は、JSON 出力を解析して整形するコマンドラインツールです。
このチュートリアルの追加オプション手順を完了するには、このツールが必要です。
echo '{"foo":{"bar":"foo","testing":"hello"}}' | jq .詳細は jq の ドキュメント ↗ を参照してください。
Cloudflare は、ゾーンの DNS レコード投入を助ける クイックスキャン を提供しています。このスキャンは、よく使われるレコード名とタイプの定義済みリストに基づく最善努力の処理です。
この API 呼び出しにはドメイン ID が必要です。次の場所で確認できます。
上記の最初の方法で jq を使い、スクリプト add-multiple-zones.sh を変更してドメイン ID を取り出し、続けて DNS レコードのクイックスキャン API を呼び出します。
for domain in $(cat domains.txt); do
printf "Adding ${domain}:\n"
add_output=`curl https://api.cloudflare.com/client/v4/zones \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"account": {
"id":"<ACCOUNT_ID>"
},
"name": "'"$domain"'",
"type": "full"
}'`
echo $add_output | jq .
domain_id=`echo $add_output | jq -r .result.id`
printf "\n\n"
printf "DNS quick scanning ${domain}:\n"
scan_output=`curl --request POST https://api.cloudflare.com/client/v4/zones/$domain_id/dns_records/scan \
--header "X-Auth-Email: <EMAIL>" \
--header "X-Auth-Key: <API_KEY>"`
echo $scan_output | jq .
done各ドメインを Cloudflare 上で有効にするには、フルセットアップ または パーシャルセットアップ のいずれかで有効化する必要があります。次のスクリプトは、各ドメインに関連付けられたネームサーバーの一覧を出力します。
ゾーンのネームサーバーは、次の場所で確認できます。
- スクリプト
add-multiple-zones.shを変更し、Create Zoneの JSON レスポンスから CSV を出力します。
for domain in $(cat domains.txt); do
printf "Adding ${domain}:\n"
add_output=`curl https://api.cloudflare.com/client/v4/zones \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"account": {
"id": "<ACCOUNT_ID>"
},
"name": "'"$domain"'",
"type": "full"
}'`
# Create csv of nameservers
echo $add_output | jq -r '[.result.name,.result.id,.result.name_servers[]] | @csv' >> /tmp/domain_nameservers.csv
domain_id=`echo $add_output | jq -r .result.id`
printf "\n\n"
printf "DNS quick scanning ${domain}:\n"
scan_output=`curl --request POST https://api.cloudflare.com/client/v4/zones/$domain_id/dns_records/scan \
--header "X-Auth-Email: <EMAIL>" \
--header "X-Auth-Key: <API_KEY>"`
echo $scan_output | jq .
done
printf "name_servers are saved in /tmp/domain_nameservers"
cat /tmp/domain_nameservers.csv| ID | ZONE | NAME SERVERS |
|---|---|---|
| <ZONE_ID> | example.com |
arya.ns.cloudflare.com, tim.ns.cloudflare.com |
- NAME SERVERS 列の値を使い、各ドメインのレジストラで ネームサーバーを更新 します。
一度に追加できるドメイン数には上限があります。具体的には、10 分あたり最大 25 ドメインまで登録できます。
さらに、ドメインが 50 を超え、そのうち保留中のドメインが有効なドメインより多い場合は、追加がブロックされます。追加する前に、保留中のサイトが有効になるまで待つことを推奨します。
この処理でエラーが返った場合、ドメインが未登録(または登録直後)である、サブドメインである、またはその他の理由で無効である可能性があります。詳細は ドメインを追加できない を参照してください。