← Cloudflare Turnstile / turnstile / get-started / widget-management
Создание виджетов и управление ими через Terraform
Управляйте виджетами Turnstile как кодом: Terraform даёт контроль версий и автоматическое развёртывание.
Предварительные требования
Перед началом работы вам понадобится:
- Terraform ↗ установлен
- Токен Cloudflare API с
Account:Turnstile:Edit permissions - (Необязательно)
cf-terraformingинструмент для импорта существующих виджетов
Настройка
1. Настройте провайдера
Создайте main.tf файл.
terraform {
required_providers {
cloudflare = {
source = "cloudflare/cloudflare"
version = "~> 4.0"
}
}
}
provider "cloudflare" {
api_token = var.cloudflare_api_token
}
variable "cloudflare_api_token" {
description = "Cloudflare API Token"
type = string
sensitive = true
}
variable "account_id" {
description = "Cloudflare Account ID"
type = string
}2. Определите виджеты
resource "cloudflare_turnstile_widget" "login_form" {
account_id = var.account_id
name = "Login Form Widget"
domains = ["example.com", "www.example.com"]
mode = "managed"
region = "world"
}
resource "cloudflare_turnstile_widget" "api_protection" {
account_id = var.account_id
name = "API Protection"
domains = ["api.example.com"]
mode = "invisible"
region = "world"
}
# Output the sitekeys for use in your application
output "login_sitekey" {
value = cloudflare_turnstile_widget.login_form.sitekey
}
output "api_sitekey" {
value = cloudflare_turnstile_widget.api_protection.sitekey
}3. Переменные окружения
Создайте .env или задайте переменные окружения.
export TF_VAR_cloudflare_api_token="your-api-token"
export TF_VAR_account_id="your-account-id"Команды Terraform
Инициализация и планирование
Инициализация Terraform
terraform initСмена плана
terraform planПрименить конфигурацию
terraform applyУправление изменениями
Обновление конфигурации виджета
terraform planПрименить изменения
terraform applyУдаление виджетов
terraform destroyРасширенная конфигурация Terraform
Несколько сред
locals {
environments = {
dev = {
domains = ["dev.example.com"]
mode = "managed"
}
staging = {
domains = ["staging.example.com"]
mode = "non_interactive"
}
prod = {
domains = ["example.com", "www.example.com"]
mode = "invisible"
}
}
}
resource "cloudflare_turnstile_widget" "app_widget" {
for_each = local.environments
account_id = var.account_id
name = "App Widget - ${each.key}"
domains = each.value.domains
mode = each.value.mode
region = "world"
}Виджет с возможностями Enterprise
resource "cloudflare_turnstile_widget" "enterprise_widget" {
account_id = var.account_id
name = "Enterprise Form"
domains = ["enterprise.example.com"]
mode = "managed"
region = "world"
offlabel = true # Remove Cloudflare branding
bot_fight_mode = true # Enable bot fight mode
}Импорт существующих виджетов
Используйте cf-terraforming, чтобы импортировать существующие виджеты.
Установка cf-terraforming
go install github.com/cloudflare/cf-terraforming/cmd/cf-terraforming@latestСоздание конфигурации Terraform на основе существующих виджетов
cf-terraforming generate \
--resource-type cloudflare_turnstile_widget \
--account $ACCOUNT_IDИмпорт существующего виджета
terraform import cloudflare_turnstile_widget.existing_widget \
$ACCOUNT_ID/$WIDGET_SITEKEY