#cloudflare#wrangler#api#cli#automatisation#devops#infrastructure#iac#dns#workers#pages#terraform#afrique#cote-ivoire

Cloudflare API & CLI : automatiser DNS, Pages, Workers et Tunnels avec un token (2026)

Un token Cloudflare bien configuré ouvre toutes les portes : créer/modifier des enregistrements DNS, déployer un Worker, provisionner un tunnel, lancer un site Pages, tout cela en quelques lignes de bash. Le guide 2026 du nouveau Wrangler unifié, des scripts curl prêts à l'emploi et de Terraform pour aller plus loin.

En avril 2026, Cloudflare a publié une refonte majeure de son CLI Wrangler, désormais conçu comme le point d'entrée unique pour gérer l'ensemble de ses services. Là où il fallait jongler entre dashboard web, appels curl à l'API REST et cloudflared pour les tunnels, on tend désormais vers une seule commande qui couvre DNS, Workers, Pages, R2, KV, D1, Tunnels et plus.

Cette évolution n'est pas un détail : elle reflète une tendance de fond — infrastructure as code first. Les équipes qui industrialisent leur stack ne veulent plus cliquer dans un dashboard pour ajouter un enregistrement DNS ou rollback un déploiement. Elles veulent un script versionné dans Git, exécuté en CI, auditable, reproductible.

Et l'arrivée des agents IA dans le quotidien des devs (Claude Code, Cursor, Aider...) accélère encore cette logique : les agents adorent les CLI, parce qu'un CLI bien fait donne en une commande ce qu'une API REST exige en plusieurs requêtes documentées. Cloudflare a d'ailleurs annoncé en parallèle son Code Mode MCP server, conçu spécifiquement pour permettre aux agents d'interagir avec ses 2 500+ endpoints API en consommant un minimum de tokens de contexte.

Dans ce guide, vous allez voir comment créer un token API sécurisé, comment utiliser le nouveau Wrangler pour les opérations courantes, comment scripter en bash pur avec curl quand c'est plus simple, et comment passer à Terraform pour les infrastructures plus complexes. Tout cela avec des exemples concrets et copiables.

Pourquoi automatiser Cloudflare en 2026

Quelques scénarios qui changent la donne quand on passe au CLI :

Provisionner un nouveau domaine en 30 secondes au lieu de 5 minutes de clics : ajout du site, configuration des nameservers, création des enregistrements @, www, api, activation du SSL, mise en place de règles WAF de base. Un script bash de 30 lignes, et c'est fait — identique à chaque fois.

Déployer un site statique en une commande depuis votre repo Git : wrangler pages deploy ./dist et le site est en ligne sur les 330+ datacenters Cloudflare, avec un certificat SSL et un CDN global, gratuitement.

Synchroniser des enregistrements DNS depuis un fichier YAML versionné dans Git. Vous savez exactement qui a changé quoi et quand. Plus de "qui a supprimé le MX record la nuit dernière ?".

Gérer des dizaines de Cloudflare Tunnels depuis un seul script central, sans devoir se connecter au dashboard pour chaque VPS.

Intégrer Cloudflare dans une pipeline CI/CD : à chaque push sur main, le Worker se redéploie, les caches sont invalidés, un enregistrement DNS de preview est créé pour la PR.

Étape 1 : Créer un token API Cloudflare sécurisé

C'est l'étape qu'il ne faut jamais bâcler. La règle d'or : n'utilisez jamais votre Global API Key. C'est l'équivalent d'un mot de passe root sur toute votre infrastructure — si elle fuit, l'attaquant peut tout faire.

À la place, créez un API token scopé au minimum nécessaire.

Création depuis le dashboard

Allez sur dash.cloudflare.com → My Profile → API Tokens → Create Token. Cloudflare propose des templates préconfigurés (Edit zone DNS, Read All Resources...), pratiques pour démarrer.

Pour un token de gestion DNS sur une zone précise :

  • Permissions : Zone.DNSEdit
  • Zone Resources : IncludeSpecific zonevotre-domaine.com
  • Client IP Filtering (optionnel mais recommandé) : Is in → IP de votre serveur CI ou de votre machine de dev
  • TTL : 90 jours par exemple, pour forcer une rotation périodique

Validez. Cloudflare affiche le token une seule fois — copiez-le immédiatement dans votre gestionnaire de secrets (1Password, Bitwarden, GitHub Secrets, Vault...).

Création programmatique via API

Il est même possible de créer un token depuis l'API (à condition d'avoir un token "Account.API Tokens → Edit" préalable). Utile pour automatiser la création de tokens par environnement (dev/staging/prod) dans un script Terraform.

Vérifier que le token fonctionne

export CF_API_TOKEN="votre-token-ici"

curl -s -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \
  -H "Authorization: Bearer $CF_API_TOKEN" \
  -H "Content-Type: application/json" | jq

Vous devez voir "status": "active". Si vous avez créé un token scopé à un compte (les nouveaux tokens cfat_ par exemple), utilisez plutôt l'endpoint account-scoped :

curl -s "https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/tokens/verify" \
  -H "Authorization: Bearer $CF_API_TOKEN" | jq

Étape 2 : Installer et configurer le nouveau Wrangler unifié

Wrangler s'installe via npm (Node.js 18+ requis) :

npm install -g wrangler@latest
wrangler --version

Pour l'authentification, deux options : la commande interactive wrangler login (ouvre un navigateur pour OAuth) ou — préférable en CI — l'export d'un token via variable d'environnement :

export CLOUDFLARE_API_TOKEN="votre-token-ici"
export CLOUDFLARE_ACCOUNT_ID="votre-account-id"

Toutes les commandes Wrangler liront automatiquement ces variables. C'est ce qu'on utilise dans une pipeline GitHub Actions, GitLab CI ou Drone.

Étape 3 : Automatiser le DNS (curl + Wrangler)

Le DNS reste l'opération la plus fréquente, surtout quand on gère plusieurs domaines. Voici les patterns à connaître.

Lister les zones disponibles

curl -s "https://api.cloudflare.com/client/v4/zones" \
  -H "Authorization: Bearer $CF_API_TOKEN" | jq '.result[] | {id, name}'

Créer un enregistrement A

ZONE_ID="votre-zone-id"

curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records" \
  -H "Authorization: Bearer $CF_API_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{
    "type": "A",
    "name": "app",
    "content": "192.0.2.10",
    "ttl": 300,
    "proxied": true,
    "comment": "App principale, derriere CF proxy"
  }' | jq

Mettre à jour un enregistrement existant

RECORD_ID=$(curl -s "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=app.votre-domaine.com" \
  -H "Authorization: Bearer $CF_API_TOKEN" | jq -r '.result[0].id')

curl -s -X PATCH "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
  -H "Authorization: Bearer $CF_API_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"content": "192.0.2.11"}'

Supprimer un enregistrement

curl -s -X DELETE "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
  -H "Authorization: Bearer $CF_API_TOKEN"

Lister tous les enregistrements d'une zone (pour audit)

curl -s "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?per_page=100" \
  -H "Authorization: Bearer $CF_API_TOKEN" \
  | jq '.result[] | {type, name, content, proxied}'

Étape 4 : Déployer un site statique avec Wrangler Pages

Cloudflare Pages est l'équivalent gratuit (et globalement plus rapide) de Netlify ou Vercel, hébergé sur le réseau Cloudflare.

Premier déploiement

npm run build
wrangler pages deploy ./dist --project-name=mon-blog

À la première exécution, Wrangler vous demande si vous voulez créer le projet. Acceptez, choisissez la branche de production. Le site est en ligne sur https://mon-blog.pages.dev en moins d'une minute, distribué sur tous les datacenters Cloudflare.

Custom domain

wrangler pages domain add mon-blog mon-domaine.com

Cloudflare ajoute automatiquement le DNS et provisionne le certificat TLS.

Déploiements de preview pour chaque branche Git

Liez le projet à un repo GitHub dans le dashboard une fois, et chaque push sur une branche autre que main génère une URL de preview unique — idéal pour faire valider une feature à un client avant merge.

Étape 5 : Workers — déploiement programmatique et CI/CD

Les Cloudflare Workers exécutent du JavaScript ou WebAssembly sur le réseau edge, à quelques millisecondes du visiteur. Cas d'usage typiques : API serverless, réécriture de requêtes, A/B testing au niveau CDN, sécurisation d'URL signées, edge SEO.

Initialiser un projet :

npm create cloudflare@latest mon-worker
cd mon-worker

Développer en local :

wrangler dev

Déployer en production :

wrangler deploy

Pour intégrer dans GitHub Actions, ajoutez ce job :

name: Deploy Worker
on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: 20 }
      - run: npm install
      - run: npx wrangler deploy
        env:
          CLOUDFLARE_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
          CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}

À chaque push sur main, le Worker est redéployé sur 330+ datacenters dans le monde, en quelques secondes.

Étape 6 : Gérer ses Cloudflare Tunnels en CLI

Si vous suivez notre guide complet Cloudflare Tunnel, vous savez créer un tunnel via le dashboard. Voici l'équivalent CLI pour scripter la création de tunnels sur plusieurs VPS d'un coup.

Créer un tunnel

cloudflared tunnel create vps-prod-paris

Lister les tunnels existants

cloudflared tunnel list

Router un hostname vers le tunnel

cloudflared tunnel route dns vps-prod-paris app.votre-domaine.com

Lancer le tunnel en mode rapide (sans config.yml)

cloudflared tunnel run --url http://localhost:8080 vps-prod-paris

Supprimer un tunnel

cloudflared tunnel delete vps-prod-paris

L'ensemble de ces commandes peut être intégré dans un playbook Ansible ou un script bash qui déploie un VPS de zéro : provisionnement Linode → installation cloudflared via apt → création du tunnel → route DNS → démarrage du service. En 2 minutes, le VPS est en ligne, derrière Cloudflare, sans un seul port ouvert.

Cas d'usage concret : provisionner un nouveau site web en 30 secondes

Voici un script bash complet qui ajoute un site à Cloudflare, crée les enregistrements DNS essentiels, et active les paramètres SSL recommandés. À adapter à vos besoins.

#!/usr/bin/env bash
set -euo pipefail

DOMAIN="$1"
ORIGIN_IP="$2"
ACCOUNT_ID="$CF_ACCOUNT_ID"
TOKEN="$CF_API_TOKEN"
API="https://api.cloudflare.com/client/v4"

echo "Ajout du domaine $DOMAIN au compte..."
ZONE_ID=$(curl -s -X POST "$API/zones" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  --data "{\"name\":\"$DOMAIN\",\"account\":{\"id\":\"$ACCOUNT_ID\"},\"type\":\"full\"}" \
  | jq -r '.result.id')

echo "Zone créée : $ZONE_ID"

echo "Création des enregistrements DNS A pour @ et www..."
for HOST in "@" "www"; do
  curl -s -X POST "$API/zones/$ZONE_ID/dns_records" \
    -H "Authorization: Bearer $TOKEN" \
    -H "Content-Type: application/json" \
    --data "{\"type\":\"A\",\"name\":\"$HOST\",\"content\":\"$ORIGIN_IP\",\"ttl\":300,\"proxied\":true}" \
    | jq -r '.result.name'
done

echo "Activation Always Use HTTPS et SSL Full..."
curl -s -X PATCH "$API/zones/$ZONE_ID/settings/always_use_https" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  --data '{"value":"on"}' > /dev/null

curl -s -X PATCH "$API/zones/$ZONE_ID/settings/ssl" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  --data '{"value":"full"}' > /dev/null

echo "Site $DOMAIN provisionné. Configurez vos nameservers chez le registrar :"
curl -s "$API/zones/$ZONE_ID" -H "Authorization: Bearer $TOKEN" \
  | jq -r '.result.name_servers[]'

Usage : ./provision.sh mon-nouveau-site.com 192.0.2.10. Vous récupérez la liste des nameservers à configurer chez OVH, Namecheap ou GoDaddy. Une fois la propagation faite (souvent moins d'une heure), le site est protégé par Cloudflare avec SSL automatique.

Aller plus loin : Terraform pour les infrastructures complexes

Pour 1 à 5 domaines, du bash + curl suffit largement. Au-delà, Terraform avec le Cloudflare provider devient un investissement rentable : état déclaratif versionné, planification des changements avec terraform plan avant apply, rollback simple, gestion multi-environnements (dev/staging/prod).

Exemple minimal :

terraform {
  required_providers {
    cloudflare = {
      source  = "cloudflare/cloudflare"
      version = "~> 4.0"
    }
  }
}

provider "cloudflare" {
  api_token = var.cloudflare_api_token
}

resource "cloudflare_zone" "main" {
  account_id = var.account_id
  zone       = "mon-domaine.com"
  plan       = "free"
}

resource "cloudflare_record" "app" {
  zone_id = cloudflare_zone.main.id
  name    = "app"
  value   = "192.0.2.10"
  type    = "A"
  proxied = true
  ttl     = 1
}

terraform apply crée la zone et l'enregistrement. Changez la valeur de value et relancez : Terraform applique le diff. Combiné avec Atlantis ou un workflow GitOps, c'est l'industrialisation complète de votre infrastructure Cloudflare.

La nouveauté 2026 : Code Mode MCP pour les agents IA

Cloudflare a mis en service un MCP server (Model Context Protocol) powered by Code Mode qui expose ses 2 500+ endpoints API aux agents IA (Claude, ChatGPT...) avec une consommation de tokens drastiquement réduite. Plutôt que de demander à l'agent de "comprendre" chaque endpoint via une longue documentation chargée en contexte, Code Mode laisse l'agent écrire du code qui appelle l'API, exécute ce code en sandbox, et observe le résultat. Le contexte reste compact, l'agent reste capable.

Pratiquement, cela signifie qu'en 2026 vous pouvez demander à Claude Code : "ajoute un sous-domaine staging.mon-site.com pointant vers le VPS X, avec SSL Full" — et l'agent va appeler les bons endpoints Cloudflare via le MCP server, sans que vous ayez écrit la moindre ligne. C'est la suite logique du paradigme infrastructure-as-code : infrastructure-as-conversation.

Pour activer le MCP Cloudflare avec Claude Code : claude mcp add cloudflare et fournissez votre token. La doc officielle de Cloudflare décrit l'installation et les permissions recommandées.

Conclusion : un token, et toute votre infra à portée de bash

Le passage du dashboard cliquable à l'automatisation CLI est l'une des bascules les plus rentables qu'un dev ou un sysadmin puisse faire en 2026. Le ticket d'entrée est faible (un token bien scopé, npm install wrangler), et le ROI est immédiat dès que vous gérez plus d'un domaine ou que vous voulez intégrer Cloudflare à votre CI/CD.

Pour la sécurisation des VPS en parallèle, le guide Cloudflare Tunnel pour sécuriser un VPS couvre la partie "fermer tous les ports" — combinée avec ce que vous venez d'apprendre, vous avez l'arsenal complet pour une infrastructure cloud moderne, automatisée et invisible aux scanners.

Et si vous cherchez sur quel VPS déployer tout cela, le guide complet des prix Linode Akamai 2026 reste la référence pour démarrer à 5 $/mois avec une qualité d'hébergement professionnelle.