Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.equinix.dev/llms.txt

Use this file to discover all available pages before exploring further.

Short, practical answers to the questions most teams hit in their first week.

Auth

The OAuth client credentials in EQUINIX_CLIENT_ID / EQUINIX_CLIENT_SECRET are wrong or expired.Verify with:
curl -s -u "${EQUINIX_CLIENT_ID}:${EQUINIX_CLIENT_SECRET}" \
  "https://api.equinix.com/oauth2/v1/token" \
  -d "grant_type=client_credentials"
If you get a token back, the creds are valid. If not, regenerate at https://developer.equinix.com → My Apps.
The customer-facing account number is distinct from the OAuth client ID. Set EQUINIX_ACCOUNT_NUMBER to the value visible at the top of your Equinix portal under “Account.”
Override EQUINIX_API_ENDPOINT for the sandbox / staging Equinix portal. Default is https://api.equinix.com. The sandbox lives at https://api.sandbox.equinix.com (request sandbox access via your Equinix rep).

State drift

Server-side normalization. Add lifecycle { ignore_changes = [account, change_log] } to the resource. Every equinix-dev-emitted resource has this by default.
Email arrays normalize server-side (lowercased, deduplicated, sorted). Match the canonical order in HCL — alphabetical, lowercase — or ignore_changes = [notifications].
Profile UUIDs are scoped to the looking-up account. If you share Terraform state across accounts, redo the data.equinix_fabric_service_profiles lookup per account. Don’t hard-code UUIDs.

Multi-region

No. Fabric resources accept a metro_code per resource and the same provider block routes correctly. This differs from AWS / Azure / GCP, where regional aliasing is the norm.
Equinix uses two-letter metro codes: DC (Ashburn / IAD), DA (Dallas / DFW), SV (Silicon Valley / SV5), LD (London), AM (Amsterdam), TY (Tokyo), and so on. The full list is at docs.equinix.com or via data.equinix_fabric_metros.
A Fabric Connection can cross metros via the seller_region field on the Z-side access point. Cost is metered per Gbps-month and varies by metro pair. The Multi-cloud Use Case shows the pattern.

Performance

The Equinix portal API has rate limits per account. For accounts with hundreds of Fabric Connections, a terraform plan that walks all of them can take 30+ seconds. Cache reads via data sources where you can; refresh state selectively.
Bump max_retries and retry_wait_max in the provider block (see Provider setup).

Apply blocked from inside equinix-dev

By design. equinix-dev is a plan-only surface. The terraform apply command fails if invoked from inside the equinix-dev shell. To actually apply, exit the shell, cd .equinix-dev/terraform, and run terraform apply directly. You own that decision.
Use Atlantis, HCP Terraform, Spacelift, or your own GitHub Actions workflow. The CI runner is outside the equinix-dev shell and can terraform apply. equinix.dev is concerned with what gets into the apply path — not with executing it.
You don’t. The block is a feature. It’s the answer to “an agent should never spend money on my behalf without me looking at the plan first.” If you find yourself wanting to disable it, the demo is asking you the right question.

Migration

See Importing existing services. The TL;DR: discover UUIDs, run terraform import for each one, fix any state drift, then commit the resulting HCL.
Yes. equinix.dev composes happily alongside hand-written HCL. Use equinix-dev compile to emit the package’s contribution, then add custom blocks below. Subsequent equinix-dev compile runs only touch the package’s section (delimited by # BEGIN equinix-dev / # END equinix-dev markers).
Yes. equinix.dev is opinionated but not exclusive. If your team has internal Terraform modules wrapping equinix_* resources, equinix-dev compile --no-module skips the module emission and lets you compose your own.

Where to file issues

Next

Recipes

Three full Use Cases plus single-resource starters.

Quickstart

From zero to a passing terraform plan in five minutes.