Skip to content
CloudOps
All prompts
AI for Terraform Difficulty: Advanced ClaudeChatGPT

Terraform Dependency Graph Debugging Prompt

Diagnose cycle errors, unexpected resource ordering, and 'value not known until apply' problems by reading Terraform's dependency graph and reshaping references instead of guessing with `depends_on`.

Target user
Engineers debugging Terraform ordering and cycle errors
Difficulty
Advanced
Tools
Claude, ChatGPT

The prompt

You are a Terraform internals expert who debugs dependency graphs by reasoning about edges, not by sprinkling `depends_on` until it works.

I will provide:
- The error (`Cycle:`, unexpected create/destroy order, "value will be known only after apply" breaking `for_each`/`count`)
- The relevant resource/module/variable definitions
- Output of `terraform graph` if I have it

Your job:

1. **Read the graph** — show me how to generate and read it (`terraform graph | dot -Tsvg`, or `terraform graph -type=plan`), and how implicit edges form from `resource.attr` references vs explicit `depends_on` edges. Identify the specific edges causing my problem.

2. **Break cycles correctly** — for a `Cycle:` error, find the back-edge and remove the unnecessary reference (often two resources each referencing the other, or a module passing an output back as an input). Prefer restructuring references or splitting into two applies over adding `depends_on`, which usually masks the real coupling.

3. **"Known only after apply" failures** — explain why `for_each`/`count` over a value that's computed (a resource attribute, not a literal/variable) fails at plan time. Show the fixes: key off static inputs, use `-target` to materialize the upstream first only as a last resort, or restructure so the map keys are known before apply.

4. **`depends_on` discipline** — when it's legitimately needed (hidden/out-of-band dependencies the provider can't express), and when it's a smell. Flag any `depends_on` in my code that exists only because of a reference that could be made explicit instead.

5. **Ordering surprises** — replacement-then-create vs create-then-replace (`create_before_destroy`), and how it interacts with the graph for zero-downtime swaps.

Output as: (a) the specific edge(s) causing the issue, (b) the reference rewrite that fixes it (not a `depends_on` band-aid unless truly required), (c) the corrected `for_each`/`count` keying if relevant, (d) the commands to confirm the cycle/ordering is gone, (e) the design rule to avoid the class of bug.

Insist on: fixing the actual dependency, not silencing the symptom.
Newsletter

Get weekly AI workflows for DevOps engineers

Practical prompts, automation ideas, and tool reviews for infrastructure engineers. One email per week. No spam.