【Cloudflare】DNSレコードを一括削除するPHPスクリプト

Cloudflare
この記事は約4分で読めます。

CloudflareのDNSレコードは既存のDNSレコードをスキャンして自動的に設定してくれますがあまりよくありません。

お名前ドットコムでドメインを取得してネームサーバーを変更せずにドメイン追加をしてしまうと、不要なDNSレコードが大量に登録させることがあります。

この記事ではCloudflareのAPIを使用してDNSレコードを一括削除する方法を解説していきます。

【注意】
この記事はCloudflareのアカウントをすでに登録している、PHPを実行できる環境がある方を前提としています。

事前準備

まず以下の情報をCloudflareから取ってきます。

  1. Cloudflareにログインし、右上の人マークから「マイプロフィール」を選択
  2. 左のメニューから「APIトークン」を選択
  3. 「APIトークンを作成する」を選択
  4. APIトークンテンプレートから「ゾーンDNSを編集する」を選択
  5. ・アクセス許可:ゾーン、DNS、編集
    ・ゾーンリソース:含む、特定のゾーン or すべてのゾーン、特定のドメイン(特定のゾーンを選択した人のみ)
  6. 下にスクロールし「概要に進む」を選択
  7. トークンを作成するを選択
  8. 出てきたAPIトークンをコピー

1. Cloudflareにログインし削除したいDNSレコードがあるドメインを選択

2. 下にスクロールし右側のメニューからZone IDを探しコピーする

コード

<?php

// APIトークン
$apiToken = 'token';

// Zone ID
$zoneId = 'zone id';

// Cloudflare APIエンドポイント
$apiEndpoint = 'https://api.cloudflare.com/client/v4/zones/' . $zoneId . '/dns_records';

// cURLセッションの初期化
$ch = curl_init();

// cURLオプションの設定
curl_setopt($ch, CURLOPT_URL, $apiEndpoint);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer ' . $apiToken,
    'Content-Type: application/json'
]);

// DNSレコードのリストを取得
$response = curl_exec($ch);

if (curl_errno($ch)) {
    echo 'cURLエラー: ' . curl_error($ch);
    curl_close($ch);
    exit;
}

// レスポンスのデコード
$data = json_decode($response, true);

// エラーチェック
if (!$data['success']) {
    echo 'エラー: ' . json_encode($data['errors']);
    curl_close($ch);
    exit;
}

// DNSレコードを削除
foreach ($data['result'] as $record) {
    $deleteEndpoint = $apiEndpoint . '/' . $record['id'];
    curl_setopt($ch, CURLOPT_URL, $deleteEndpoint);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');

    $deleteResponse = curl_exec($ch);

    if (curl_errno($ch)) {
        echo 'cURLエラー: ' . curl_error($ch);
        continue;
    }

    $deleteData = json_decode($deleteResponse, true);

    if (!$deleteData['success']) {
        echo '削除エラー: ' . json_encode($deleteData['errors']);
    } else {
        echo '削除成功: ' . $record['name'] . ' (' . $record['type'] . ')' . PHP_EOL;
    }
}

// cURLセッションの終了
curl_close($ch);

?>
PHP

APIトークン(token)とZone ID(zone id)をコピーしてきたもの(APIトークンとZone ID)を貼り付けます。

実行方法

php ファイルの名前.php

コメント

タイトルとURLをコピーしました