Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Comprehensive Cloudflare platform skill covering Workers, D1, R2, KV, AI, Durable Objects, and security.
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
references/terraform/README.md
1# Cloudflare Terraform Provider23**Expert guidance for Cloudflare Terraform Provider - infrastructure as code for Cloudflare resources.**45## Core Principles67- **Provider-first**: Use Terraform provider for ALL infrastructure - never mix with wrangler.jsonc for the same resources8- **State management**: Always use remote state (S3, Terraform Cloud, etc.) for team environments9- **Modular architecture**: Create reusable modules for common patterns (zones, workers, pages)10- **Version pinning**: Always pin provider version with `~>` for predictable upgrades11- **Secret management**: Use variables + environment vars for sensitive data - never hardcode API tokens1213## Provider Version1415| Version | Status | Notes |16|---------|--------|-------|17| 5.x | Current | Auto-generated from OpenAPI, breaking changes from v4 |18| 4.x | Legacy | Manual maintenance, deprecated |1920**Critical:** v5 renamed many resources (`cloudflare_record` → `cloudflare_dns_record`, `cloudflare_worker_*` → `cloudflare_workers_*`). See [gotchas.md](./gotchas.md#v5-breaking-changes) for migration details.2122## Provider Setup2324### Basic Configuration2526```hcl27terraform {28required_version = ">= 1.0"2930required_providers {31cloudflare = {32source = "cloudflare/cloudflare"33version = "~> 5.15.0"34}35}36}3738provider "cloudflare" {39api_token = var.cloudflare_api_token # or CLOUDFLARE_API_TOKEN env var40}41```4243### Authentication Methods (priority order)44451. **API Token** (RECOMMENDED): `api_token` or `CLOUDFLARE_API_TOKEN`46- Create: Dashboard → My Profile → API Tokens47- Scope to specific accounts/zones for security48492. **Global API Key** (LEGACY): `api_key` + `api_email` or `CLOUDFLARE_API_KEY` + `CLOUDFLARE_EMAIL`50- Less secure, use tokens instead51523. **User Service Key**: `user_service_key` for Origin CA certificates53545556## Quick Reference: Common Commands5758```bash59terraform init # Initialize provider60terraform plan # Plan changes61terraform apply # Apply changes62terraform destroy # Destroy resources63terraform import cloudflare_zone.example <zone-id> # Import existing64terraform state list # List resources in state65terraform output # Show outputs66terraform fmt -recursive # Format code67terraform validate # Validate configuration68```6970## Import Existing Resources7172Use cf-terraforming to generate configs from existing Cloudflare resources:7374```bash75# Install76brew install cloudflare/cloudflare/cf-terraforming7778# Generate HCL from existing resources79cf-terraforming generate --resource-type cloudflare_dns_record --zone <zone-id>8081# Import into Terraform state82cf-terraforming import --resource-type cloudflare_dns_record --zone <zone-id>83```8485## Reading Order86871. Start with [README.md](./README.md) for provider setup and authentication882. Review [configuration.md](./configuration.md) for resource configurations893. Check [api.md](./api.md) for data sources and existing resource queries904. See [patterns.md](./patterns.md) for multi-environment and CI/CD patterns915. Read [gotchas.md](./gotchas.md) for state drift, v5 breaking changes, and troubleshooting9293## In This Reference94- [configuration.md](./configuration.md) - Resources for zones, DNS, workers, KV, R2, D1, Pages, rulesets95- [api.md](./api.md) - Data sources for existing resources96- [patterns.md](./patterns.md) - Architecture patterns, multi-env setup, CI/CD integration97- [gotchas.md](./gotchas.md) - Common issues, security, best practices9899## See Also100- [pulumi](../pulumi/) - Alternative IaC tool for Cloudflare101- [wrangler](../wrangler/) - CLI deployment alternative102- [workers](../workers/) - Worker runtime documentation103