equinix.dev’sDocumentation Index
Fetch the complete documentation index at: https://docs.equinix.dev/llms.txt
Use this file to discover all available pages before exploring further.
compile step emits a fresh main.tf and variables.tf per project. State — the JSON blob Terraform writes to track what it created — is not something equinix.dev manages. You pick the backend.
Local state for plan-only
If you’re staying in plan-only mode (noapply), local state is fine. The equinix-dev compile step writes .equinix-dev/terraform/main.tf; you can terraform init and terraform plan against it without remote state at all.
Remote state for shared workflows
For real deployments, pin to one of the standard remote backends. Three patterns we recommend:S3 + DynamoDB lock (AWS-anchored teams)
S3 + DynamoDB lock (AWS-anchored teams)
Most common when you already run terraform on AWS and have an S3 + DDB pattern in place.
equinix-dev compile --backend s3 injects this block at the top of main.tf.Terraform Cloud / HCP Terraform
Terraform Cloud / HCP Terraform
Best when you want the policy-as-code (Sentinel, OPA), drift detection, and policy enforcement HCP gives you.Useful pairing: HCP Sentinel policies enforce the same readiness gates that
equinix-dev preflight enforces, server-side.Spacelift
Spacelift
Best when you want a stack-of-stacks model with strong context isolation. Spacelift’s “Terragrunt-style” stack composition pairs naturally with equinix.dev’s per-package generation.
GCS / Azure Blob backends
GCS / Azure Blob backends
All standard Terraform backends work. Pick whichever matches your hyperscaler footprint.
Per-environment state
We recommend one Terraform workspace per (environment, metro) pair. Example workspace naming for the canonical Multi-cloud private interconnect recipe:apply on staging doesn’t lock prod state.
Equinix-specific gotchas
UUIDs change on re-creation
UUIDs change on re-creation
Fabric Cloud Routers and Connections get fresh UUIDs each time they’re created. If you
terraform destroy and re-create, downstream references (route filters, observability subscriptions) need the new UUIDs. Use Terraform outputs to expose UUIDs and pin them with lifecycle.replace_triggered_by only when the recreate is intentional.Account references drift on apply
Account references drift on apply
Several Fabric resources pull
account.account_number server-side after creation, which can show as a diff in subsequent plans. Add lifecycle { ignore_changes = [account, change_log] } to suppress it. The pattern is in every recipe we ship.Notification emails normalize
Notification emails normalize
The
notifications.emails field gets normalized server-side (lowercased, deduplicated, alphabetized). Match this in your HCL or set lifecycle { ignore_changes = [notifications] }.Service profile UUIDs are account-scoped
Service profile UUIDs are account-scoped
A service profile UUID looked up via
data.equinix_fabric_service_profiles is only valid in your account’s view. Sharing state across accounts requires recomputing the lookup.Drift detection
Use whatever drift tool your stack already uses. Three patterns work well:- Atlantis for plan-on-PR. Cheapest to set up.
- HCP Terraform for native drift + policy enforcement.
- Spacelift drift detection for cron-style sweeps with custom remediation runs.
Next
Importing existing services
terraform import patterns when adopting equinix.dev for an existing Equinix account.MCP server
Plug an agent into the Equinix MCP to author Terraform changes.