CtrlK
BlogDocsLog inGet started
Tessl Logo

terraform-patterns

**UTILITY SKILL** — Reusable Azure Terraform patterns: hub-spoke, private endpoints, diagnostics, AVM-TF modules. WHEN: "hub-spoke Terraform", "private endpoint module", "AVM-TF composition", "diagnostic settings", "plan interpretation". DO NOT USE FOR: Bicep code (azure-bicep-patterns), ADRs (azure-adr), diagrams (drawio).

75

Quality

92%

Does it follow best practices?

Impact

No eval scenarios have been run

SecuritybySnyk

Passed

No known issues

SKILL.md
Quality
Evals
Security

Azure Terraform Patterns Skill

Composable architecture building blocks for Azure Terraform. Complements iac-terraform-best-practices.instructions.md (style) and azure-defaults skill (naming, tags, regions).

Canonical sources — the security baseline, AVM-first mandate, naming conventions, required tags, and unique-suffix rule live in azure-defaults/SKILL.md and iac-policy-compliance.md. This skill restates the rules tersely below for IaC-output convenience only; in conflict, the canonical sources win.


Quick Reference

PatternWhen to UseReference
Hub-Spoke NetworkingMulti-workload environments with shared servicesreferences/hub-spoke-pattern.md
Private Endpoint WiringAny PaaS service requiring private connectivityreferences/private-endpoint-pattern.md
Diagnostic SettingsEvery deployed resource (mandatory)references/common-patterns.md
Conditional DeploymentOptional resources controlled by variablesreferences/common-patterns.md
Module CompositionCalling multiple AVM modules in root moduleSee inline example below
Managed IdentityAny service-to-service authenticationreferences/common-patterns.md
Budget & Cost MonitoringEvery deployment (mandatory)references/budget-pattern.md
Plan InterpretationPre-deployment validation and change analysisreferences/plan-interpretation.md
AVM PitfallsSet-type diffs, provider pins, 4.x changesreferences/avm-pitfalls.md
AVM AuthoringAVM certification requirements, compliancereferences/avm-authoring-requirements.md
Module RefactoringMonolith → module extraction, state migrationreferences/refactor-module.md

Canonical Example — Module Composition

Wire AVM child modules by passing outputs as inputs (module.<name>.<output>); never hardcode IDs. AVM-TF module versions in APEX-generated code MUST be exact semver (version = "X.Y.Z") — pinned at plan time from registry.terraform.io (newest stable in modules[0].versions[]). Range constraints (~> X.Y, >= X.Y.Z) are NOT allowed in 04-iac-contract.json and will be flagged by npm run validate:avm-versions. Full code sample (resource group + key vault) and rationale in references/module-composition.md.


Rules

  • AVM-first: Use Azure/avm-res-* registry modules over raw azurerm_* resources
  • AVM-TF version pins: Exact semver only (version = "X.Y.Z") — resolve the latest stable via registry.terraform.io/v1/modules/Azure/avm-res-{path}/azurerm/versions at plan time. Stale pins need a pin_policy.mode = "exception" block in 04-iac-contract.json. Range constraints (~>, >=) are flagged by validate:avm-versions.
  • Hub-spoke: Spokes peer to hub only; never spoke-to-spoke
  • Private endpoints: Three resources per service — PE, DNS zone, VNet link
  • Diagnostics: Every resource MUST have a diagnostic setting → Log Analytics
  • Conditional: Use for_each (keyed) over count (indexed) for named resources
  • Identity: SystemAssigned managed identity + RBAC; avoid keys/connection strings
  • Provider pin: ~> 4.0 (allows 4.x patches, blocks 5.0)
  • Telemetry: Set enable_telemetry = false in restricted-network environments
  • Moved blocks: Use moved {} when renaming resources to prevent destroy/recreate
  • Budget: 3 forecast thresholds (80%/100%/120%); amount and emails MUST be variables

Steps

Applying a Terraform pattern in a root module:

  1. Identify the pattern — match your need to a row in Quick Reference (hub-spoke, private endpoint, diagnostics, conditional, identity, budget, plan interpretation)
  2. Load the reference — read the linked references/*.md; do not load all at once
  3. Compose AVM modules — wire outputs as inputs (see Canonical Example); never hardcode IDs
  4. Pin the provider~> 4.0 only; do not use >= 3.0 or exact = 4.x.y
  5. Add diagnostics + budget — every resource gets a diagnostic setting; every deployment gets a budget with 80%/100%/120% forecast alerts
  6. Plan before applyterraform plan -out=plan.tfplan; review for ~/-/+/- operations against references/plan-interpretation.md
  7. Validateterraform fmt -check, terraform validate, npm run validate:terraform, npm run validate:iac-security-baseline

Gotchas

  • Set-type phantom diffsazurerm_application_gateway, azurerm_lb, azurerm_network_security_group, azurerm_firewall, azurerm_frontdoor: adding ONE element causes ALL elements to show ~ changes. Mitigation: ignore_changes on set-type blocks.
  • Provider pin ~> 4.0 is critical>= 3.0 crosses breaking versions; = 4.1.0 blocks patches. MUST use ~> 4.0.
  • for_each over count for named resourcescount causes drift when items are inserted/removed (Terraform reindexes). Use for_each = toset().
  • moved block required for renaming — Renaming a resource ID without a moved {} block causes destroy + recreate.
  • azurerm 4.x renamed attributesallow_blob_public_accessallow_nested_items_to_be_public; enable_https_traffic_onlyhttps_traffic_only_enabled; azurerm_app_service removed → use azurerm_linux_web_app.

Reference Index

FileContents
references/hub-spoke-pattern.mdFull hub & spoke VNet + peering HCL
references/private-endpoint-pattern.mdPE + DNS zone + VNet link HCL, subresource table
references/common-patterns.mdDiagnostics, conditional deployment, module composition, identity
references/budget-pattern.mdConsumption budget, forecast alerts, anomaly detection
references/plan-interpretation.mdPlan commands, change symbols, red flags, summary script
references/avm-pitfalls.mdSet-type diffs, provider pins, tag ignore, moved blocks, 4.x
references/tf-best-practices-examples.mdBest-practice code examples, formatting, code review checklist
references/bootstrap-backend-template.mdBackend bootstrap template
references/deploy-script-template.mdDeployment script template
references/project-scaffold.mdProject scaffolding structure
references/avm-authoring-requirements.mdAVM certification: 37 requirements, compliance checklist
references/refactor-module.mdModule extraction, state migration, refactoring patterns
references/module-composition.mdCanonical AVM module composition example with output wiring
Repository
jonathan-vella/azure-agentic-infraops
Last updated
Created

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.