INTEGRITY Документация

Создание виджетов и управление ими через Terraform

Управляйте виджетами Turnstile как кодом: Terraform даёт контроль версий и автоматическое развёртывание.

Предварительные требования

Перед началом работы вам понадобится:

Настройка

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