Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Terraform でウィジェットを作成・管理する

最終更新 Markdown で表示Agent セットアップ

Terraform で Turnstile ウィジェットをコードとして管理し、バージョン管理と自動デプロイに使えます。

前提条件

開始する前に、次を用意してください。

  • Terraform をインストール済みであること
  • Account:Turnstile:Edit 権限を持つ Cloudflare API トークン
  • (任意)既存ウィジェットをインポートするための 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 を初期化するshell
terraform init
変更を計画するshell
terraform plan
設定を適用するshell
terraform apply

変更を管理する

ウィジェット設定を更新するshell
terraform plan
変更を適用するshell
terraform apply
ウィジェットを破棄するshell
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 をインストールするshell
go install github.com/cloudflare/cf-terraforming/cmd/cf-terraforming@latest
既存ウィジェットから Terraform 設定を生成するshell
cf-terraforming generate \
  --resource-type cloudflare_turnstile_widget \
  --account $ACCOUNT_ID
既存ウィジェットをインポートするshell
terraform import cloudflare_turnstile_widget.existing_widget \
  $ACCOUNT_ID/$WIDGET_SITEKEY

役に立ちましたか?